C#,打开excel文件,并应用filter来检索特定的行?

问题:我的代码总是返回一行而不是13。

码:

Excel.Application xlApp = null; Excel.Workbook xlWorkBook = null; Excel.Worksheet xlWorkSheet = null; Excel.Range xlrange = null; string sCurrentDir = Directory.GetCurrentDirectory(); xlApp = new Excel.Application(); xlWorkBook = xlApp.Workbooks.Open(sCurrentDir + @"\Res\res.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, 0, true, 1, 0); xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); xlrange = xlWorkSheet.UsedRange; xlrange.AutoFilter(5, "4", Excel.XlAutoFilterOperator.xlFilterValues, Type.Missing, true); Excel.Range filteredRange = xlrange.SpecialCells(Excel.XlCellType.xlCellTypeVisible, Excel.XlSpecialCellsValue.xlTextValues); MessageBox.Show(filteredRange.Rows.Count.ToString()); 

正如你所看到的,我想过滤列5与价值“4”。 它应该返回13行,但总是返回1行。

任何帮助将不胜感激

如果你使用xlApp.Visible = true; 您可以使Excel应用程序可见

我只是运行你的代码,它似乎按照我的样本表的预期工作

我的样品表

在这里输入图像说明

我运行你的代码后,我看到正确应用filter

在这里输入图像说明

在这里输入图像说明

由于你得到1行,似乎filter不匹配任何行,1的行数可能只意味着标题行。

几个项目要注意的是:

(1)第五栏是E栏(不是栏F),即A栏是第一栏

(2)通过手动添加filter来交叉检查您的数据

我回答我自己的问题:

 ... ... Excel.Range filteredRange = xlrange.SpecialCells(Excel.XlCellType.xlCellTypeVisible, Excel.XlSpecialCellsValue.xlTextValues); for (int areaId = 1; areaId <= filteredRange.Areas.Count; areaId++) { areaRange = filteredRange.Areas[areaId]; object[,] areaValues = areaRange.Value; for (int row = 0; row < areaValues.GetLength(0); row++) { // ignore the Header row if (areaValues[row + 1, 1].ToString().ToLower() == "id") continue; //Add The Row To A List Or Array } }