当前位置: 首页 > news >正文

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 模块&#xf…...

基于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 停止并删除容器 六、总结 前言 随着云计算和微服务架构的普及&…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...

聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇

根据 QYResearch 发布的市场报告显示,全球市场规模预计在 2031 年达到 9848 万美元,2025 - 2031 年期间年复合增长率(CAGR)为 3.7%。在竞争格局上,市场集中度较高,2024 年全球前十强厂商占据约 74.0% 的市场…...

前端工具库lodash与lodash-es区别详解

lodash 和 lodash-es 是同一工具库的两个不同版本,核心功能完全一致,主要区别在于模块化格式和优化方式,适合不同的开发环境。以下是详细对比: 1. 模块化格式 lodash 使用 CommonJS 模块格式(require/module.exports&a…...

【向量库】Weaviate 搜索与索引技术:从基础概念到性能优化

文章目录 零、概述一、搜索技术分类1. 向量搜索:捕捉语义的智能检索2. 关键字搜索:精确匹配的传统方案3. 混合搜索:语义与精确的双重保障 二、向量检索技术分类1. HNSW索引:大规模数据的高效引擎2. Flat索引:小规模数据…...

【免杀】C2免杀技术(十五)shellcode混淆uuid/ipv6/mac

针对 shellcode 混淆(Shellcode Obfuscation) 的实战手段还有很多,如下表所示: 类型举例目的编码 / 加密XOR、AES、RC4、Base64、Poly1305、UUID、IP/MAC改变字节特征,避开静态签名或 YARA结构伪装PE Stub、GIF/PNG 嵌入、RTF OLE、UUID、IP/MAC看起来像合法文件/数据,弱…...

Java编程之组合模式

引言 在软件开发的世界里,我们经常会遇到需要表示"部分-整体"层次结构的场景。比如文件系统中的文件和文件夹、图形界面中的各种组件、企业组织架构中的部门和员工等。这些场景都有一个共同的特点:我们需要以一种统一的方式来处理单个对象和由…...