我希望能够从特定行(例如,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();
}
}
}
答案 0 :(得分:0)
您的代码会打开一个Excel工作簿,从使用范围中获取范围。然后设置名为int
的{{1}}以标识第2行第1行中最后使用的行:
row_used
然后输出int row_used = xlTestRange.Cells[2, 1].End(Excel.XlDirection.xlDown).Row;
。
运行一些测试表明,如果更改行值,则不会更改返回的值。我有一种感觉,您可能只需从当前选定的单元格开始向下计数,直到达到该列中的空单元格。
我不明白你的评论:我希望能够从特定行(例如,A2到A列中使用的最后一行)获取列中使用的行数。当您在代码中打开文档时,当前选定的单元格将是上次保存/关闭时所选单元格所在的位置。所以我猜这是一个插件(VSTO)到Excel,而不一定是在C#代码中与用户交互。我想你可能不得不自己计算它们,除非有另外一个Excel功能可以做到这一点。
来自@Seth Moore的Get Last non Empty Cell of Excel Column Programatically
的一个解决方案row_used
只是计算列中的所有非空单元格。然而,它在你的代码中有效,你可能会遇到一些缺点。使用下图描述了可能存在问题的情况。
当使用Range返回显示的内容时,您没有说明如何解决问题。你期望在“C”栏中得到什么?目前,前两列的两个代码示例相同,但是在“C”列中,您的代码为该列返回4,因为第一个非空单元格从顶部开始于第4行。使用var row_Used = excelApp.WorksheetFunction.CountA(xlWorksheet.Columns[4]);
,第二个代码结果为8。列“D”您的代码按预期返回2,第二个返回7。我不确定你会如何处理这些情况。希望这会有所帮助。