在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#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
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); } } } } } } } } |
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
Imports Spire.Doc Imports Spire.Doc.Documents Imports Spire.Doc.Fields Imports System.IO Namespace ExtractMediaFile Class Program Private Shared Sub Main(args As String ()) '加载Word文档 Dim doc As New Document() doc.LoadFromFile( "test.docx" ) '遍历所有子对象 For Each section As Section In doc.Sections For Each obj As DocumentObject In section.Body.ChildObjects If TypeOf obj Is Paragraph Then Dim paragraph As Paragraph = TryCast(obj, Paragraph) For Each obj2 As DocumentObject In paragraph.ChildObjects If obj2.DocumentObjectType = DocumentObjectType.OleObject Then Dim ole As DocOleObject = TryCast(obj2, DocOleObject) '提取文件 File.WriteAllBytes(ole.PackageFileName, ole.NativeData) End If Next End If Next Next End Sub End Class End Namespace |
文件读取结果如图:
到此这篇关于C#实现提取Word中插入的多媒体文件(视频,音频)的文章就介绍到这了,更多相关C#提取Word中多媒体文件内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://www.cnblogs.com/Yesi/p/15945014.html