获取特定列中的行数(来自特定行)Excel Interop C#

我希望能够从特定的行(例如,A2到列A中使用的最后一行)获取列中使用的行数。

我试了下面的代码,但无法得到所需的结果(即,应得到4,但得到5行)

在这里输入图像说明

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using Excel = Microsoft.Office.Interop.Excel; namespace excel_interop_practice { class Program { static void Main(string[] args) { Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWorkbook = xlApp.Workbooks.Open("D:\\book1.xlsx"); Excel.Range xlTestRange; Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1]; xlTestRange = xlWorksheet.UsedRange; int row_used = xlTestRange.Cells[2, 1].End(Excel.XlDirection.xlDown).Row; Console.WriteLine(row_used); Console.ReadKey(); } } } 

你的代码打开一个excel工作簿,从使用的范围获得一个范围。 然后设置一个名为row_usedint来标识第2行col 1中最后使用的行:

 int row_used = xlTestRange.Cells[2, 1].End(Excel.XlDirection.xlDown).Row; 

然后你输出row_used

运行一些testing显示,如果您更改行值,它不会更改返回的值。 我有一种感觉,你可能只需从当前选中的单元格向下计数,直到到达该列中的空单元格为止。

我不明白你的意见: 我希望能够从特定的行(例如,A2到列A中使用的最后一行)获得列中使用的行数。 当您在代码中打开文档时,当前选定的单元格将是上次保存/closures时选定单元格的位置。 所以我猜测这是一个插件(VSTO)的Excel,并不一定打算与您的C#代码中的用户交互。 再次,我想你可能不得不自己数一数,除非有另一个Excel函数可以做到这一点。

@Seth Moore的一个解决scheme,以编程方式获取Excel列的最后一个非空单元格

 var row_Used = excelApp.WorksheetFunction.CountA(xlWorksheet.Columns[4]); 

只是计算列中的所有非空单元格。 它可以工作,但是在你的代码中可能会遇到一些缺点。 使用下面的图片描述了一个可能的问题情况。

在这里输入图像说明

当“使用范围”返回类似所示的内容时,您不会说出如何解决问题。 你希望在“C”列中得到什么? 目前这两个代码示例对于前两列是相同的,但是在“C”列中,您的代码返回4,因为第一个非空单元格从顶部的第4行开始。 第二个代码结果将是8使用CountA 。 列“D”您的代码返回2预期和7秒。 我不确定你会如何处理这些情况。 希望这可以帮助。