获取Excel范围对象的最后一个单元格(列,行)
我有一个Microsoft.Office.Interop.Excel.Range
对象,并希望估计该范围的结束坐标,即(最后一列,最后一行)。
没有像LastCol
, LastRow
属性。 唯一的属性是Column
和Row
,它们指定了第一个单元格。 但是我怎样才能得到范围的最后一个单元?
这应该得到范围的第一个和最后一个单元格:
-
启动Excel。
-
打开工作簿。
-
select你的范围,在这种情况下,我得到了活动工作表的使用范围。
-
调用范围的get_address方法。
-
在冒号上拆分get_address的结果。
-
数组的第一个数值将会有起始单元格。
-
由分割产生的数组的第二个值将有结束单元格。
-
将美元符号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;
有两种方法可以做到这一点:
-
使用
Worksheet.UsedRange
来确定范围。 这会给你一个像A1:F10的范围,或者使用Worksheet.UsedRange.SpecialCells(IExcel.XlCellType.xlCellTypeLastCell)
来获得F10 。 -
使用
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,我们有很多情况下, UsedRange
和xlCellTypeLastCell
只是给出了可怕的错误值。
例如,我们有一个只包含7列的工作表,有时这两个函数会告诉我们的C#代码有16000多列的数据。
我发现真正解决了包含数据的右下angular单元格的唯一方法是使用这个build议中的提示:
sheet.Cells.Find()