获取Excel范围对象的最后一个单元格(列,行)

M. *_*. X 7 c# excel vsto

我有一个Microsoft.Office.Interop.Excel.Range对象,想要估计该范围的最终坐标即(最后一列,最后一行).

有喜欢的任何属性LastCol,LastRow.唯一属性是ColumnRow,它们指定第一个单元格.但是如何才能获得该范围的最后一个单元格?

Xia*_*312 9

有两种方法可以做到这一点:

  1. 使用Worksheet.UsedRange确定的范围内.这将为您提供A1:F10等范围,或用于Worksheet.UsedRange.SpecialCells(IExcel.XlCellType.xlCellTypeLastCell)获取F10.

  2. 使用Range.End[IExcel.XlDirection]property,它返回指定方向上的最后一个连续的非空单元格.请注意,如果Range为空,它将返回给定方向上的第一个无空单元格或最后一个单元格(当excel到达其边界时).例如:整列A为空,Range["A1"].End[IExcel.XlDirection.xlDown]将为A65535(excel 97-2003的最后一行,excel 2007的A1048576)

//Just In case if you are wondering what IExcel is
using IExcel = Microsoft.Office.Interop.Excel;


jiv*_*son 7

这应该得到范围的第一个和最后一个单元格:

  1. 启动Excel.

  2. 打开工作簿.

  3. 选择您的范围,在这种情况下,我获得了活动工作表的使用范围.

  4. 调用范围的get_address方法.

  5. 在冒号上拆分get_address的结果.

  6. 分割产生的数组的第一个值将具有起始单元格.

  7. 分割产生的数组的第二个值将具有结束单元格.

  8. 用任何东西替换美元符号,您将获得该范围的开始和结束单元格.

    Microsoft.Office.Interop.Excel.Application excel = new Application();
    Microsoft.Office.Interop.Excel.Workbook workBook =
        excel.Workbooks.Open(fileLocation);
    Microsoft.Office.Interop.Excel.Worksheet sheet = workBook.ActiveSheet;
    Microsoft.Office.Interop.Excel.Range range = sheet.UsedRange;
    string address = range.get_Address();
    string[] cells = address.Split(new char[] {':'});
    string beginCell = cells[0].Replace("$", "");
    string endCell = cells[1].Replace("$", "");
    workBook.Close(true);
    excel.Quit();
    
    Run Code Online (Sandbox Code Playgroud)

如果您希望最后一列和最后一行相对于范围的开头,您可以执行以下操作:

    int lastColumn = range.Columns.Count;
    int lastRow = range.Rows.Count;
Run Code Online (Sandbox Code Playgroud)