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

相关推荐
Grey Zeng13 小时前
Java SE 25新增特性
java·jdk·jdk新特性·jdk25
雨白14 小时前
Java 线程通信基础:interrupt、wait 和 notifyAll 详解
android·java
架构师沉默19 小时前
设计多租户 SaaS 系统,如何做到数据隔离 & 资源配额?
java·后端·架构
Java中文社群20 小时前
重要:Java25正式发布(长期支持版)!
java·后端·面试
每天进步一点_JL21 小时前
JVM 类加载:双亲委派机制
java·后端
用户298698530141 天前
Java HTML 转 Word 完整指南
java·后端
渣哥1 天前
原来公平锁和非公平锁差别这么大
java
渣哥1 天前
99% 的人没搞懂:Semaphore 到底是干啥的?
java
J2K1 天前
JDK都25了,你还没用过ZGC?那真得补补课了
java·jvm·后端
kfyty7251 天前
不依赖第三方,不销毁重建,loveqq 框架如何原生实现动态线程池?
java·架构