在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—

C# 提取Word中插入的多媒体文件(视频、音频)的更多相关文章

  1. 怎样在Word中插入代码并保持代码原始样式不变

    怎样在Word中插入代码并保持样式不变 我们有时候需要在word中添加一段我们写的代码,但是把代码粘贴到word文档中之后就发现所有的代码的样子都变了,我们可以采用下边的方法来实现保持代码原来的样式和 ...

  2. 使用EndNote在Word中插入参考文献的格式设置

    endnote其实自带了很多参考文献格式的样式,如下图,但往往跟我们要使用的会有所出入,本文主要介绍的就是设置自定义endnote参考文献格式,以endnote X6和word2003为例,其它版本以 ...

  3. word中插入myth type公式行距变大的问题

    在写文章时,我遇到了在word中插入myth type公式时,行距明显变大的问题,我通过改变段落中的行距没有解决问题,在网上查了一下,找到一些解决方法,仅供参考. 解决办法

  4. 不用MathType, 如何在Mac Word中插入公式

    不用MathType, 如何在Mac Word中插入公式 找了好久都找不到MathType的破解版,不得不使用免费清爽的MarkDown编辑工具Typora_for_Mac. 我是很喜欢Typora的 ...

  5. 计算机_软件技巧_01_优雅地再word中插入代码

    二.参考资料 1.如何优雅的在 Microsoft word中插入代码

  6. Java 提取Word中的文本和图片

    本文将介绍通过Java来提取或读取Word文档中文本和图片的方法.这里提取文本和图片包括同时提取文档正文当中以及页眉.页脚中的的文本和图片. 使用工具:Free Spire.Doc for Java ...

  7. java向word中插入Excel附件

    1.word中插入对象的原理 编辑word,向word中插入图片.EXCEL.WORD等附件,再将word保存为xml格式,通过XML查看工具打开xml格式的word的源码,通过对比源码, 可以发现平 ...

  8. C# / VB.NET 在Word中嵌入多媒体(视频、音频)文件

    Word中可将Office(Word/Excel/PowerPoint).PDF.txt等文件作为OLE对象插入到文档中,双击该对象可直接访问或编辑该文件,除了以上常见的文件格式对象,也可以插入多媒体 ...

  9. Java 在Word中嵌入多媒体(视频、音频)文件

    Word中可将Office(Word/Excel/PowerPoint).PDF.txt等文件作为OLE对象插入到文档中,双击该对象可直接访问或编辑该文件,除了以上常见的文件格式对象,也可以插入多媒体 ...

随机推荐

  1. scanf报错问题

    VS2013 scanf()函数报错问题. 编译器就是说这个环境下用scanf()函数不安全,建议使用scanf_s()函数.如何要使用scanf()函数的话,就需要在头文件或者源文件开头加上:use ...

  2. 【记录一个问题】macos下lldb调试opencv的一个程序,出现“failed to load objfile for”错误,并且无法调试进入opencv的函数

    opencv编译使用了Debug版本,打开了BUILD_WITH_DEBUG_INFO=ON选项. 发现问题后,我又在CMAKE_CXX_FLAGS_DEBUG中设置为 -g -ggdb3,在CMAK ...

  3. Unable to open 'free_base.cpp': Unable to read file 'c:\Program Files\Microsoft VS Code\minkernel\crts\ucrt\src\appcrt\heap\free_base.cpp'

    问题 vscode编写C++程序,使用microsoft C++ Unable to open 'cvt.cpp': Unable to read file 'c:\Program Files\Mic ...

  4. 前端3D引擎-Cesium自定义动态材质

    本文代码基于Vue-cli4和使用WebGL的地图引擎Cesium,主要内容为三维场景下不同对象的动态材质构建. 参考了很多文章,链接附在文末. 为不同的几何对象添加动态材质 不知道这一小节的名称概况 ...

  5. 记一次org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only异常

    @Transactional(rollbackFor = Exception.class) @Overridepublic DubboResult<Boolean> productAddO ...

  6. 【简记】SpringBoot禁用Swagger

    楔子 Swagger 是 Java Web 开发中常用的接口文档生成类库,在开发和前后端联调时使用它来模拟接口调用能提高开发效率.但是,在生产环境可能并不需要它,一个原因是启用它会延长程序启动时间(动 ...

  7. BeanFactory 工厂模式

    /** * BeanFactory实现类 */ public class ClassPathXmlApplicationContext implements BeanFactory { private ...

  8. JVM学习四:深入分析ClassLoader

    一.什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程 ...

  9. cookie、session、jsession 关系

    感谢大佬:https://www.cnblogs.com/fsjin/articles/3490531.html 在使用CAS的时候,对Cookies.session.jsession 这三者是什么不 ...

  10. Java8 Stream 的一些操作和介绍

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11858186.html Java8 Stream 是一个新的东西, 就是能够将常见的数据结构转 ...