C#实现提取Word中插入的多媒体文件(视频,音频)

 更新时间:2022年02月28日 14:17:22   作者:E-iceblue  
在Word中可将文件通过OLE对象嵌入的方式插入到文档,包括Word、excel、PDF、PPT、图片、宏文件、文件包等在内的多种文件类型。本文将利用C#实现提取插入在Word文件中的这些多媒体文件,感兴趣的可以了解一下

在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#实现提取Word中插入的多媒体文件(视频,音频)的文章就介绍到这了,更多相关C#提取Word中多媒体文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C# Process.Start()系统找不到指定文件的问题分析及解决

    C# Process.Start()系统找不到指定文件的问题分析及解决

    文章内容:文章描述了由于系统找不到可启动的exe文件,路径出现问题导致无法启动应用程序的情况,作者通过修改应用程序的启动路径,将路径中的“\\”改为“\”,从而解决了路径问题,使应用程序能够正常启动
    2025-11-11
  • C#实现格式化文本并导入到Excel

    C#实现格式化文本并导入到Excel

    这篇文章主要为大家详细介绍了如何使用C#实现格式化文本并导入到Excel,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-05-05
  • unity实现文字滚动效果

    unity实现文字滚动效果

    这篇文章主要为大家详细介绍了unity实现文字滚动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02
  • 那些年,我还在学习C# 学习笔记

    那些年,我还在学习C# 学习笔记

    那些年学了ASP.NET后,才开始学习C#,说来也怪,怎么学了ASP.NET才来学习C#,其实没有什么的
    2012-03-03
  • .Net多进程通信共享内存映射文件Memory Mapped

    .Net多进程通信共享内存映射文件Memory Mapped

    这篇文章主要介绍了.Net多进程通信共享内存映射文件Memory Mapped的使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • unity3d调用手机或电脑摄像头

    unity3d调用手机或电脑摄像头

    这个是在网上看到的,经测试可以在电脑上运行,确实调用了本地摄像头。有需要的小伙伴可以参考下。
    2015-03-03
  • C#将国产Linux视频录制生成mp4的具体实现

    C#将国产Linux视频录制生成mp4的具体实现

    这篇文章主要介绍了C#将国产Linux视频录制生成mp4的具体实现,文中通过代码示例介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-08-08
  • C#引用类型转换的常见方式总结

    C#引用类型转换的常见方式总结

    这篇文章主要介绍了C#引用类型转换的常见方式,包括子类转换成父类,父类转换成子类,以及不是子父级关系类之间的转换,需要的朋友可以参考下
    2014-09-09
  • C# SESSION丢失问题的解决办法

    C# SESSION丢失问题的解决办法

    这篇文章主要为大家详细介绍了C# SESSION丢失问题的解决办法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • C#面向对象设计原则之接口隔离原则

    C#面向对象设计原则之接口隔离原则

    这篇文章介绍了C#面向对象设计原则之接口隔离原则,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03

最新评论