2017-07-16 83 views
1

問題: 我的代碼總是返回,而不是13C#,打開excel文件並應用篩選器來檢索特定的行?

代碼一行:

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行。

任何幫助將讚賞

+0

多少行,你期待?如果您使Excel應用程序可見,那麼過濾看起來已經完成了您的預期? – mjwills

+0

另一方面,您設置'xlWorkBook'(和其他變量)的方式可能會導致您遇到問題。見https://ausdotnet.wordpress.com/category/technical/com-interop/(搜索「恐懼期」)。 – mjwills

+0

@mjwills嗨,謝謝你的回覆。請參閱更新。我檢查了你的鏈接,但它沒有幫助我。 –

回答

0

我回答我的問題:

... 
... 
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 

    } 
} 
1

如果使用 xlApp.Visible = true; 可以使Excel應用程序可見

我只是跑你的代碼,它似乎希望我的樣紙

工作我樣品頁

enter image description here

後,我運行代碼,我看到正在正確應用

enter image description here

enter image description here

過濾既然你得到1行似乎過濾器不匹配的任何行和1行計數可能意味着只是標題行。

幾個項目需要注意的是:

(1)第五列是列E(未F列),即A列是第一列

(2)交叉通過手動添加檢查數據過濾

+0

感謝您的回答。是通過使xlApp可見過濾器工作正常但我只需要訪問代碼中的過濾數據。實際上我需要訪問通過代碼過濾的每一行。 #5列是好的,它應該返回13行 –

相關問題