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

时间:2017-01-15 08:44:53

标签: c# excel interop vsto excel-interop

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

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

enter image description here

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();
    }
}
}

1 个答案:

答案 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

只是计算列中的所有非空单元格。然而,它在你的代码中有效,你可能会遇到一些缺点。使用下图描述了可能存在问题的情况。

enter image description here

当使用Range返回显示的内容时,您没有说明如何解决问题。你期望在“C”栏中得到什么?目前,前两列的两个代码示例相同,但是在“C”列中,您的代码为该列返回4,因为第一个非空单元格从顶部开始于第4行。使用var row_Used = excelApp.WorksheetFunction.CountA(xlWorksheet.Columns[4]); ,第二个代码结果为8。列“D”您的代码按预期返回2,第二个返回7。我不确定你会如何处理这些情况。希望这会有所帮助。