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

我有一个Microsoft.Office.Interop.Excel.Range对象,并希望估计该范围的结束坐标,即(最后一列,最后一行)。

没有像LastColLastRow属性。 唯一的属性是ColumnRow ,它们指定了第一个单元格。 但是我怎样才能得到范围的最后一个单元?

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

  1. 启动Excel。

  2. 打开工作簿。

  3. select你的范围,在这种情况下,我得到了活动工作表的使用范围。

  4. 调用范围的get_address方法。

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

  6. 数组的第一个数值将会有起始单元格。

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

  8. 将美元符号replace为空格,您将拥有范围的开始和结束单元格。

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

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

  int lastColumn = range.Columns.Count; int lastRow = range.Rows.Count; 

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

  1. 使用Worksheet.UsedRange来确定范围。 这会给你一个像A1:F10的范围,或者使用Worksheet.UsedRange.SpecialCells(IExcel.XlCellType.xlCellTypeLastCell)来获得F10

  2. 使用Range.End[IExcel.XlDirection]属性,它返回指定方向上的最后一个连续的非空单元格。 请注意,如果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;

使用Excel 2013,我们有很多情况下, UsedRangexlCellTypeLastCell只是给出了可怕的错误值。

例如,我们有一个只包含7列的工作表,有时这两个函数会告诉我们的C#代码有16000多列的数据。

我发现真正解决了包含数据的右下angular单元格的唯一方法是使用这个build议中的提示:

sheet.Cells.Find()