使用vsto获取Excel 工作表中实际使用的最大行和最大列

在使用 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

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 工作表中实际使用的最大行和最大列。

相关推荐
基德爆肝c语言3 分钟前
Qt控件:按钮类
开发语言·qt
茉莉玫瑰花茶6 分钟前
LangGraph 入门教程:构建 AI 工作流 [ 案例二 ]
开发语言·人工智能·python
yaoxin5211237 分钟前
403. Java 文件操作基础 - 写入二进制文件
java·开发语言·python
未若君雅裁7 分钟前
Redis Key 过期后会立刻删除吗?过期删除与内存淘汰策略详解
java·redis
爱喝水的鱼丶10 分钟前
SAP-ABAP:ABAP Development Tools(ADT)安装配置学习分享教程(四篇连载) 第二篇:ADT客户端完整安装与初始配置教程
运维·开发语言·学习·sap·abap
livemetee14 分钟前
Java自定义线程池核心参数解析
java
Java面试题总结14 分钟前
spring重点详解
java·后端·spring
AKA__Zas18 分钟前
初识多线程(2.0)
java·开发语言·学习方法
叼烟扛炮18 分钟前
C++ 知识点19 匿名对象
开发语言·c++·算法·匿名对象
0xDevNull21 分钟前
Java十道高频面试题(二)
java·开发语言