OLE,Object Linking and Embedding,即对象链接与嵌入。咱们在设计程序时,OLE能够用来建立复合文档,把文字、声音、图像、表格、应用程序等类型的信息组合在一块儿,在Word中,咱们能够经过OLE来实现以上要素信息的组合。下面的示例中将介绍如何经过C# 来操做Word中的OLE,示例内容包含如下要点:html
注:下载安装该类库,在编辑代码时,注意在程序中添加引用Spire.Doc.dll(dll文件可在安装路径下的Bin文件夹中获取)ide
步骤 1 :添加using指令工具
using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using System.Drawing;
步骤 2 :建立文档测试
//实例化一个Document类对象 Document doc = new Document(); //向文档中添加一个Section对象,并添加段落 Section sec = doc.AddSection(); Paragraph p = sec.AddParagraph();
步骤 3 :加载图片spa
//实例化一个DocPicture类对象,加载图片 DocPicture picture = new 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", picture, OleLinkType.Embed);
步骤 5 :保存文档调试
//保存并打开文档 doc.SaveToFile("添加OLE.docx"); System.Diagnostics.Process.Start("添加OLE.docx");
完成代码后,调试运行程序,生成文档。code
测试结果,以下图所示:orm
所有代码:htm
using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using System.Drawing; namespace InsertOLE_Doc { class Program { static void Main(string[] args) { //实例化一个Document类对象 Document doc = new Document(); //向文档中添加一个Section对象,并添加段落 Section sec = doc.AddSection(); Paragraph p = sec.AddParagraph(); //实例化一个DocPicture类对象,加载图片 DocPicture picture = new DocPicture(doc); Image image = Image.FromFile(@"chart1.png"); picture.LoadImage(image); //在文档中插入一个工做表, OleLinkType 枚举值控制该OLE是连接仍是嵌入 DocOleObject obj = p.AppendOleObject(@"testfile.xlsx", picture, OleLinkType.Link); //DocOleObject obj = p.AppendOleObject(@"testfile.xlsx", picture, OleLinkType.Embed); //保存并打开文档 doc.SaveToFile("添加OLE.docx"); System.Diagnostics.Process.Start("添加OLE.docx"); } } }
(这里以上文中生成的文档为测试文件)
步骤 1 :添加using指令
using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using System.Drawing; using System.IO;
步骤 2 :加载文档
//实例化一个Document对象,加载含有OLE的Word文档 Document doc = new 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 in par.ChildObjects) { //找到OLE对象,根据类型来进行更改操做 if (paraObj.DocumentObjectType == DocumentObjectType.OleObject) { DocOleObject Ole = paraObj as 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(@"sample.docx"); if (Ole.LinkType == OleLinkType.Embed) { DocPicture pic = new DocPicture(doc); pic.LoadImage(Image.FromFile(@"Img.png")); Ole.ObjectType = "Word.Document.12"; Ole.SetOlePicture(pic); Ole.SetNativeData(bys); } } } } }
步骤 4 :保存文档
//保存修改后的文档,并打开 doc.SaveToFile("修改OLE.docx", Spire.Doc.FileFormat.Docx2010); System.Diagnostics.Process.Start("修改OLE.docx");
调试运行程序后,生成文档。打开文档时,生成的文档中原有的插入OLE的图片和连接的文档都已经更改了,以下所示:
所有代码:
using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using System.Drawing; using System.IO; namespace EditOLE_Doc { class Program { static void Main(string[] args) { //实例化一个Document对象,加载含有OLE的Word文档 Document doc = new Document(); doc.LoadFromFile("test.docx"); //获取第一个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 in par.ChildObjects) { //找到OLE对象,根据类型来进行更改操做 if (paraObj.DocumentObjectType == DocumentObjectType.OleObject) { DocOleObject Ole = paraObj as 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(@"sample.docx"); if (Ole.LinkType == OleLinkType.Embed) { DocPicture pic = new DocPicture(doc); pic.LoadImage(Image.FromFile(@"Img.png")); Ole.ObjectType = "Word.Document.12"; Ole.SetOlePicture(pic); Ole.SetNativeData(bys); } } } } } //保存修改后的文档,并打开 doc.SaveToFile("修改OLE.docx", Spire.Doc.FileFormat.Docx2010); System.Diagnostics.Process.Start("修改OLE.docx"); } } }
步骤 1 :添加using指令
using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using System.IO;
步骤 2 :加载文件
//实例化一个Document对象,加载一个有OLE对象的文档 Document doc = new Document(); doc.LoadFromFile(@"test.docx");
步骤 3 :遍历section,读取OLE
//遍历文档全部Section foreach (Section sec in doc.Sections) { //遍历Section下面全部的子元素 foreach (DocumentObject obj in sec.Body.ChildObjects) { if (obj is Paragraph) { Paragraph par = obj as Paragraph; //遍历这个section下面的段落 foreach (DocumentObject o in par.ChildObjects) { //找到OLE对象,并根据类型提取 if (o.DocumentObjectType == DocumentObjectType.OleObject) { DocOleObject Ole = o as 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", Ole.NativeData); } //"Excel.Sheet.12"是指 Excel03以后的工做表对应的ProgID else if (s == "Excel.Sheet.12") { File.WriteAllBytes("Result.xlsx", Ole.NativeData); } //"Word.Document.12"是指03以后的Word对应的ProgID else if (s == "Word.Document.12") { File.WriteAllBytes("Result.docx", Ole.NativeData); } } } } } }
调试运行程序,生成文档,以下:
所有代码:
using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using System.IO; namespace ReadOLE_Doc { class Program { static void Main(string[] args) { //实例化一个Document对象,加载一个有OLE对象的文档 Document doc = new Document(); doc.LoadFromFile(@"test.docx"); //遍历文档全部Section foreach (Section sec in doc.Sections) { //遍历Section下面全部的子元素 foreach (DocumentObject obj in sec.Body.ChildObjects) { if (obj is Paragraph) { Paragraph par = obj as Paragraph; //遍历这个section下面的段落 foreach (DocumentObject o in par.ChildObjects) { //找到OLE对象,并根据类型提取 if (o.DocumentObjectType == DocumentObjectType.OleObject) { DocOleObject Ole = o as 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", Ole.NativeData); } //"Excel.Sheet.12"是指 Excel03以后的工做表对应的ProgID else if (s == "Excel.Sheet.12") { File.WriteAllBytes("Result.xlsx", Ole.NativeData); } //"Word.Document.12"是指03以后的Word对应的ProgID else if (s == "Word.Document.12") { File.WriteAllBytes("Result.docx", Ole.NativeData); } } } } } } } } }
以上是本次关于C# 操做word中的OLE的所有内容。示例方法供参考。
本文完。
如需转载,请注明出处!