【发布时间】:2015-09-22 17:45:33
【问题描述】:
我正在尝试在列上设置过滤器。这就是我在 Interop 中的做法:
private void CheckMasterFile(string path) {
var xlApp = new Excel.Application();
var xlWorkbook = xlApp.Workbooks.Open(path);
Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
foreach (var project in projects) {
if (string.IsNullOrEmpty(project.ProjectID.Value)) {
continue;
}
var xlRange = xlWorksheet.UsedRange;
if (xlWorksheet.AutoFilter != null) {
xlWorksheet.AutoFilterMode = false;
}
xlRange.AutoFilter(Field: 2, Criteria1: project.ProjectID.Value);
var result = xlRange.SpecialCells(Excel.XlCellType.xlCellTypeVisible, Type.Missing);//only shows filtered values
double sum = 0;
foreach (Excel.Range row in result.Rows) {
if (row.Cells[2, 2].Value2() != null) {
if (!NOT_ALLOWED_RUBRIQUES.Contains((string)row.Cells[2, 8].Value2())) {//check if rubrique is allowed or not
//finish method
}
}
}
}
xlWorkbook.Close(SaveChanges: false);
xlApp.Quit();
}
但我可以在 EPPlus 中使用自动过滤器执行某些操作的唯一方法是启用或禁用它,而不是根据特定值过滤列。 像这样的:
sheet.Cells["A RANGE HERE"].AutoFilter = true;
所以我在这里尝试实现的是根据特定值过滤一个巨大的 Excel 文件,然后只显示具有这些值的行。
【问题讨论】:
-
我的理解是,你希望生成的excel应该只有过滤后的数据吧?例如:如果您有 1000 条记录并且您的过滤器仅匹配 50 行,那么生成的 excel 应该只有 50 行。我理解正确吗?
-
不完全是一个新的输出文件,我打开的文件包含超过 1000 条记录。我想对该文件应用过滤器,这样它只会显示 50 条记录并在这些单元格上循环,而不是循环遍历整个文件并检查该循环中的每个单元格是否等于 projectID (project.ProjectID.Value)跨度>
标签: c# excel epplus autofilter