在Word中可将文件通過OLE對象嵌入的方式插入到文檔,包括Word、excel、PDF、PPT、圖片、宏文件、文件包等在内的多種文件類型。對文檔中已插入的文檔對象,也可通過本文中的方法提取出來另存到指定路徑。本文将通過C#程序代碼示例做詳細介紹。
dll文件安裝(3種方法)1.通過NuGet安裝dll(2種方法)
1.1可以在Visual Studio中打開“解決方案資源管理器”,鼠标右鍵點擊“引用”,“管理NuGet包”,然後搜索“Free Spire.Doc”,點擊“安裝”。等待程序安裝完成。
1.2将以下内容複制到PM控制台安裝。
Install-Package FreeSpire.Doc -Version 9.9.7
2.手動添加dll引用
可通過手動下載包到本地,然後解壓,找到BIN文件夾下的Spire.Doc.dll。然後在Visual Studio中打開“解決方案資源管理器”,鼠标右鍵點擊“引用”,“添加引用”,将本地路徑BIN文件夾下的dll文件添加引用至程序。
提取文件提取文件時,主要通過以下幾個步驟完成:
- 創建Document類的對象,并通過Document.LoadFromFile()方法加載Word文檔。
- 遍曆Word文檔中的所有Section中的子對象,判斷對象是否為Paragraph類型。
- 遍曆段落中的子對象,判斷對象是否為DocumentObjectType類型的OLE對象。
- 将符合條件的OLE對象通過as操作符轉換為DocOleObject類型。
- 通過File.WriteAllBytes()方法提取對象,保存到本地路徑。
注:以下代碼中所使用到的Word測試文件和提取到的多媒體文件路徑為VS程序的Debug路徑,如:F:\VS2017Project\ ExtractMediaFile\bin\Debug 。
下面是完整代碼示例:
C#
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.IO;
namespace ExtractMediaFile
{
class Program
{
static void Main(string[] args)
{
//加載Word文檔
Document doc = new Document();
doc.LoadFromFile(@"OLE.docx");
//遍曆所有子對象
foreach (Section section in doc.Sections)
{
foreach (DocumentObject obj in section.Body.ChildObjects)
{
if (obj is Paragraph)
{
Paragraph paragraph = obj as Paragraph;
foreach (DocumentObject obj2 in paragraph.ChildObjects)
{
if (obj2.DocumentObjectType == DocumentObjectType.OleObject)
{
DocOleObject ole = obj2 as DocOleObject;
//提取文件
File.WriteAllBytes(ole.PackageFileName, ole.NativeData);
}
}
}
}
}
}
}
}
文件讀取結果如圖:
,