Open Xml SDK 引文
什么是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 引文的更多相关文章
- Open Xml SDK Word模板开发最佳实践(Best Practice)
1.概述 由于前面的引文已经对Open Xml SDK做了一个简要的介绍. 这次来点实际的——Word模板操作. 从本质上来讲,本文的操作都是基于模板替换思想的,即,我们通过替换Word模板中指定元素 ...
- 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 ...
- Csharp: create word file using Open XML SDK 2.5
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Csharp: read excel file using Open XML SDK 2.5
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 下载和编译 Open XML SDK
我们需要一些工具来开始 Open XML 的开发. 开发工具 推荐的开发工具是 Visual Studio 社区版. 开发工具:Visual Studio Community 2013 下载地址:ht ...
- Open XML SDK 在线编程黑客松
2015年2月10日-3月20日,开源社 成员 微软开放技术,GitCafe,极客学院联合举办" Open XML SDK 在线编程黑客松 ",为专注于开发提高生产力的应用及服务的 ...
- 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 ...
- 【转】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 ...
- 使用OPEN XML SDK 读取EXCEL中的超链接Hyperlink
使用OPEN XML SDK 读取EXCEL中的超链接Hyperlink 原理 先创建一个包括全部EXCEL单元格中超链接Hyperlink数据的表,再定位单元格通过列头(如A1,B1)获取超链接信息 ...
随机推荐
- cocos基础教程(13)使用Physicals代替Box2D和chipmunk
1. 概述 游戏中模拟真实的世界是个比较麻烦的事情,通常这种事情都是交给物理引擎来做.首屈一指的是Box2D了,它几乎能模拟所有的物理效果.而chipmunk则是个更轻量的引擎,能够满足简单的物理 ...
- XSS的DOS攻击之 server limit dos
墨西哥同学周末很郁闷的在宾馆上网,发现youtube被ban了,于是写个了tool解决这个问题.顺带想到了一种利用 google 统计的漏洞,写在这里了 http://sirdarckcat.blog ...
- 我们为之奋斗过的C#-----Bank系统
首先感谢大家抽出宝贵的时间来看这个Bank系统,这是我最近学的Bank系统,你们看我刚一学完就给你们分享了我的所学以及学习的一些经验,所以大家一定要耐心看下去,真的你会有所收获的,不信你看看.下面话不 ...
- HDU 1029 Ignatius and the Princess IV
解题报告: 题目大意:就是要求输入的N个数里面出现的次数最多的数是哪一个,水题.暴力可过,定义一个一位数组,先用memset函数初始化,然后每次输入一个数就将下标对应的上标对应的那个数加一,最后将整个 ...
- L17 怎么向应用程序商店提交应用
原地址:https://developer.apple.com/library/ios/#referencelibrary/GettingStarted/RoadMapiOS/ApplicationD ...
- UIView中UIButton设置监听
红色框框是一个uibutton _priceValueLabel是他的父视图, 必须要把button的父视图设置userInteractionEnabled = YES, button的 监听才会生效 ...
- 【Python】使用 boto 调用 S3 对象存储API
代码示例: import logging #from django.conf import settings import boto from boto.s3.key import Key impor ...
- SQL Server游标的使用
转: http://www.cnblogs.com/moss_tan_jun/archive/2011/11/26/2263988.html 游标是邪恶的! 在关系数据库中,我们对于查询的思考是面向集 ...
- [MySQL] - MySQL的Grant命令
本文实例,运行于 MySQL 5.0 及以上版本. MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删 ...
- oracle、mysql、sybase和sqlserver复制表结构和数据
Sql Server(sybase): 1.复制表结构: 新建表student2,并且结构同表syn_xj_student一致.Sql语句如下: 2.复制表数据,并排除俩表中相同的数据: insert ...