2017-03-09 13 views
1

我試圖從特定的列得到最後一行數據和運行我的代碼的時候,我發現了以下錯誤:C#互操作得到最後一行數據從一個特定的列

無法獲取WorksheetFunction類的COUNTA財產

var xlApp = new Microsoft.Office.Interop.Excel.Application(); 
var wb = (Excel.Workbook)Globals.ThisAddIn.Application.ActiveWorkbook; 
var wsConfig = wb.Sheets["Config"]; 

var usedRows = xlApp.WorksheetFunction.CountA(wsConfig.Columns[9]); 

也試過下面的代碼,但回報:

從HRESULT異常:0x800A03EC

var usedRows = wsConfig.Range["I1", wsConfig.Cells[1, wsConfig.Rows.Count]].End(Excel.XlDirection.xlDown).Value; 

實施例:

列I
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| |

=>usedRows = 5,因爲有5列列的數據我

+0

錯誤消息只是意味着你通過了'CountA'功能的不正確的說法。我相信它期望一個有效的'Excel.Range'。如果它是第九列,我認爲它應該是'wsConfig.Columns(「I:I」)''你傳遞給'CountA',但我猜測因爲我沒有一個項目需要處理。 – Equalsk

+0

哦,我想如果你看看這裏接受的答案可能是你想要的:http://stackoverflow.com/questions/5411355/how-do-i-get-an-entire-column-in-used-range – Equalsk

+0

我嘗試過,但它返回51(總行數)。 – Valip

回答

1

經典方法來獲取最後使用的行中的列(如A)是:

last = Sheets("Sheet1").Range("A" & Sheets("Sheet1").Rows.Count).End(xlUp).Row 

它說'從工作表中最後一個可用行開始工作(從版本到版本的更改)會一直向上,直到您打開一個包含最後一行值的單元格爲止。

你可以在你的例子寫在(列I)有:

var usedRows = wsConfig.Range["I" + wsConfig.Rows.Count.ToString()].End(Excel.XlDirection.xlUp).Row; 
相關問題