在使用 C# 和 VSTO (Visual Studio Tools for Office) 处理 Excel 工作表时,usedRange.Address 有时确实不会总是从 A1 开始。然而,通过 usedRange 的 Rows 和 Columns 属性,可以准确地获取工作表中实际使用的最大行和最大列。以下是一个示例代码,演示如何使用这些属性来获取工作表中实际使用的最大行和最大列:
csharp
using Excel = Microsoft.Office.Interop.Excel;
class ExcelUtils
{
public static (int maxRow, int maxColumn) GetMaxRowAndColumn(Excel.Worksheet worksheet)
{
// 获取使用的范围
Excel.Range usedRange = worksheet.UsedRange;
// 获取使用范围的行数和列数
int maxRow = usedRange.Rows.Count;
int maxColumn = usedRange.Columns.Count;
// 返回实际使用的最大行和最大列
return (maxRow, maxColumn);
}
}
在这个示例中:
-
使用 worksheet.UsedRange 获取工作表中实际使用的范围。
-
通过 usedRange.Rows.Count 获取使用范围的行数。
-
通过 usedRange.Columns.Count 获取使用范围的列数。
-
返回的元组包含最大行数 (`maxRow`) 和最大列数 (`maxColumn`)。
请注意,UsedRange 的 Rows 和 Columns 属性返回的是相对的行数和列数,意味着它们基于使用范围的起始单元格。如果需要绝对的最大行和最大列,需要考虑 UsedRange 的起始行和起始列。
下面是修改后的代码,考虑了 UsedRange 的起始行和起始列:csharp
cs
using Excel = Microsoft.Office.Interop.Excel;
class ExcelUtils
{
public static (int maxRow, int maxColumn) GetMaxRowAndColumn(Excel.Worksheet worksheet)
{
// 获取使用的范围
Excel.Range usedRange = worksheet.UsedRange;
// 获取使用范围的起始行和起始列
int startRow = usedRange.Row;
int startColumn = usedRange.Column;
// 计算实际使用的最大行和最大列
int maxRow = startRow + usedRange.Rows.Count - 1;
int maxColumn = startColumn + usedRange.Columns.Count - 1;
// 返回实际使用的最大行和最大列
return (maxRow, maxColumn);
}
}
在这个版本中,我们首先获取 UsedRange 的起始行和起始列,然后加上相对的行数和列数,减去 1 得到绝对的最大行和最大列。
这样,可以准确地获取 Excel 工作表中实际使用的最大行和最大列。