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

初级代码游戏的专栏介绍与文章目录-优快云博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。

源码指引:github源码指引_初级代码游戏的博客-优快云博客


        前一篇:VSTO(C#)Excel开发1:起步 示例项目-优快云博客

        前一篇已经能够运行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对象 处理列宽和行高-优快云博客


(这里是文档结束)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初级代码游戏

知识究竟是有价还是无价

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值