概述
OLE,Object Linking and Embedding,即对象连接与嵌入。我们在设计程序时,OLE可以用来创建复合文档,把文字、声音、图像、表格、应用程序等类型的信息组合在一起,在Word中,我们可以通过OLE来实现以上要素信息的组合。下面的示例中将介绍如何通过C# 来操作Word中的OLE,示例内容包含以下要点:
- 插入OLE到Word
- 编辑Word中的OLE
- 读取Word中的OLE
使用工具
注:下载安装该类库,在编辑代码时,注意在程序中添加引用Spire.Doc.dll(dll文件可在安装路径下的Bin文件夹中获取)
示例代码(供参考)
【示例1】插入OLE到Word
步骤 1 :添加using指令
using Spire.Doc; Spire.Doc.Documents; Spire.Doc.Fields; using System.Drawing;
步骤 2 :创建文档
//实例化一个Document类对象 Document doc = new Document(); 向文档中添加一个Section对象,并添加段落 Section sec = doc.AddSection(); Paragraph p = sec.AddParagraph();
步骤 3 :加载图片
实例化一个DocPicture类对象,加载图片 DocPicture picture = DocPicture(doc); Image image = Image.FromFile(@"chart1.png"); picture.LoadImage(image);
步骤 4 :插入OLE
在文档中插入一个工作表,OleLinkType 枚举值控制该OLE是链接还是嵌入 DocOleObject obj = p.AppendOleObject(testfile.xlsx,picture,OleLinkType.Link); DocOleObject obj = p.AppendOleObject(@"testfile.xlsx",OleLinkType.Embed);
步骤 5 :保存文档
测试结果,如下图所示:
全部代码:
System.Drawing; namespace InsertOLE_Doc { class Program { static void Main(string[] args) { 实例化一个Document类对象 Document doc = Document(); 添加段落 Section sec = doc.AddSection(); Paragraph p = sec.AddParagraph(); 图片 DocPicture picture = DocPicture(doc); Image image = Image.FromFile(); picture.LoadImage(image); 枚举值控制该OLE是链接还是嵌入 DocOleObject obj = p.AppendOleObject(bed); 保存并打开文档 doc.SavetoFile(); System.Diagnostics.Process.Start(); } } }
【示例2】编辑Word中的OLE
步骤 1 :添加using指令
步骤 2 :加载文档
实例化一个Document对象,加载含有OLE的Word文档 Document doc = Document(); doc.LoadFromFile(test.docx");
步骤 3 :获取section中的所有OLE,根据需要来更改OLE的类型和链接对象
获取第一个Section Section sec = doc.Sections[0]; 遍历这个Section中的所有子元素,找到段落下的OLE对象 foreach (DocumentObject obj in sec.Body.Childobjects) { if (obj is Paragraph) { Paragraph par = obj as Paragraph; foreach (DocumentObject paraObj par.Childobjects) { 找到OLE对象,根据类型来进行更改操作 if (paraObj.DocumentObjectType == DocumentObjectType.OleObject) { DocOleObject Ole = paraObj DocOleObject; 如果是链接, 修改对象的链接路径 if (Ole.LinkType == OleLinkType.Link) { 同时还要手动去更改OLE的图片 DocPicture pic = Ole.OlePicture; pic.LoadImage(Image.FromFile(Img.png)); Ole.LinkPath = sample.docx; } 如果是嵌入,更改数据即可 byte[] bys = File.ReadAllBytes(); OleLinkType.Embed) { DocPicture pic = DocPicture(doc); pic.LoadImage(Image.FromFile()); Ole.ObjectType = Word.Document.12; Ole.SetolePicture(pic); Ole.SetNativeData(bys); } } } } }
步骤 4 :保存文档
调试运行程序后,生成文档。打开文档时,生成的文档中原有的插入OLE的图片和链接的文档都已经更改了,如下所示:
全部代码:
System.IO; EditOLE_Doc { Document(); doc.LoadFromFile(); 获取第一个Section Section sec = doc.Sections[]; 遍历这个Section中的所有子元素,找到段落下的OLE对象 sec.Body.Childobjects) { Paragraph) { Paragraph par = obj Paragraph; par.Childobjects) { 找到OLE对象,根据类型来进行更改操作 DocumentObjectType.OleObject) { DocOleObject Ole = paraObj DocOleObject; 如果是链接, 修改对象的链接路径 OleLinkType.Link) { 同时还要手动去更改OLE的图片 DocPicture pic = Ole.OlePicture; pic.LoadImage(Image.FromFile()); Ole.LinkPath = ; } 如果是嵌入,更改数据即可 ); OleLinkType.Embed) { DocPicture pic = DocPicture(doc); pic.LoadImage(Image.FromFile()); Ole.ObjectType = ; Ole.SetolePicture(pic); Ole.SetNativeData(bys); } } } } } 保存修改后的文档,并打开 doc.SavetoFile(stem.Diagnostics.Process.Start(); } } }
【示例3】读取Word中的OLE
步骤 1 :添加using指令
using System.IO;
步骤 2 :加载文件
步骤 3 :遍历section,读取OLE
遍历文档所有Section foreach (Section sec doc.Sections) { 遍历Section下面所有的子元素 sec.Body.Childobjects) { Paragraph) { Paragraph par = obj Paragraph; 遍历这个section下面的段落 foreach (DocumentObject o par.Childobjects) { 找到OLE对象,并根据类型提取 if (o.DocumentObjectType == DocumentObjectType.OleObject) { DocOleObject Ole = o DocOleObject; /*ObjectType属性可以获取ole对象的具体类型。 注意,如果是用Spire.Doc添加的ole对象的话,需要在AppendOleObject 的时候先声明OleObjectType,不然这里得不到具体的类型,只会得到Package*/ string s = Ole.ObjectType; "AcroExch.Document.11"是指PDF对象对应的ProgID if (s == AcroExch.Document.11) { File.WriteallBytes(Result.pdf"Excel.Sheet.12"是指 Excel03之后的工作表对应的ProgID else Excel.Sheet.12Result.xlsx"Word.Document.12"是指03之后的Word对应的ProgID Result.docx生成文档,如下:
全部代码:
以上是本次关于C# 操作word中的OLE的全部内容。示例方法供参考。
本文完。
如需转载,请注明出处!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。