什么是Open Xml SDK?

什么是Open Xml?

首先,我们得知道,Open Xml为何物?

我们还是给她起个名字——就叫 “开放Xml”,以方便我们中文的阅读习惯。之所以起开放这个名字,因为以前有接触过Open Authorization,可以称为开放授权,比如OpenID之类的。

“Open XML标准的简单介绍:Ecma Office Open XML(“Open XML”)是针对字处理文档、演示文稿和电子表格的国际化开放标准,可免费供多个应用程序在多个平台上实现。Microsoft Office(2007、2003、XP、2000)、OpenOffice Novell Edition、开源项目 Gnumeric、Neo-Office 2.1 和 PalmOS (Dataviz) 已经支持 Open XML。Corel 已经宣布在 WordPerfect 2007 中提供 Open XML 支持,全球的开发人员正在使用 OpenXML 构建解决方案。

Open XML 的标准化工作是由 Ecma International 通过其技术委员会 45 (TC45) 执行的,来自 Apple、Barclays Capital、BP、The British Library、Essilor、Intel、Microsoft、NextPage、Novell、Statoil、Toshiba 和 United States Library of Congress 的代表参与了该项工作。该标准旨在提供现有 ISO 标准所无法提供的独特好处,其中包括能够实现从现有二进制格式向基于 XML 的格式的高保真移植。”

什么是Open Xml SDK?

顺理成章,Open XML SDK特指微软Office的开放XML,且提供了一套操作的SDK组件。

故而,我们的关注点也就停留在微软的Word,PPT,Excel这三个产品上。

这样,我们就可以做很多事情了,如:查找替换,创建图形,分析数据,移动幻灯片等等,你能够想得到的Office操作,都可以用Code给表达出来,就看你有多大Power。

怎样获得?

这是个必备的内容。

首先,作为一个文档的完整性需要,是必备的;

其次,我想卖弄一下我知道的资源获取方式;

所以,我还是厚着脸皮地使之流水账:

1)MSDN下载;http://www.microsoft.com/en-us/download/details.aspx?id=5124

2)我的百度云盘:http://pan.baidu.com/s/1c0iYgxU 密码:r8yl;

3)Nuget:Install-Package DocumentFormat.OpenXml;

4)VS:工具——>扩展和更新,选择联机——>输入openxml,即可安装。

怎样装配开发环境?

只需引入如下程序集即可:

1)DocumentFormat.OpenXml

2)WindowsBase

怎样理解SDK?

数据结构

之所以起用“数据结构”这四个字,表明将要突出的是重点。

SDK是用来操作XML的,且XML是用树形结构组织。”(是否想到了DOM树,Jquery的查询化API,.NET中XML命名空间,Linq To XML,组合模式。。。。。。)

1)首先,由于WORD,PPT,EXCEL都可以表示为XML文件,或者XML Package,所以,我们必须熟悉XML标记语言(ML)的语法,如元素,属性,文本,根等。

代码角度:联系你自己编程语言中的,操作XML的API。

2)其次,XML是树形的,那么据此推测SDK中,要么提供能够操作XML API,要么调用一般的XML API。SDK选择了前者。

SDK 揭秘

基于SDK本质上就是对树的访问的理由,我们有必要关注几个特殊的类:

OpenXmlElement

摘要:Represents a base class that all elements in an Office Open XML document derive from.

它的作用即为所有元素的一种抽象,如果去掉了Open,就变成了XmlElement,熟悉Xml的你,是否会想起什么?

其提供了大量的关于XML的API,将XML内联化:

InnerText,InnerXml,HasChildren,LastChild,Ancestors,Elements<T>,ElementsAfter,RemoveChild<T>等等。

OpenXmlCompositeElement

摘要:Represents the base class for composite elements.

同样地,提供了大量的操作XML的API:

public override T AppendChild<T>(T newChild);

public override T InsertAfter<T>(T newChild, OpenXmlElement refChild);

public override T InsertAt<T>(T newChild, int index);

public override T InsertBefore<T>(T newChild, OpenXmlElement refChild);

public override T PrependChild<T>(T newChild);

public override void RemoveAllChildren();

public override T RemoveChild<T>(T oldChild);

public override T ReplaceChild<T>(OpenXmlElement newChild, T oldChild);

WordprocessingML中的很多元素皆从其派生,如:

Paragraph

Table

Run

OpenXmlLeafElement与OpenXmlLeafTextElement

OpenXmlLeafElement摘要:Represents the base class from which leaf elements are derived.

OpenXmlLeafTextElement摘要:Represents the base class from which leaf elements that have text are derived.

其中,带文本的叶子元素从叶子元素派生。如:WordprocessingML中的Text

怎样使用SDK?

到这里,我不想继续枚举SDK内部的类与摘要,那是很枯燥的事情。

因为OpenXmlElement,OpenXmlCompositeElement,OpenXmlLeafElement与OpenXmlLeafTextElement,已足够覆盖其面貌。

Eg:使用的代码片段:查找某个表格,并按照格式插入一行。

