VSTO学习笔记(二)Excel对象模型

原文:VSTO学习笔记(二)Excel对象模型

上一次主要学习了VSTO的发展历史及其历代版本的新特性,概述了VSTO对开发人员的帮助和效率提升。从这次开始,将从VSTO 4.0开始,逐一探讨VSTO开发中方方面面,本人接触VSTO时间不长,也是一次尝试。鉴于Excel在整个Office家族中的重要地位,故先从Excel开始介绍,后续内容会陆续介绍Word、PowerPoint、Outlook、InfoPath等。由于VSTO 4.0建立在Office 2010基础之上,先介绍一下Office 2010的新特性,注意现在只是Beta版,正式版可能还会有功能上的调整。

示例代码下载

本系列所有示例代码均在 Visual Studio 2010 Beta 2 + Office 2010 Beta 下测试通过

 

一、Office 2010新特性

微软将于2010年6月份正式推出Office 2010。Office 2010带来了诸多程序改进,保持了Office 2007的XML文件格式,改进了Ribbon界面,并带来了基于浏览器的Excel、Word、OneNote、PowerPoint作为Office网络应用服务,并首次提供64位的Office。

  Office 2010打破了微软的传统,成为全球最知名的在线Office工具,Office 2010中的基于Web的功能是全新的,因此可能会出现问题。由于对微软全新的Office在线体验持有怀疑的态度,虽然有些公司计划购买Office 2010,但是同时也会使用免费的Google Docs和Zoho。

Office Word 2010

Office Word 2010 增强了 Navigation Pane 特性,用户可在 Navigation Pane 中快速切换至任何一章节的开头(根据标题样式判断),同时也可在输入框中进行即时搜索,包含关键词的章节标题会高亮显示。例如下图中的搜索 LiveSino.net:

Office Word 2010 也增加了在线实时协作功能,用户可以从 Office Word Web App 中启动 Word 2010 进行在线文档的编辑,并可在左下角看到同时编辑的其他用户(包括其他联系方式、IM 等信息,需要 Office Communicator)。而当其他用户修改了某处后,Word 2010 会提醒当前用户进行同步。(注:此功能也存在于部分其他 Office 2010 程序中)

另外,用户可在 Office Word 2010, Office PowerPoint 2010 以及 Office OneNote 2010 等 Office 2010 程序中直接插入其他正在运行的软件的截图。

Office Excel 2010

Office Excel 2010 新增了 Sparklines 特性,可根据用户选择的数据直接在单元格内画出折线图、柱状图等,并配有 Sparklines 设计面板供自定义样式。

Office PowerPoint 2010

Office PowerPoint 2010 除了新增更多幻灯片切换特效、图片处理特效之外,还增加了更多视频功能,用户可直接在 PowerPoint 2010 中设定(调节)开始和终止时间剪辑视频(见下图),也可将视频嵌入之 PowerPoint 文件中。

PowerPoint 2010 左侧的幻灯片面板也新增了分区特性,用户可将幻灯片分区归类,也可对整个区内的所有幻灯片进行操作。见下图中的 Default Section 和 LiveSino Section。

PowerPoint 2010 也增加了类似格式刷的工具 – Animation Painter,可将动画效果应用至其他对象,用法同格式刷。另外就是上次我提到的 Broadcast Slide Show 在线幻灯片播放功能

Office 2010 其他组件包括 OneNote 2010, Access 2010, InfoPath 2010, Publisher 2010 都包含了不少新特性,并且都已采用 Ribbon UI 但我不打算详细介绍。

Office Web Applications 2010

Office Web Applications 2010 包含 Word Web App, Excel Web App, PowerPoint Web App 以及 OneNote Web App,支持简单的编辑及实时协作功能,支持 IE, Firefox, 和 Safari。具体内容后文中介绍,另附清晰截图如下:

 

Office Mobile 2010

Office Mobile 2010 包含新版 Word Mobile, Excel Mobile, PowerPoint Mobile, OneNote Mobile 以及支持对话模式的 Outlook Mobile(见下图,来源:SuperSite)。

企业服务器端也可渲染 Office 文档供企业移动用户通过手机端查看 Office 文档,也支持黑莓iPhone

