欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > VSTO(C#)Excel开发2:Excel对象模型和基本操作

VSTO(C#)Excel开发2:Excel对象模型和基本操作

2025/3/9 19:46:10 来源:https://blog.csdn.net/2301_77171572/article/details/146116718  浏览:    关键词: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博客


(这里是文档结束)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词