[Test]
public void Usage_Test()
{
using (WordprocessingDocument wordprocessingDocument =
WordprocessingDocument.Open(@"F:\数据报告模板.docx", true))
{
// Assign a reference to the existing document body.
Body body = wordprocessingDocument.MainDocumentPart.Document.Body; var table = body.Elements<Table>().ElementAt(); //查找某表
var row = table.Elements<TableRow>().ElementAt().Clone() as TableRow; //复制某行
var cells = row.Elements<TableCell>(); //所有Cell
List<string> list = new List<string>() { "pz", "", "dn", "" };
//假设为四列表格
for (int ii = ; ii < ; ii++)
{
var cell = cells.ElementAt(ii); Paragraph tmpPa = cell.Elements<Paragraph>().FirstOrDefault();
var tmpRun = tmpPa.Elements<DocumentFormat.OpenXml.Wordprocessing.Run>().FirstOrDefault();
var tmpText = tmpRun.Elements<DocumentFormat.OpenXml.Wordprocessing.Text>().FirstOrDefault();
Console.WriteLine(tmpText.Text);
tmpText.Text = list[ii]; //Update
} var lastRow = table.Elements<TableRow>().Last();
table.InsertAfter<TableRow>(row, lastRow);
}
}

参考文献

SDK MSDN教程(Official,首选。请注意左侧的三个子菜单:”入门”、”了解Open XML格式”、”如何实现…”):http://msdn.microsoft.com/zh-cn/library/bb448854(v=office.14).aspx

http://msdn.microsoft.com/zh-cn/library/gg278308(v=office.14).aspx

http://msdn.microsoft.com/zh-cn/library/cc850837(v=office.14).aspx

OPEN XML 百度百科 简介:

http://baike.baidu.com/view/1201978.htm

博客相关文章(待你去考证):

http://www.cnblogs.com/weu135/archive/2013/03/31/2991565.html

http://www.cnblogs.com/xuanhun/archive/2011/05/31/2065024.html

http://blog.csdn.net/francislaw/article/details/7568317

Open Xml SDK 引文的更多相关文章

  1. Open Xml SDK Word模板开发最佳实践(Best Practice)

    1.概述 由于前面的引文已经对Open Xml SDK做了一个简要的介绍. 这次来点实际的——Word模板操作. 从本质上来讲,本文的操作都是基于模板替换思想的,即,我们通过替换Word模板中指定元素 ...

  2. User Word Automation Services and Open XML SDK to generate word files in SharePoint2010

    SharePoint 2010 has established a new service called "Word Automation Services" to operate ...

  3. Csharp: create word file using Open XML SDK 2.5

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. Csharp: read excel file using Open XML SDK 2.5

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. 下载和编译 Open XML SDK

    我们需要一些工具来开始 Open XML 的开发. 开发工具 推荐的开发工具是 Visual Studio 社区版. 开发工具:Visual Studio Community 2013 下载地址:ht ...

  6. Open XML SDK 在线编程黑客松

    2015年2月10日-3月20日,开源社 成员 微软开放技术,GitCafe,极客学院联合举办" Open XML SDK 在线编程黑客松 ",为专注于开发提高生产力的应用及服务的 ...

  7. Embedding Documents in Word 2007 by Using the Open XML SDK 2.0 for Microsoft Office

    Download the sample code This visual how-to article presents a solution that creates a Word 2007 doc ...

  8. 【转】Open XML SDK class structure

    Open XML SDK class structure March 27, 2012 by Vincent I’ve gotten a few questions on the class stru ...

  9. 使用OPEN XML SDK 读取EXCEL中的超链接Hyperlink

    使用OPEN XML SDK 读取EXCEL中的超链接Hyperlink 原理 先创建一个包括全部EXCEL单元格中超链接Hyperlink数据的表,再定位单元格通过列头(如A1,B1)获取超链接信息 ...

随机推荐

  1. E. Tetrahedron(数学推导)

    E. Tetrahedron 分类: AC路漫漫2013-08-08 16:07 465人阅读 评论(0) 收藏 举报 time limit per test 2 seconds memory lim ...

  2. UItableView 编辑

    - (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:( ...

  3. mac安装django1.5.4

    http://www.iwangzheng.com/ 1.下载安装程序 打开终端输入以下命令 $ wget http://www.djangoproject.com/m/releases/1.5/Dj ...

  4. OpenGL顶点缓冲区对象(VBO)

    转载 http://blog.csdn.net/dreamcs/article/details/7702701 创建VBO        GL_ARB_vertex_buffer_object 扩展可 ...

  5. sqlmap参数大全

    -u #注入点-f #指纹判别数据库类型-b #获取数据库版本信息-p #指定可测试的参数(?page=1&id=2 -p “page,id”)-D “”#指定数据库名-T “”#指定表名-C ...

  6. Coursera台大机器学习课程笔记8 -- Linear Regression

    之前一直在讲机器为什么能够学习,从这节课开始讲一些基本的机器学习算法,也就是机器如何学习. 这节课讲的是线性回归,从使Ein最小化出发来,介绍了 Hat Matrix,要理解其中的几何意义.最后对比了 ...

  7. FZU 1649 Prime number or not米勒拉宾大素数判定方法。

    C - Prime number or not Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & % ...

  8. apache一个IP多个站点的配置方法

    在日常的网站发布中很多情况下都无法做到一个IP对应一个站点,在IP4的情况下IP的资源是相对有限的.然而作为最流行的Apache自然也考虑到这种情况,那么接下来看看apache服务器怎么配置一个IP多 ...

  9. php 字符串负值判断

    2014年9月9日 11:54:54 $a = '-1'; $b = (int)$a; $c = is_numeric($a); if ($a) { echo 1; //echo 1 } else { ...

  10. Linux系统排查3——I/O篇

    当磁盘无法写入的时候,一般有以下可能: 文件系统只读 磁盘已满 I节点使用完 一. 遇到只读的文件系统 文件系统自动设置成只读可能是系统自我保护的一种机制,因此需要实现弄清究竟是什么原因造成了文件系统 ...