您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 子文本替换 >

如何操作 Office Open XML 格式文档(转)

发布时间:2019-08-07 03:39 来源:未知 编辑:admin

  摘要: Office Open XML格式文件代替了早期的二进制Office系统文件。本文档向您介绍了包含在一个格式化文档中的组件以及展示这些文件功能的一些场景 。

  Office Open XML格式是基于XML和ZIP归档技术创建的。和早期Microsoft Office版本类似,2007的文档保存在一个单一的文件或者容器中,所以管理这些文档的过程仍然是简单的。但是,与早期文件不同的是Office Open XML格式的文件能够被打开显示器中的组件,使得您能够访问此文件的结构。

  在本文中,您可以手动的打开文件并且浏览组成此文档那个的每一个部件来查看Office Open XML格式文件。另外您也可以对此文档进行编程。在本文中适用到的文件可以通过下载获得,2007OfficeManipulatingOpenXMLFilesSample.exe.如果您不能够下载,您可以使用自己的程序文件和图像文件进行替代。

  此部分中,您将检测一个包含文本,图像和属性的示例Word 2007文档的XML文件格式。

  然后,点击插入标签,点击图片,找到一个图片文件 (例如包含在下载中的Eagle1.gif文件),然后点击插入。

  在批注框中,输入This is my comment。此时您的文档类似于图1。

  使用下面的三个步骤来抽取Office Open XML格式文件。根据您使用的操作系统不同(Windows XP或Windows Vista),第5步有所不同。

  右 键点击此文件,指向打开方式,然后点击Internet Explorer。每一个Office Open XML格式文档的根下都有一个 [Content_Types].xml 组件。 [Content_Types].xml组件的作用就是确定文档中每个唯一类型组件。每个组件需要在这个组件中列出它自己的类型。组件需要有可以识别的类 型,以便应用程序知道当渲染此文档时如何使用这个组件。类型也能够使您了解到组件的作用以及如何使用。

  关 联代表着两个组件之间的连接。关联是存储在_rels子文件夹中的组件。任何组件都有相关联的组件,包含在同结构的_rels文件夹中,此文件夹包含了一 个定义它们关系的.rels组件。子文件夹创建在与组件相同的文件夹下。一个关联的名称通过在原始组件的文件名后加上.rels扩展名获得 (用于文档文件的关联组件是一个例外;它的名称为.rels)。

  在Windows资源管理器中,双击_rels 文件夹,然后右键点击.rels 文件。

  指向打开方式,点击选择程序,点击Internet Explorer,然后点击确定。

  2007版本中的文档属性在三个Microsoft Office System程序中是始终保持结构化的。分成三个逻辑XML组件,它们被存储自docProps子文件夹下。这使得用户可以很容易的进行访问,因为他们它们在相同的位置并且不会和其它的文档内容混淆。

  打开 core.xml 组件,然后观察显示的您之前输入的属性。 core.xml组件持有用户输入的用来标识文档的属性,例如标题,主题和作者。

  custom.xml 组件包含了被用户,开发人员或者通过自定义逻辑添加到文档任何自定义文档属性。

  app.xml 组件包括在应用程序级别指定到文档的唯一属性,例如文章的页数,文本行的数量,应用程序的版本等等。

  大部分的内容组件都驻留在word子文件夹下面。另外,在里面也有一个_rels关联子文件夹。

  在_rels 子文件夹中,用于连接所有文档组件的关联名称为document.xml.rels。

  关联使用IDs和Uniform Resource Identifiers (URIs)来定位组件。它允许在没有任何硬编码引用的前提下所有非关联的组件是无效的。在后面的章节中将会详细讨论。

  在Office Open XML格式文件中这些组件的使用使得文档能够以高度模块化的方式存储。一些组件对文档来说是必须有效的,例如document.xml组件和fontTable.xml组件。

  如果组件描述的功能在文档中使用不到的话,这些组件就不是必需的。示例中包括了备注,页眉组件和页脚组件,这些组件对Word文档来说是可选的。这就使得用户能够轻松的通过文档结构进行操纵,而不需要研究没有使用的内容。

  XML 设计用于结构化的内容,并不会本地支持二进制的内容,例如图像或者OLE对象。二进制数据能够被编码到字符并且以XML形式进行存储,但是它需要一个编码 和解码的过程,这就使得对于应用程序或者开发人员来说效率低下。在2007发布之后,此时就不在需要编码二进制对象因为他们能够作为二进制组件以他们自身 的格式进行存储。因此在Office文档中访问二进制对象变得非常容易。媒体文件存储在media文件夹中。

  您 可能注意到图像的文件名称已经从Eagle1.gif更改为image1.gif了。更改的目的是为了解决隐私考虑,因为一个恶意用户可以从文档中的组件 名称中获得关于此组件的一些内容,例如一个图像文件。例如,一个作者可能通过加密文档中的文本部件来保护文档内容。但是,如果两个图像 old_widget.gif and new_reenforced_widget.gif 被插入。即使文本被保护起来了,恶意用户也能够知道widget已经被更新了。使用像image1和image2这样的通用图像文件可以在Office Open XML格式文件中添加额外的保护。

  Office Open XML格式拥有很多的优势。其中一个优势就是具有可以在没有Office程序的情况下使用由Office 2007系统创建的文档的能力。这就使得您能够创建基于服务器的解决方案,用于在可伸缩的环境下集合,访问和编辑文档。

  在下面的步骤中,您将手动的编辑一个Word 2007文档。请注意这些场景只是这个新的文件格式的一个很小的示例。在大部分的场景中,用户不会以这种方式手动编辑文档。但是对于开发人员,在不需要编 写代码的情况下浏览由Office 2007创建的文档将带来很大的好处,尤其是当设计解决方案或者编写程序模型的时候。如您之前看到的,在访问此文档的容器文件后,您能够轻松的浏览独立的 组件。这也就意味这您能够编辑,替换甚至添加组件。通常情况下,您可以修改文档的备注,更新文档属性。

  点击Microsoft Office按钮,指向准备,然后点击属性。注意作者,标题,主题和备注框体,然后关闭文档。

  Word 2007文档中的备注存储在名称为comments.xml的组件中。这种文档主体的分离使您能够轻松的定位和修改组件。

  右键点击comments.xml 组件,指向打开方式,然后选择文本编辑器或者XML编辑器打开,例如记事本。

  下一步,您可以更改文档属性,然后确认更改的结果。文档属性存储在压缩文件根目录下面的子文件夹中,使得他们能够轻松的访问和编辑。

  替换或者编辑dc:Creator 元素的文本。例如,使用您自己的名字替换里面的文本。

  通过点击回退箭头或者工具栏中的up图标导航到文档容器直到您定位到.zip文件。

  在以前的步骤中,您通过在文档中编辑XML组件的方式修改了文档。利用新的文件格式,您也可以替换整个文档组件来更改内容,格式或者属性。这就使得您使用存在的文档组件来更新单个的文档或者更新整个文档库。

  使用存在的组件来修改文档的一个例子就是更改文档使用的样式。如果您需要管理多个文档的样式,但是希望保留一个物理的版本,这种方式将很有用。更改文档使用的所有类型就是替换styles.xml组件。

  此场景使您能够为所有的文档编译样式组件集合,然后创建一个应用程序,使得用户能够自动的选择不同的样式。在后台,您的应用程序能够用一个预制的组件代替另外一个。在下面的步骤中,您将手动的执行此操作。

  在开始页面,点击更改样式,指向样式集,然后点击独特。此文档看上去类似于图2。

  双击word 文件夹,然后将styles.xml 组件拖拽到Windows桌面。此组件将被用于更新您创建的第一个文档。

  点击工具栏中的回退箭头或者Up图标导航到文档容器,直到定位到.zip文件。

  双击打开word 文件夹,然后将styles.xml 从Windows桌面拖拽到word 文件夹,替换原来的文件。

  通过点击工具栏中的回退箭头或者Up图标导航到SampleWordDocument.docx 文件的文档容器,直到定位到.zip文件。

  此样式场景的另外一个样子就是使用页眉页脚文档组件从一个Word 2007文档中快速的复制相同的设置到一个或者多个Word 2007文档中。页眉页脚组件能够被手动的更改,您将在后面的内容中了解到。当然,这个过程也能够使用代码进行自动化。这对于那些希望使用标准文档页眉和 页脚,并且不需要在每个基本文档中付出管理任务的组织来说非常有用。另外,如果您的页眉页脚格式更改后,替换页眉页脚是非常容易的。

  在插入标签中,点击页眉按钮的下拉键头,然后选择字母表型页眉。页眉将被添加到文档的标题中。此文档看上去类似于图3。

  在插入标签中,点击页眉按钮的下拉键头,选择年刊型页眉。页眉将被添加到文档的标题中,并且带有年份。此文档那个看上去类似于图4。

  通过点击工具栏中的回退箭头或者Up图标导航到文档容器,直到定位到.zip文件。

  通过点击工具栏中的回退箭头或者Up图标导航到文档容器,直到定位到.zip文件

  文档中也能够包含二进制组件-例如图像文件或者Microsoft VBA项目,您可以将其作为XML组件那样轻松的访问。更换二进制组件会带来一些有趣的事情。例如您可以更换二进制组件来替换整个的OLE对象,如 Microsoft Office Visio图像。手动的操作没有价值,您需要考虑一个使得图像能够自动从服务器更新的场景。编写一个工具来完成这样的操作相对来说是简单的人物。在下面的 步骤中,您将使用一个图像来交换AnotherSampleWordDocument.docx 文档中的图像二进制文件。

  双击Word文件夹,然后双击media文件夹来定位到Eagle1.gif图像。

  在下载文件中定位到Eagle2.gif 图像,然后将其复制到Windows桌面。(或者您可以替换您自己的图像文件)

  在Windows桌面上,右键点击Eagle2.gif 图像,然后点击预览。这是您将使用替换当前图像的图像文件。

  关闭预览窗口,右键点击Eagle2.gif,然后点击重命名,将其名称更改为Eagle1.gif。

  通过点击工具栏中的回退箭头或者Up按钮导航到文档容器,直到定位到.zip文件。

  将名称中的.zip扩展名移出掉,然后在Word 2007中打开文件。注意图像已经被更新了。

  在下面的步骤中,您将创建一个简单的macro-enabled 文档并且展示它的功能。然后,您将从文档中删除vbaProject.bin组件及其关系并且查看其效果。注意您也可以通过点击文件菜单中的另存为,或者 通过保存文件为macro-free文件(.docx, .pptx, or .xlsx)来移出macro-enabled文件中的项目组件。但是,这需要您在2007 Office系统程序中打开此文档。使用下面过程中的步骤可以使您在不使用Office程序的前提下移出项目。

  如果您无法找到开发工具标签,您需要添加它。点击Microsoft Office 按钮,然后点击Word选项,然后在常用标签中,选择在功能区显示开发工具选项卡。

  点击确定关闭消息窗口,然后关闭Visual Basic 编辑器。下一步,作为macro-enabled文档保存。

  键点击document.xml.rels,点击打开方式,然后选择一个文本编辑器,例如Notepad。

  这个文件可能是只读的。如果是只读的话,关闭文件,右键点击文件名称,点击属性。然后清除只读属性复选框。然后重新打开文件。

  右键点击vbaProject.bin 项目,然后点击删除。当提示消息时,点击确定来删除。

  当提示确认文件替换消息时(在Windows Vista中为复制和替换警告消息),点击确定。

  通过点击工具栏中的回退箭头或者Up按钮导航到文档容器中,直到定位到.zip文件。

  右键点击SampleWordDocument.docm 文件夹,然后点击删除来删除它。当提示时,点击确定。

  您可以将文件扩展名从.docm更改成.docx来获得相似的结果。带有macro-free 扩展名的文件从来不会执行代码。

  Office Open XML格式的一个重要意义在于它对于自定义解决方案的无限潜能。您可以使用任何平台的能够处理XML或者ZIP文件的工具来访问并且修改文档内容。例如, 您可以在Microsoft Visual Studio中利用托管代码编写一个服务器端的应用程序来省城2007 Office系统文档。您可以使用Framework的强大XML类库来编辑Office Open XML格式文件中包含的任何XML文档组件。

  在下面的步骤中,您将开发一个控制台应用程序在不使用Word 2007的前提下更改格式样式。这个项目通过利用从一个Word 2007文档中提取出来的样式组件来替换此文档中的样式组件来完成。结果就是目标文档采用了与提取样式那个文档相同的样式。

  首先,创建一个文件夹和子文件夹来宿主您将更新的文档和styles.xml 组件。在这个练习中,命名文件夹为WordOpenXMLFormatSample。在文件夹中,添加一个名称为NewStylePart的子文件夹。

  在word文件夹中导航到styles.xml 组件,右键点击它,然后点击复制。

  在新建项目对话框中,从左边的项目类型树视图中,点击其它语言,选择Visual C#,然后从模板列表视图中选择控制台应用程序。

  在选项对话框中,点击项目和解决方案树型视图,然后点击常规标签。 在此,您可以指定项目和模板存储的位置,或者设置其它选项。

  当您创建新的项目后,Visual Studio自动的创建新的程序,并带有三个容器:属性,引用和Program.cs。您可以在解决方案资源管理器中查看这三个容器。Visual Studio同时也创建了用于添加大部分代码的空类。

  下一步,您将从您的项目中添加一个引用到.NET Framework 3.0:

  选择WindowsBase.dll 文件,然后点击确定。通过点击解决方案资源管理器中的引用来验证引用已经被创建。

  在解决方案资源管理器中,右键点击Program.cs,然后选择查看代码。

  要使用2007 Office系统文档的内容,您需要打开它。System.IO.Packaging有一个称为Package的顶级成员,它相当于文档。在您代开 Package项目后,您将检查它的结构,操作它的组件。Packages能够作为只读,只写或者读/写形式打开。

  以@符号开始的字符串被称为逐字字符串字面变量(verbatim string literals)。这就告诉程序使用获取文件时出现的那些确定的字符串。

  当运行项目时,Main 过程将自动的执行。在Main的开阔号({ )和闭括号(})之间,输入以下行:

  下面步骤中,您将添加代码到SwapStylePart 程序中,此程序用于打开作为Package对象并且拥有读/写访问权限出现的文档。注意using 语句的使用。它的目的是自动的处理Package 对象并且在语句完成之后清空使用的内存。

  为了能够使用2007 Office系统文档的任何组件,您首先需要定位它。您可以使用URL来引用一个特定的文档组件,URL是对每个组件唯一的路径。

  在编写此文章的那个时刻,System.IO.Packaging名称空间还不允许您复制或者替换一个已 经存在的组件。为了交换组件,您必须首先删除已经存在的组件,然后使用相同的URL创建一个新的组件。注意删除组件不会影响任何组件的关系。任何关系都完 好无损并且仍然应用到一个新的组件。

  在package中添加一个新的文档组件需要使用一个URL。在这种情况下,您仅仅需要重新使用相同的 URL来重新创建样式文档组件。当创建一个package时需要一个额外的参数:组件的内容类型。当前在文档中使用的内容类型可以在位于文档容器中的 [Content_Types].xml组件中发现。

  利用新创建的样式组件,最后一步就是从原始的styles.xml组件中的XML复制到新创建的组件中。 System.IO.Packaging名称空间不会在一个XML文档中本地的处理XML,所以在.NET Framework中复制内容的方式就是通过使用Streams。

  在下面的步骤中,您将添加代码,这些代码以流的形式打开外部样式组件,并且将其写入到新的样式文档组件中。为了复制流,您将调用CopyStream程序,并且在源和目的流中传输。

  如果在生成的时候发生错误,您将看到一个对话框问您是否希望运行上次的生成。点击否,您将看到错误列表中的错误描述。如果您没有看到错误列表,在视图菜单中,点击错误列表。

  假设没有错误发生, 您现在运行代码。但是首先,您可能想要查看当前的文档:

  按F5. 您将看到Windows控制台出现,很快您就会看到它消失了。因为这是一个控制台应用程序,它没有用户界面,只是很简单的出现。

  从文件名中移出.zip 扩展名,然后在Word 2007中重新打开它。注意文档的样式已经更改为独特样式。

  下面一个练习阐述在没有Word 2007情况下您如何使用自定义的应用程序来在Office Open XML格式文件中执行批量操作。在这个练习中,您将创建一个托管程序,这个程序搜索满足特定标准的文件夹和子文件夹,从而找到正确的文件。应用程序为了术 语和包含数据文件的出现来检测文档组件。您可以想象使用这个程序来确定包含特定客户名称的文档,或者是包含特定产品名称的文档。您也可以在应用程序中添加 额外的逻辑,使用其他的术语来替换现有的,本质上就是在不使用应用程序的地情况下复制Word 2007中的查找-替换特性。

  在新建项目对话框中,从左边的项目类型树型视图中,选择Visual C#.然后选择Windows 应用程序,更改项目的名称为KeywordSearch,然后点击确定。Visual Studio 创建了项目中所有的文件。

  在 Form1.cs [Design] 标签中, 将下面的控件添加到窗体中,然后设置它们的属性,以至于窗体类似于图5。

  在 btnSearch_Click 过程的两个括号之间,添加下面的代码:

  在 这个代码中,声明了Boolean 变量用于显示是否搜索发现了任何匹配的内容。下一步,如果文本框是空的,代码将提示用户输入搜索的关键字。在窗体中的其它文本框都有默认值。下一步,定义 一个List 类来包含从搜索中返回的文件。List 类提供了一个数组,在此数组中可以动态的提升大小。变量 dirs 指向了搜索开始的目录。然后指向GetDirsFiles 过程的调用将在目录中返回文件列表。接下来代码将循环查询返回的文件集,调用GetDocPart 过程来为搜索关键字检测每一个文件。如果没有匹配的选项,一个消息将被添加到列表框中。

  这 个程序设置selectedItem 变量等于显示在combo框中的搜索样式。下一步,在当前的目录中调用 GetFiles 方法来返回所有符合搜索样式的文件。返回的文件被添加到文件列表中。如果一个用户选择了Include Subfolders 复选框,每个当前目录的子目录通过递归行式调用GetDirFiles 程序(带有每个子文件夹名称的)而被搜索到。最后文件列表就被返回到调用(btnSearch_Click) 程序中。

  此 程序初始时分别设置变量值为文档关系类型中的名称空间和文档属性的架构。接着文档作为Package 对象被打开。在System.IO.Packaging 名称空间中,您可以通过组件之间的关系(定义在关系组件中),通过包含组件结构路径的URL来访问package中各种各样的组件。 用于图像组件的一个URL示例就是 wordmediapicture.jpg. 如果您知道到2007 Office系统文档中特定文档组件的URL,您可以直接的访问,编辑或者删除组件。在GetDocPart 程序中,通过调用Package 对象中的GetPart 方法,然后传输到组件URL中从而返回document.xml 组件。

  下一步, XmlDocument 对象指向了一个XML文件,此文件包含一个或多个到不同名称空间的引用。和所有的XML文件一样,XML解析器通过带有名称空间前缀的名字来访问文档中大量的元素和属性。

  这 些名称空间的限定符在运行时必须被解析到它们名称空间的引用。为了使此任务轻松并且一致,.NET Framework 包含了提供大量名称空间管理工具的XmlNamespaceManager。其中一个就是NameTable 类。NameTable 类在内部存储了属性和元素名称。当一个元素或者属性名称在一个XML文档中出现多次时,它只在NameTable 中存储一次。当一个名称空间限定符发生冲突时,它能够使用NameTable 中的字符串进行解析。

  在下一个 语句中,创建了一个XmlDocument 对象,并且利用文档组件中的内容进行填充。下一步,为了搜索,对象的内容被扫描。注意C# IndexOf 方法与Visual Basic InStr 方法相同。如果找到搜索关键字,目录和文件名被添加到窗体中的列表框中,程序返回True。否则就是找不到匹配选项,程序返回False。

  最后,在Form1 Designer中,双击关闭按钮然后在程序中添加下面的语句:

  在磁盘C或者是您选择的任何位置上,创建一个名为WordDocuments 的文件夹。

  这就是您需要搜索文档的所有代码,此种情况不需要使用Word 2007。您需要添加一些小功能:计算搜索文档的个数 ,添加替换功能,或者搜索其它组件。

  在这篇文章中,您熟悉了Office Open XML格式文件的结构。您浏览了文件格式,同时演示了如何使用标准的XML和ZIP技术轻松的访问和编辑2007 Microsoft Office文档。您也学习到了如何手动和编写程序的方式操作Office Open XML 格式文件。通过这些内容,您具备了为组织创建自定义应用程序的基础

http://fyijournal.com/ziwenbentihuan/420.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有