在使用 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);
}
}
在这个示例中:
1. 使用 worksheet.UsedRange 获取工作表中实际使用的范围。
2. 通过 usedRange.Rows.Count 获取使用范围的行数。
3. 通过 usedRange.Columns.Count 获取使用范围的列数。
4. 返回的元组包含最大行数 (`maxRow`) 和最大列数 (`maxColumn`)。
请注意,UsedRange 的 Rows 和 Columns 属性返回的是相对的行数和列数,意味着它们基于使用范围的起始单元格。如果需要绝对的最大行和最大列,需要考虑 UsedRange 的起始行和起始列。
下面是修改后的代码,考虑了 UsedRange 的起始行和起始列: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 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 工作表中实际使用的最大行和最大列。