VSTO(C#)Excel开发2:Excel对象模型和基本操作
初级代码游戏的专栏介绍与文章目录-CSDN博客
我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。
这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。
源码指引:github源码指引_初级代码游戏的博客-CSDN博客
前一篇:VSTO(C#)Excel开发1:起步 示例项目-CSDN博客
前一篇已经能够运行excel扩展并能够使用按钮事件来显示消息,现在我们了解如果访问Execl里面的东西。
目录
一、Excel对象模型
二、程序如何访问对象模型
三、示例代码
四、基本操作
4.1 Application
4.2 Workbook
4.3 Worksheet
4.4 Range

一、Excel对象模型
Excel提供了一个对象模型,外接程序通过对象模型来访问功能。对象模型里面最重要的四个对象是:
- Application 总入口,表示整个Excel程序
- Workbook 工作簿,也就是文件
- Worksheet 工作表
- Range 这个好麻烦,可以代表一个单元格、一行、一列、连续区域,以及多个连续区域甚至多张工作表的多个连续区域
每个对象都有一些属性和方法供操作。
二、程序如何访问对象模型
Excel对象模型位于Microsoft.Office.Interop.Excel下,可以添加using以简化访问:
using Microsoft.Office.Interop.Excel;//直接使用Worksheet Range
或者
using Excel = Microsoft.Office.Interop.Excel;//使用Excel.Worksheet
Application对象是默认生成的类ThisAddIn的成员,在ThisAddIn类里面可以直接访问:

不加“this”也可以。(上面增加的代码来自微软的教程,没什么意思)
在其他类不能直接访问,但可以使用Globals.ThisAddIn.Application来访问:

后面详细介绍这段代码。
三、示例代码
我们现在修改上次编写的button1_Click函数:
private void button1_Click(object sender, RibbonControlEventArgs e){string str = "Application 版本:" + Globals.ThisAddIn.Application.Version + "\n";try{str += "原始Caption:" + Globals.ThisAddIn.Application.Caption + "\n";Globals.ThisAddIn.Application.Caption = "1234567";str += "工作簿总数:" + Globals.ThisAddIn.Application.Workbooks.Count + "\n";str += "当前工作簿:" + Globals.ThisAddIn.Application.ActiveWorkbook.Name + "\n";str += "工作表总数:" + Globals.ThisAddIn.Application.Worksheets.Count + "\n";Worksheet activeSheet = Globals.ThisAddIn.Application.ActiveSheet;str += "当前工作表:" + activeSheet.Name + "\n";str += "列总数:" + (null != activeSheet.Columns ? activeSheet.Columns.Count : -1)+ " 行总数:" + (null != activeSheet.Rows ? activeSheet.Rows.Count : -1)+ " UsedRange:" + activeSheet.UsedRange.Address+ "\n";Range currentCell = Globals.ThisAddIn.Application.ActiveCell;str += "当前单元格:" + currentCell.Address + " 内容:" + currentCell.Text+"\n";//str += "Cells:" + activeSheet.Cells.Count;//新建或有数据或保存过的都触发异常activeSheet.get_Range("A1:B1").Value = new string[2] { "Value", "2" };activeSheet.get_Range("A2:A3").Value = new string[2] { "Value", "2" };//竖着是无效的,只会重复第一个数据activeSheet.get_Range("B5").Value2 = "Value2";activeSheet.get_Range("C5:C10").Value2 = "Value2";}catch (Exception ex){MessageBox.Show(ex.ToString());}MessageBox.Show(str);}
直接执行应该是没问题的(注释掉的那句会引发异常,我们先回避,以后再搞清楚到底怎么回事,数据模型的设计本身也未必很久严谨,毕竟是很多年逐渐改出来的)。
先点击运行,会自动打开Excel,选择空新建工作簿,然后点击“加载项”,最后点击我们写的按钮“button1”,效果如下图(注意内容都是代码添加上去的):

由于代码中添加内容是在消息框之后执行的,所以消息框显示的是无数据时的状态。再点一次“button1”显示的就不一样了:

四、基本操作
4.1 Application
- Version 获取Excel的版本
- Caption 获取完整的标题栏(包括工作簿名称)或者设置标题栏的后半部(不包括工作簿名称)
- Workbooks 所有的工作簿的集合
- ActiveWorkbook 当前工作簿
- ActiveSheet 当前工作表
- ActiveCell 当前单元格
4.2 Workbook
- Name 工作簿的名称
4.3 Worksheet
- Name 工作表的名称
- Columns 列的集合,从示例看行和列的Count和实际用到的没关系
- Rows 行的集合
- Cells 这个看起来是单元格的集合但是调用它的Count就会抛出异常,所以先别用吧
- UsedRange 使用的单元格,示例代码多尝试几次中可以看出来是有内容的矩形范围,注意示例代码的消息框显示的是点击按钮之前的状态,有人说删除数据不影响这个值,从这个测试代码看不出来,或许还有别的原因吧,比如设置格式之类
- get_Range 获取单元格或一组单元格,这个才是我们用来操作单元格的对象
4.4 Range
- Address 单元格或很多单元格的地址
- Value 单元格的值,如果是一组单元格就要传入数组,获取的时候也是得到数组,实话说我挺困惑的,不是很适应这种过于灵活的编程语言的思路
- Value2 按照别人的说法,跟Value的区别是不会处理某些复杂格式
- Text 获取文本,如果是很多单元格,会拼接在一起,这个属性是只读的
下一篇:VSTO(C#)Excel开发3:Range对象 处理列宽和行高-CSDN博客
(这里是文档结束)
相关文章:
VSTO(C#)Excel开发2:Excel对象模型和基本操作
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
MySQL索引数据结构
目录 1 索引常用的数据结构 1.1 二叉树 1.2 平衡二叉树 1.3 红黑树 1.3 Hash表 1.4 B树 1.4 B树 2 MySQL索引的数据结构 2.1 MyISAM存储引擎索引 2.2 InnoDB存储引擎索引 2.2.1 聚集索引 2.2.2 非聚集索引 2.2.3 联合索引数 2.2.4 hash索引 1 索引常用的数据结构 1.1 二叉树 二…...
C 语 言 --- 数 组 (1)
C 语 言 --- 数 组1 数 组定义一维数组语 法 格 式初始化完 全 初 始 化不 完 全 初 始 化省 略 数 组 大 小不 初 始 化使 用 memset 初 始 化 类 型访 问 元 素一 维 数 组 在 内 存 中 的 存 储 总结 💻作 者 简 介:曾 与 你 一 样 迷 茫,…...
[视频编码]rkmpp 实现硬件编码
mpi_enc_test的命令参数描述说明 命令参数的描述说明如下: 命令参数 描述说明 -i 输入的图像文件。 -o 输出的码流文件。 -w 图像宽度,单位为像素。 -h 图像高度,单位为像素。 -hstride 垂直方向相邻两行之间的距离,单…...
3D数字化:家居行业转型升级的关键驱动力
在科技日新月异的今天,家居行业正经历着一场前所未有的变革。从传统的线下实体店铺到线上电商平台的兴起,再到如今3D数字化营销的广泛应用,消费者的购物体验正在发生翻天覆地的变化。3D数字化营销不仅让购物变得更加智能和便捷,还…...
网安知识点
1.SQL注入漏洞产生的原因是? 前端传到后端的数据,没有经过任何处理,直接当作sql语句的一部分来执行 2.讲一下sql注入,写入webshell需要哪些前提条件 开启导入导出权限secure-file-priv 站点根目录位置/路径 mysql用户对站点根目…...
天津大学02-深度解读DeepSeek:部署、使用、安全【文末附下载链接】
大模型风险与不当用例——价值观错位 大模型与人类价值观、期望之间的不一致而导致的安全问题,包含:• 社会偏见(Social Bias)LLM在生成文本时强化对特定社会群体的刻板印象,例如将穆斯林与恐怖主义关联,或…...
【kubernetes】service
目录 1. 说明2. 原理2.1 服务注册2.2 服务发现2.3 负载均衡 3. Service的类型3.1 ClusterIP3.2 NodePort3.3 LoadBalancer3.4 ExternalName 4. 使用场景 1. 说明 1.kubernetes中的service主要用于提供网络服务,并实现微服务架构中的几个核心功能:全自动…...
Python卷积神经网络(CNN)来识别和计数不同类型的工业零件
以下三种类型工业零件为例,使用卷积神经网络(CNN)来识别和计数不同类型的工业零件。以下是Python实现步骤: 数据准备:收集并标注包含不同形状(如方形、圆形、扇形)的工业零件图像数据集。 模型…...
MoonSharp 文档二
目录 6.Sharing objects 我们先来简单谈谈类型描述符 先说类型描述 稍微复杂一点 调用静态成员 应该使用 “:” 还是 “.” 重载 ByRef 参数(C# 中的 ref/out) 索引器 userdata 上的运算符和元方法 扩展方法 事件 关于 InteropAccessMode 的…...
android 支持自定义布局、线程安全、避免内存泄漏的 Toast 工具类
支持自定义布局:可以灵活地显示自定义样式的 Toast。 线程安全:确保在主线程中显示 Toast,避免崩溃。 避免内存泄漏:使用 ApplicationContext 和取消机制,防止内存泄漏问题。 工具类:作为一个通用的工具…...
景联文科技:以精准数据标注赋能AI进化,构筑智能时代数据基石
在人工智能技术席卷全球的浪潮中,高质量数据已成为驱动AI模型进化的核心燃料。作为全球领先的AI数据服务解决方案提供商,景联文科技深耕数据标注领域多年,以技术为基、以专业为本,致力于为全球客户提供全场景、高精度、多模态的数…...
Mysql的卸载安装配置以及简单使用
MySQL其它问题已经更新在:MySQL完善配置---可视化-CSDN博客 一、卸载 ①控制面板卸载 ②C盘隐藏项目>ProgramData>mysql相关文件夹,还有Program file下的MySQL文件夹 ③开始菜单栏搜索>服务,找到MySQL相关服务删除,如果再…...
使用 ResponseBodyEmitter 实现异步响应式数据流处理
1. 概述 1.1 什么是 ResponseBodyEmitter ResponseBodyEmitter 是 Spring MVC 提供的一个接口,用于支持异步返回响应数据流。它允许在控制器方法中逐步发送数据给客户端,而无需一次性生成完整的响应。 1.2 使用场景 实时数据推送(如股票行情、聊天消息等)。大量数据分批…...
Uniapp项目运行到微信小程序、H5、APP等多个平台教程
摘要:Uniapp作为一款基于Vue.js的跨平台开发框架,支持“一次开发,多端部署”。本文将手把手教你如何将Uniapp项目运行到微信小程序、H5、APP等多个平台,并解析常见问题。 一、环境准备 在开始前,请确保已安装以下工具…...
Ubuntu 下 nginx-1.24.0 源码分析 - cycle->modules[i]->type
Nginx 中主要有以下几种模块类型 类型 含义 NGX_CORE_MODULE 核心模块(如进程管理、错误日志、配置解析)。 NGX_EVENT_MODULE 事件模块(如 epoll、kqueue 等 IO 多路复用机制的实现)。 NGX_HTTP_MODULE HTTP 模块…...
基于SpringBoot的“文物管理系统”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“文物管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体功能模块图 E-R实体图 系统首页界面 系统…...
dify + ollama + deepseek-r1+ stable-diffusion 构建绘画智能体
故事背景 stable-diffusion 集成进 dify 后,我们搭建一个小智能体,验证下文生图功能 业务流程 #mermaid-svg-6nSwwp69eMizP6bt {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6nSwwp69eMiz…...
Android原生gif动图加载AnimatedImageDrawable
Android原生gif动图加载AnimatedImageDrawable 从Android P(9.0)开始,Android系统支持gif动图的原生控件AnimatedImageDrawable,可以播放加载gif动图。 AnimatedImageDrawable官方文档链接: https://developer.andro…...
Windows 系统 Docker Desktop 入门教程:从零开始掌握容器化技术
文章目录 前言一、Docker 简介二、Docker Desktop 安装2.1 系统要求2.2 安装步骤 三、Docker 基本概念四、Docker 常用命令五、实战:运行你的第一个容器5.1 拉取并运行 Nginx 容器5.2 查看容器日志5.3 停止并删除容器 六、总结 前言 随着云计算和微服务架构的普及&…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
MeshGPT 笔记
[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...
起重机起升机构的安全装置有哪些?
起重机起升机构的安全装置是保障吊装作业安全的关键部件,主要用于防止超载、失控、断绳等危险情况。以下是常见的安全装置及其功能和原理: 一、超载保护装置(核心安全装置) 1. 起重量限制器 功能:实时监测起升载荷&a…...
