在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);
}
}
}
}
} }
}
}

VB.NET

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# / VB.NET 在Word中嵌入多媒体(视频、音频)文件

—END—

最新文章

  1. 一个div相对于外层的div水平和垂直居中
  2. sql 查询服务器硬盘剩余空间
  3. Laravel 5 性能优化技巧
  4. vector3.forward和transform.forward的区别!
  5. [CareerCup] 16.6 Synchronized Method 同步方法
  6. 程序4-5 打开一个文件,然后unlink
  7. hdu 1520
  8. php里少用到的session_module_name,以及session的key值限制,简单将session存储为json格式数据的方法
  9. IOS game
  10. C++对象模型与内存位对齐的简单分析(GNU GCC&VS2015编译器)
  11. python使用smtplib库和smtp.qq.com邮件服务器发送邮件(转)
  12. 图片流量节省大杀器:基于腾讯云CDN的sharpP自适应图片技术实践
  13. python 管道 事件(Event) 信号量 进程池(map/同步/异步)回调函数
  14. MongoDB一键安装
  15. 键盘监听事件KeyListener
  16. [转]如何通过 App Store 审核(iOS 开发者经验分享)
  17. .net 学习笔记2
  18. View类的XML属性、相关方法及说明
  19. 下载最新android adt的方法
  20. 【PHP】 判断是否微信内置浏览器

热门文章

  1. 日K蜡烛图
  2. 【笔记】golang中使用protocol buffers的底层库直接解码二进制数据
  3. C++ 基本类型的大小
  4. synergy最佳解决方案——barrier
  5. 外观模式(Facade模式)
  6. gorm中的scope
  7. java-异常-异常注意事项
  8. [数据结构]伸展树(Splay)
  9. 面向次世代的Windows App SDK 近况
  10. ApacheCN Asp.NET 译文集 20211126 更新