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

相关推荐
wanderist.3 分钟前
Lambda表达式在算法竞赛中的应用
java·开发语言·算法
海天鹰1 小时前
PHP上传文件
android·开发语言·php
腻害兔1 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:IM 即时通讯模块,一个被低估的「全功能聊天系统」
java·前端·vue.js·产品经理·ai编程
心念枕惊2 小时前
.NET CORE 授权进阶-角色、策略与动态权限实现
java·前端·.netcore
Yeauty2 小时前
渲染成图再 CLI 拼接,还是进程内直推?Rust 帧到视频的两条路
开发语言·rust·音视频
geovindu3 小时前
CSharp: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·算法·c#·.net·搜索算法
景同学3 小时前
把 AI 用到线上运维:可行、有效,前提是喂足信息——一次 Full GC 排障实录
java·人工智能·后端
库克克4 小时前
【C++】set 与multiset
开发语言·c++
Wang's Blog4 小时前
Go-Zero项目开发34: 微服务超时控制与重试机制实践
开发语言·微服务·golang·go-zero
C++、Java和Python的菜鸟4 小时前
第7章 后端Web实战(Tlias系统)
java