WZor.net 泄漏了 Microsoft Office 2010 Professional Plus 技术预览版(x86, x64),而 Ars Technica 在第一时间发布了全套 Office 2010 截图。尽管对比 1 个月前泄漏的 Outlook 2010 截图,界面并没有太大改动,但最近的 TechED 09 以及该泄漏版 Office 2010 中暗示了些 Office 2010 的新特性。

Windows 7 Jump Lists

在 TechEd 2009 上,微软演示了支持 Windows 7 Jump Lists 新特性的 Outlook 2010。当有未读邮件时。Outlook 任务栏图标右下角还包括新邮件的图标提示(如下图)。(via Techradar

Microsoft PowerPoint Live(Broadcast Slide Show)

PowerPoint 2010 支持将演示文档发布至 PowerPoint Live 或其他在线服务,以便其他用户可通过浏览器观看该演示文档,类似 Apple iWork.com。而 PowerPoint Live 很可能就是 Office Web Applications 中的一员。

JCXP 还给出了一些 PowerPoint 2010 以及 Word 2010 新特性的截图和简介,比如:PowerPoint 截图功能、新的 PowerPoint 过渡效果、PowerPoint 内录制幻灯演示。

另外,Office 2010 官方团队也已确认:Groove 已改名为 SharePoint Workspace,并且 OneNote 和 SharePoint Workspace 都将包括于 Pro Plus 版本中。

我已经安装了Office 2010 Professional Plus Beta X64:

如上文介绍的,InfoPath和Groove的命名发生了变化,其他不变。个人感觉Office 2010中最大的变化是对在线办公的支持,这是未来发展的趋势,个人表示看好。其他新功能我会陆续尝试,会发布在后续篇章,以VSTO 4.0来体验新特性。

 

二、Excel对象模型

对象模型是一组由Office应用程序提供的对象,用来控制Office应用程序,是VSTO开发的核心内容。其中Application是最顶层的对象,负责对Office进行整体的控制,类似于.Net WinForm和WPF中的Application对象,是根对象。Workbook(s)指工作簿,Worksheet(s)指工作表,Chart(s)指各种图表。Sheets对象比较特别,它包含Worksheet或Chart类型的对象,而Range表示希望操作的单元格范围。

 

三、主互调程序集(PIA)

用于与Office交互的托管程序集叫做Office主互调程序集(PIA)。

PIA = Primary Interop Assemblies

通常应用一种被称为COM Interop的.Net技术与Office对象模型进行交互,所有的Office对象都是用非托管代码(C、C++)编写的,并提供COM接口。为了在托管代码中与这些接口进行通信,必须使用封装器,通过封装器来实现托管代码与Office非托管COM接口之间的协同工作。该封装器是一系列的.Net类,他们被编译为PIA程序集。之所以PIA称之为"主",是因为开发人员可以开发自己的封装器IA(Interop Assemblies),除非有非常特殊的需求,否则不建议使用自己的IA,因为这不能够与其他的Office解决方案进行交互,而且有可能包含Office已经修复的bug。

安装相应的Office版本后就会安装PIA了,如果要开发VSTO 4.0,建议安装Office 2010 Professional Plus Beta。Office PIA被安装到GAC(GAC = Global Assembly Cache)中。

大部分VSTO项目会自动添加PIA,如果创建的是其他类型的项目(控制台、类库、WinForm、WPF等),则需要手动添加PIA。


说明


程序集名称


命名空间


Microsoft Office 14.0 Object Library


Office.dll


Microsoft.Office.Core


Microsoft Excel 14.0 Object Library


Microsoft.Office.Interop.Excel.dll


Microsoft.Office.Interop.Excel


Microsoft Word 14.0 Object Library


Microsoft.Office.Interop. Word.dll


Microsoft.Office.Interop. Word


Microsoft Outlook 14.0 Object Library


Microsoft.Office.Interop. Outlook.dll


Microsoft.Office.Interop. Outlook


Microsoft Graph 14.0 Object Library


Microsoft.Office.Interop. Graph.dll


Microsoft.Office.Interop. Graph


Microsoft.SmartTags 2.0 Type Library


Microsoft.Office.Interop.SmartTag.dll


Microsoft.Office.Interop.SmartTag

当PIA之间有依赖关系时,VS2010会自动添加必须的PIA。

 

四、Office解决方案

1、Office自动化程序(Office Automation Executable)

Office自动化程序是独立于Office的程序,用于控制和自动化处理某个Office应用程序。如控制台、类库、WinForm、WPF等。

2、Office加载项(Add-In)

Office加载项是某个程序集(dll)中的类,Office在需要时可加载和创建它,加载项可以直接在Office应用程序的进程中运行,而不需要在独立于Office应用程序的进程中运行,加载项在Office应用程序的整个生命周期中均保持加载状态。

3、Office文档代码(Code Behind on Office Document)

Office文档代码早在VBA时代就已经得到了广泛的应用,在VSTO中得到了进一步的增强。Office文档代码可以用某种方式对Office应用程序进行定制,如增加只在当前文档中才出现的菜单项,或者在文档打开时触发事件。

4、Office 模板(Office Template)

使用托管代码创建相应的Office模板。

5、服务器文档模式(Server Document)

VSTO可以在不打开Office应用程序的情况下,在服务器端运行程序并对存放在Office文档中的数据进行操作,如VSTO的缓存数据功能,SharePoint 2007/ 2010的Excel Services等。

6、OpenXML模式

以OpenXML的API操作Office文档中的数据,结合XSLT等转换为需要的文档格式。关于OpenXML的介绍请参阅我博客的另外一个系列:OpenXML学习笔记。

 

五、Office文档代码示例

由于本次主要学习Excel对象模型,顾采用Office文档代码模式做几个简单的练习,其余模式后续篇章会陆续介绍。

1、新建一个Excel 2010 Workbook项目:

 

默认添加的引用和项目文件:

 

2、在Sheet1中添加两个Button和一个Label控件:

 

3、添加事件处理代码:

 

代码

        private void btnPIA_Click(object sender, EventArgs e)
        {
            Excel.Workbook book = this.Application.Workbooks[1];
            Excel.Worksheet sheet = book.Worksheets[1];//C# 4.0新特性,PIA动态导入。
            this.labMsg.Text = "这是PIA调用结果,当前工作表名为: " + sheet.Name;
        }

        private void btn获取工作表_Click(object sender, EventArgs e)
        {
            this.labMsg.Text = string.Empty;
            Excel.Workbook book = this.Application.Workbooks[1];

            for (int i = 1; i <= book.Worksheets.Count; i++)
            {
                //C# 4.0新特性,PIA动态编译。
                this.labMsg.Text += book.Worksheets[i].Name + " ";
            }
        }

受益于C# 4.0的新特性,可以不用进行显示类型转换了,同时PIA将在运行时进行导入、编译,注意:VSTO中的索引大多数是从1开始,而不是从0.

 

4、F5运行,将会打开生成的Excel:

 

5、运行结果:

 

六、小结

本次首先叙述了Office 2010的新特性,学习了VSTO开发的基础知识,对PIA有了深刻的认识,介绍了不同的Office解决方案的区别。最后用 Excel文档代码做了一个简单的示例,利用C# 4.0的新特性,使得VSTO 4.0的开发更加便捷、高效。如果你还不熟悉C# 4.0,不妨先看看园子里的相关文章,若要调试本示例代码,需要安装VS2010 Beta2 + Office 2010 Beta。下一次将继续学习Excel的相关知识,我们将使用VSTO来编写一个Excel自定义公式,比较其与VBA的不同。

时间: 2024-11-02 10:51:25

VSTO学习笔记(二)Excel对象模型的相关文章

VSTO学习笔记(九)浅谈Excel内容比较

原文:VSTO学习笔记(九)浅谈Excel内容比较 说起文件内容比较,或许我们首先想到的是UltraCompare这类专业比较的软件,其功能非常强大,能够对基于文本的文件内容作出快速.准确的比较,有详细的差异报告,非常便于分析.其实,各种版本控制软件中也包含有或多或少的比较功能,如TFS.CVS.SVN等.但是如果待比较的文件不是基于文本类型的,那就无能为力了.今天我就来谈一谈Excel的比较方法及其特点,也和大家共同探讨一下,如果你有更好的方法,欢迎分享.   一.Excel的文件架构 Exc

VSTO 学习笔记(十二)自定义公式与Ribbon

原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel 2010中添加一个Ribbon,包含4个自定义公式:仅仅是示例公式加减乘除. 最终效果: 测试代码下载   1.解决方案包含两个项目: ExcelAddIn:Excel 插件 ExcelUDF:Excel 自定义公式 2.首先创建一个Excel 2010 Add-in项目: 3.添加一个可视化Ri

VSTO学习笔记(五)批量编辑Excel 2010 x64

原文:VSTO学习笔记(五)批量编辑Excel 2010 x64 近期因为工作的需要,经常要批量处理大量的Excel文件,如果纯手工一个个修改,非常的麻烦,于是写了这么一个帮助类,希望能对你有所帮助.里面很多方法可以进一步推广,增减适当的参数,部分方法用到了C# 4.0新特性,如果需要调试,请安装Visual Studio 2010. 示例代码下载 本系列所有示例代码均在 Visual Studio 2010 Ultimate RC + Office 2010 Professional Plus

VSTO学习笔记(七)基于WPF的Excel分析、转换小程序

原文:VSTO学习笔记(七)基于WPF的Excel分析.转换小程序 近期因为工作的需要,要批量处理Excel文件,于是写了一个小程序,来提升工作效率. 小程序的功能是对Excel进行一些分析.验证,然后进行转换.   概述 小程序主界面如下: 首先选择一个日期和类别,从命名上对待分析的Excel文件进行过滤.点击[浏览]选择待分析的Excel文件所在的目录, 程序中会获取所有子目录.然后点击[执行分析]就会按照左边CheckBox中的选择进行分析,分析结果显示在每一行中间.[修改配置]可以对分析

VSTO学习笔记(十四)Excel数据透视表与PowerPivot

原文:VSTO学习笔记(十四)Excel数据透视表与PowerPivot 近期公司内部在做一种通用查询报表,方便人力资源分析.统计数据.由于之前公司系统中有一个类似的查询使用Excel数据透视表完成的,故我也打算借鉴一下. 测试代码下载    原有系统是使用VBA编写的,难以维护,且对新的操作系统如Windows 7.64位架构不支持,我准备用VSTO进行重写. 数据透视表是一种交互式的表,可以进行某些计算,如求和与计数等.所进行的计算与数据跟数据透视表中的排列有关. 数据透视表是一种完全自助式

VSTO学习笔记(一)VSTO概述

原文:VSTO学习笔记(一)VSTO概述 接触VSTO纯属偶然,前段时间因为忙于一个项目,在客户端Excel中制作一个插件,从远程服务器端(SharePoint Excel Services)上下载Excel到本地打开,用户编辑后再上传回服务器端.当时工期紧迫,临时查了些资料,用VSTO + Excel COM API完成.正因为这个项目,我发现了VSTO的强大功能与潜力,决定抽出一些时间来好好研究下. 示例代码下载 本系列所有示例代码均在 Visual Studio 2010 Beta 2 +

VSTO学习笔记(三) 开发Office 2010 64位COM加载项

原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(Automation Executables) 2.Office加载项(COM or Excel Add-In) 3.Office文档代码或模板(Code Behind an Office Document or Template) 4.Office 智能标签(Smart Tags) 本次我们将学习使

VSTO 学习笔记(十三)谈谈VSTO项目的部署

原文:VSTO 学习笔记(十三)谈谈VSTO项目的部署 一般客户计算机专业水平不高,但是有一些Office水平相当了得,尤其对Excel的操作非常熟练.因此如果能将产品的一些功能集成在Office中,将会有很好的基础. 但是由于客户安装的Office版本不一,所以VSTO项目的部署问题显得尤为重要,需要考虑很多问题. 测试代码下载 本系列所有测试代码均在Visual Studio 2010 Ultimate SP1 + Office 2010 Professional Plus x64 SP1

VSTO 学习笔记(十)Office 2010 Ribbon开发

原文:VSTO 学习笔记(十)Office 2010 Ribbon开发 微软的Office系列办公套件从Office 2007开始首次引入了Ribbon导航菜单模式,其将一系列相关的功能集成在一个个Ribbon中,便于集中管理.操作.这种Ribbon是高度可定制的,用户可以将自己常用的功能进行单独设置,提高工作效率.但是由于Office 2003时代用户的操作习惯已经养成,结果到了Office 2007很多菜单.按钮都找不到了,着实有些尴尬.经过一段时间的适应,相信大多数用户已经习惯Ribbon