-
C# 操作Office(Word,Excel,PowerPoint...)技术
2011-3-9 0:30:12三大常用技术:VSTO,PIA,OpenXML
Office PIA是对Office所有API的托管封装,如果说PIA是全集的话,那VSTO只是一个子集.
对于VSTO不支持的功能,就要求助于PIA了.
OpenXML不需要你的电脑安装office;而PIA只是一个桥梁,还是需要安装office的.
一、主互调程序集(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。
一、Visual Studio的一个package(VSTO)
VSTO是Visual Studio的一个package。做过Visual Studio 扩展的人可能知道,Visual Studio可以通过三种方式进行功能的扩展开发:Macro, Add-In, Package。而整个Visual Studio可以看作由所有具有不同功能的Package组合而成的,这些Packages就是Winform, SmartDevice, Web Development等等。而VSTO是他们之中的一员,它支持用托管代码来进行Office的扩展开发。
在过去,人们通常使用VBA来进行Office的扩展开发。VBA是一个很简单的开发环境,集成在很多Office的产品中。每个Office的产品,如Word,Excel,Outlook,都通过COM暴露了非常丰富的对象模型,供程序员编程。我们就是用VBA和这些Office的COM对象模型对Office进行扩展开发的。最常见的是增加一些自定义的按钮,还有自定义响应一些事件。但是VBA有很多不足之处。首先,它只面对VB脚本语言,并且开发环境显得简单,不够强大。最致命的是,VBA把代码分别嵌入到每个文档中去,这导致万一出现bug,或者项目需要升级时,就很难处理。需要对于每个文档进行修改,这种低效率在企业级应用中是无法容忍的。VBA的另一个问题:安全保护做得很薄弱,很多人可以利用宏制造病毒。
Microsoft想用Visual Studio .NET和.NET Framework来解决这些问题,所以VSTO应运而生。官方文档上描述的是,目前发布了的VSTO有两个版本VSTO 2005和VSTO 2005 SE。前者提供了6种项目模板: Word Document,Word Template,Excel Document,Excel Template,Outlook Add In,InfoPath Form Template。这里所有的模板都只是针对于Office 2003而言的。除了Outlook Add In之外,所有模板用来开发文档级应用。VSTO 2005 SE(Second Edition), 提供了11种模板,全部都是Add In:包括Word, Excel, Outlook, PowerPoint, Visio的2003和2007 Add In 10个,再加一个InfoPath 2007的Add In. 所谓的Add In, 就是常说的插件,或者叫程序级应用。事实上,VSTO 2005是VSTO的第二个版本,第一个版本是VSTO 2003, 集成在Visual Studio .NET之中,它是微软第一次尝试将.NET托管代码与Office对象模型整合到一块儿。它是我们现在看到的VSTO 2005的一个框架,VSTO 2005比它多了很多功能,如ActionsPane, DataCache, SmartTag等等。
三、OpenXML
随着20世纪90年代XML的出现,企业计算客户开始逐渐认识到,在他们所依赖的计算机产品和应用中采用开放的格式和标准所带来的商业价值。IT专业人员将从通用的数据格式中受益匪浅,这种格式可能是XML,因为它拥有被应用程序、平台和Internet浏览器读取的能力。
同样,随着在 Microsoft Office 2000中对于XML格式的支持与采用,开发人员开始认识到,他们需要将以前的Microsoft Office版本中的二进制文件格式转换为XML格式。二进制文件(.doc,.dot,.xls,以及.ppt文件)在过去几年中一直肩负着存储和转换数据的重任,而现在它们无法满足新的市场需求的挑战,其中包括轻松地在异构应用之间传递数据,以及允许用户从这些数据中搜集商业信息。
2007 Microsoft Office system为Microsoft Office Excel 2007,Microsoft Office Word 2007,和Microsoft Office PowerPoint 2007采用了基于XML的文件格式,从而延续了这种转移。新的文件格式,称为Office Open XML格式,解决了上述市场需求的问题,同时改变了您基于Microsoft Office文档建立解决方案的方式。
新的格式增强了文件与数据的管理能力,数据恢复能力,以及与业务线系统的互操作能力。它们是对早期版本的二进制文件的扩展。任何支持XML的应用程序都可以访问新文件格式当中的数据,并与之协同工作。这些应用程序并不需要成为Microsoft Office system或Microsoft产品的一部分。用户也可以使用标准的转换来提取或重新组织数据。另外,有关安全性的担忧也大大的降低,因为信息是存储在 XML当中的,它从本质上来讲都是纯文本的。因此,数据可以没有任何障碍地通过企业防火墙进行传递。
注意:
不要将Office Open XML格式与Microsoft Windows XML Paper Specification格式相混淆。Office Open XML格式使用Open Packaging Conventions,XML Paper Specification (XPS)也使用它。但是,这两种格式在许多重要的方面是不同的。XPS是一个页面内的,固定的文档格式,它是在 Microsoft Windows Vista操作系统当中所引入的。而Office Open XML格式是面向Office Word 2007,Office Excel 2007,和Office PowerPoint 2007的完全可编辑的文件格式。虽然它们在XML和ZIP压缩的使用方面有很多相似的地方,但是它们在文件格式的设计和使用目的上还是有着很大的不同。
