C#互操作得到最后一行数据从一个特定的列

问题描述:

我试图从特定的列得到最后一行数据和运行我的代码的时候,我发现了以下错误: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

经典方法来获取最后使用的行中的列(如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;