C#实现提取Word中插入的多媒体文件(视频,音频)
作者:E-iceblue 发布时间:2022-09-06 14:45:20
在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
文件读取结果如图:
来源:https://www.cnblogs.com/Yesi/p/15945014.html


猜你喜欢
- 本文实例讲述了Android编程实现WebView全屏播放的方法。分享给大家供大家参考,具体如下:最近因为项目要用webview加载html
- 1、思维导图2、什么是MVC?MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(con
- 调取钉钉考勤接口的功能公司需要做一个钉钉考勤的页面,让我去写这个功能。结果却比我想象的要麻烦一些!具体是怎么个麻烦呢下面直入正题首先我们找到
- 问题:在项目中,当保存数据超过数据库字段列长度限制时,如何解决?一种常见的解决办法是:截串存取。顾名思义,就是对大文本数据按指定长度进行截取
- PostMapping接收json参数后返回404问题描述js中传递json数据给后端,后端可以正常接收参数,但返回404。js
- 目录Directory:创建文件夹删除文件夹获取文件夹下的子文件夹获取同类型的文件判断文件夹是否存在移动文件夹总结之前发过File对文件的操
- 前言最近在工作中需要编译android下的动态库,本以为是一件简单的事,没想到因为工具,以及google本身被墙的原因,折腾了好久。在win
- SSM Mapper查询出返回数据查不到个别字段原因开启了驼峰命名法则,Bean里的字段不识别_注释掉或者把实体类里的字段_去掉换位大写SS
- C#2.0引入了泛型这个特性,由于泛型的引入,在一定程度上极大的增强了C#的生命力,可以完成C#1.0时需要编写复杂代码才可以完成的一些功能
- 定义最短路问题的定义为:下图左侧是一幅带权有向图,以顶点 0 为起点到各个顶点的最短路径形成的最短路径树如下图右侧所示:带权有向图的实现在实
- 堆排序是一种树形选择排序方法,它的特点是:在排序的过程中,将array[0,...,n-1]看成是一颗完全二叉树的顺序存储结构,利用完全二叉
- java 出现Zipexception 异常的解决办法1 异常描述在从 SVN 检出项目并配置完成后,启动 Tomcat 服务器,报出如下错
- java中synchronized(同步代码块和同步方法)详解及区别问题的由来:看到这样一个面试题://下列两个方法有什么区别p
- 首先javascript只有这些个类型:1、Number 在JavaScript中的双精度浮点格式 2、String 双引号的反斜杠转义的U
- 在Android串口通信:基本知识梳理的基础上,我结合我项目中使用串口的实例,进行总结;Android使用jni直接进行串口设备的读写网上已
- 实例如下:public String stripHtml(String content) { // <p>段落替换为换行 con
- 本文实例为大家分享了android自定义imageview实现圆角图片的具体代码,供大家参考,具体内容如下自定义图片的属性,对图片进行圆角切
- spring boot 秉承约定优于配置,spring boot在静态资源的处理上就已经默认做了处理。1.默认资源映射映射”/**”的路径到
- 本文实现的功能有:1、 初始化游戏窗口2、初始化游戏的界面3、初始化游戏的说明面板4、随机生成下落方块5、方块下落速度变化6、判断方块是否可
- java类的方法,我特别喜欢《java编程思想》里面的描述,这本书说java类之间的相互通信是通过消息。比如顾客类的对象调用一个eat方法,