我有一个Microsoft.Office.Interop.Excel.Range对象,想要估计该范围的最终坐标即(最后一列,最后一行).
有喜欢的任何属性LastCol,LastRow.唯一属性是Column和Row,它们指定第一个单元格.但是如何才能获得该范围的最后一个单元格?
有两种方法可以做到这一点:
使用Worksheet.UsedRange确定的范围内.这将为您提供A1:F10等范围,或用于Worksheet.UsedRange.SpecialCells(IExcel.XlCellType.xlCellTypeLastCell)获取F10.
使用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;
这应该得到范围的第一个和最后一个单元格:
启动Excel.
打开工作簿.
选择您的范围,在这种情况下,我获得了活动工作表的使用范围.
调用范围的get_address方法.
在冒号上拆分get_address的结果.
分割产生的数组的第一个值将具有起始单元格.
分割产生的数组的第二个值将具有结束单元格.
用任何东西替换美元符号,您将获得该范围的开始和结束单元格.
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)