2

我有总是如下所示的 excel 表

A |  B  |  C
  |     |    
  |     |  something here maybe 
1 |  x  |  k
2 |  y  |  l
3 |  z  |  n
  |  j  |  
  |  j  |  
   ...
  |     |  

我想获取 A 列中最后一个非空单元格的值。A 列总是从 A6 开始并持续一段时间,之后它是空的,但 B 列会持续一段时间。这具有如果我使用下面的代码的效果:

sh = app.Workbooks.get_Item("Workbook1.xlsx").Worksheets.get_Item("Sheet1");
fullRow = sh.Rows.Count;
lastRow = sh.Cells[fullRow, 1].End(Excel.XlDirection.xlUp).Row;

我得到最后一行 B 非空的最后一行。这可能比 A 开始为空的位置低 50 行。有没有办法在不迭代所有值的情况下使用 C# 来做到这一点?

编辑

事实证明,A 列是基于 C 列的,所以我应该检查 C。事实证明,C 与 A 产生相同的结果可能是因为该函数。幸运的是,有一个 D 列没有相同的问题,所以如果我使用上面的代码将 1 更改为 4,它就像一个魅力。

4

1 回答 1

1

编辑: 对不起,我最初误解了这个问题,感谢 KekuSemau 澄清了这个问题!

尝试:

sh.Range["A1", sh.Cells[1,sh.Rows.Count]].End(Excel.XlDirection.xlDown).Value;

此外,如果您知道列中不会有空单元格,则可以使用 CountA:

var usedRows = xlApp.WorksheetFunction.CountA(xlWorkSheet.Columns[1]);

资源

于 2013-08-12T17:12:25.630 回答