从Word文档中提取嵌入对象
有时候我们可能需要向word文档中插入一些文档如PDF、Excel等,相反地,有时候我们也会需要从word文档中提取嵌入的对象。这篇文章将讲述如何使用C#及一个免费Word组件-FreeSpire.Doc 从一个word文档中提取嵌入的对象。
为了展示,我创建了一个word文档并向其中插入了一个PDF文档及一个Excel文档,如下图:
接下来,我将嵌入在以上Word文档中的PDF文档和Excel文档提取出来。
代码使用:
步骤1:初始化一个Document对象并加载word文档。
Document doc = new Document();
doc.LoadFromFile("OleObject.docx");
步骤2:遍历该word文档,找到嵌入的对象,获取每个嵌入对象的文件类型,判断它是否为PDF或Excel文档,若是PDF文档,则将该嵌入对象的数据写入到一个新的PDF文档。若是Excel文档,则将其数据写入到一个新的Excel文档。
//traverse through all sections of theword document
foreach (Section sec in doc.Sections)
{
//traverse through all Child Objects in the body of each section
foreach (DocumentObject obj insec.Body.ChildObjects)
{
if (obj is Paragraph)
{
Paragraph par = obj as Paragraph;
//traverse through all Child Objects in Paragraph
foreach (DocumentObject o inpar.ChildObjects)
{
//Find theOle Objects and Extract
if(o.DocumentObjectType == DocumentObjectType.OleObject)
{
DocOleObject Ole = o as DocOleObject;
string s = Ole.ObjectType;
//If s == "AcroExch.Document.11",means it’s a PDFdocument
if (s == "AcroExch.Document.11")
{
File.WriteAllBytes("Result.pdf",Ole.NativeData);
}
//Ifs ==" Excel.Sheet.12",means it’s anExcel workbook
else if(s == "Excel.Sheet.12")
{
File.WriteAllBytes("Result.xlsx",Ole.NativeData);
}
}
}
}
}
}
运行代码,得到如下PDF及Excel结果文档:
完整代码如下:
using System.IO;
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
namespace Extract_OLEObjects_from_Word
{
class Program
{
static void Main(string[] args)
{
Document doc = newDocument();
doc.LoadFromFile("OleObject.docx");
foreach (Sectionsec in doc.Sections)
{
foreach (DocumentObjectobj in sec.Body.ChildObjects)
{
if (obj isParagraph)
{
Paragraph par = obj as Paragraph;
foreach (DocumentObject o in par.ChildObjects)
{
if (o.DocumentObjectType == DocumentObjectType.OleObject)
{
DocOleObject Ole = o asDocOleObject;
string s = Ole.ObjectType;
if (s == "AcroExch.Document.11")
{
File.WriteAllBytes("Result.pdf",Ole.NativeData);
}
else if (s == "Excel.Sheet.12")
{
File.WriteAllBytes("Result.xlsx",Ole.NativeData);
}
}
}
}
}
}
}
}
}