Word控件Spire.Doc 【其他】教程(6):从 Word 中提取 OLE 对象

news2024/12/19 23:05:16

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转换和打印Word/PDF/Excel等格式文件处理,小巧便捷。 

E-iceblue 功能类库Spire 系列文档处理组件均由中国本土团队研发,不依赖第三方软件,不受其他国家的技术或法律法规限制,同时适配国产操作系统如中科方德、中标麒麟等,兼容国产文档处理软件 WPS(如 .wps/.et/.dps 等格式

Spire.Doc for.NET 最新下载(qun:767755948)icon-default.png?t=N4P3https://www.evget.com/product/3368/download

有时,我们需要提取嵌入在 word 文档中的 OLE 对象。使用 Spire.Doc,我们只需几行代码即可轻松完成此任务。本文介绍如何使用 Spire.Doc 和 C# 从 word 文档中提取嵌入的 PDF 文档和 Excel 工作簿。

下面是word文档的截图:

详细步骤:

第一步:实例化一个Document对象,加载word文档。

Document doc = new Document();
doc.LoadFromFile("OleObject.docx");

第二步:遍历word文档,找到Ole Objects,然后获取每个Ole Object的Object类型,判断Ole Object是PDF文档还是Excel工作簿,将Ole对象的原生数据写入新的PDF文档或Excel 工作簿。

下面是运行代码后提取的PDF文件和Excel工作簿的截图:

//Traverse through all sections of the word document
foreach (Section sec in doc.Sections)
{
//Traverse through all Child Objects in the body of each section
foreach (DocumentObject obj in sec.Body.ChildObjects)
{
if (obj is Paragraph)
{
Paragraph par = obj as Paragraph;
//Traverse through all Child Objects in Paragraph
foreach (DocumentObject o in par.ChildObjects)
{
//Find the Ole Objects and Extract
if (o.DocumentObjectType == DocumentObjectType.OleObject)
{
DocOleObject Ole = o as DocOleObject;
string s = Ole.ObjectType;
//If s == "AcroExch.Document.11", means it’s a PDF document
if (s == "AcroExch.Document.11")
{
File.WriteAllBytes("Result.pdf", Ole.NativeData);
}
//If s == " Excel.Sheet.12", means it’s an Excel workbook
else if (s == "Excel.Sheet.12")
{
File.WriteAllBytes("Result.xlsx", Ole.NativeData);
}
}
}
}
}
}

完整代码

using System.IO;
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;

namespace Extract_OLEObjects_from_Word
{
class Program
{
static void Main(string[] args)
{
Document doc = new Document();
doc.LoadFromFile("OleObject.docx");

foreach (Section sec in doc.Sections)
{
foreach (DocumentObject obj in sec.Body.ChildObjects)
{
if (obj is Paragraph)
{
Paragraph par = obj as Paragraph;
foreach (DocumentObject o in par.ChildObjects)
{
if (o.DocumentObjectType == DocumentObjectType.OleObject)
{
DocOleObject Ole = o as DocOleObject;
string s = Ole.ObjectType;
if (s == "AcroExch.Document.11")
{
File.WriteAllBytes("Result.pdf", Ole.NativeData);
}
else if (s == "Excel.Sheet.12")
{
File.WriteAllBytes("Result.xlsx", Ole.NativeData);
}
}
}
}
}
}
}
}
}

以上便是在 Word 中插入上标和下标,如果您有其他问题也可以继续浏览本系列文章,获取相关教程,你还可以给我留言或者加入我们的官方技术交流群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/612427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python后退命令:如何让你的程序退回到之前的状态

Python后退命令:如何让你的程序退回到之前的状态 Python是一种高级编程语言,因其易读易懂而闻名于世。Python中有很多命令用于编写程序,其中一项重要的命令是后退命令。本文将介绍Python后退命令的使用方法,并为您提供详细的步骤…

ChatGPT热度不减!华为宣布入局,盘古GPT能否大杀四方!

ChatGPT热度不减 六月份了,朋友们,来到六月份了已经,ChatGPT的热度依旧不减,各大论坛网站的榜单上还飘着ChatGPT相关话题的文章,且排名靠前。由此可见,这ChatGPT这股子热潮还得持续一段时间呢。 而且ChatG…

cuda block grid等介绍

这里写目录标题 cuda层次结构程序架构层次结构cuda程序调用cuda 内置变量GPU内存模型内存结构 可编程内存内存作用域寄存器本地内存共享内存共享内存访问冲突常量内存全局内存gpu缓存 cuda层次结构 程序架构 申请内存时是线性的内存,需要知道是按行还是按列排列 设计…

【Linux】Linux内核编译与入门

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Linux内核编译。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习知识,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路&am…

DM数据库TEXT类型字段查询返回时的问题

一、问题描述: 在项目中使用到了DM数据库连接,查询某些数据,然后以Map形式返回时TEXT类型是会出现一些问题,默认会转换为dm.jdbc.driver.DmdbNClob类型的对象,某些情况下(不知道具体原因)在JSON…

移动端布局之flex布局1:flex布局体验、flex布局原理、flex布局父项常见属性

移动端布局之flex布局1 flex布局体验传统布局和flex弹性布局的区别初体验index.html flex布局原理布局原理 flex布局父项常见属性常见父项属性flex-direction设置主轴的方向(重要)主轴与侧轴属性值flex-direction: row;flex-direction: row-reverse;flex…

笔试强训9

作者:爱塔居 专栏:笔试强训 文章简介:简单记录学习的细碎~ day15 一. 单选 1.给出数据表 score(stu-id,name,math,english,Chinese), 下列语句正确的是( ) A Select sum(math),avg(chinese) from score B Select *,s…

麒麟V10防火墙,VNC,YUM源, nfs ,磁盘格式化

麒麟V10防火墙,VNC,YUM源, nfs ,磁盘格式化 麒麟V10开启防火墙并设置开机自启 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁…

2023年Q1电商平台饮料行业数据分析报告

我国的饮料市场非常庞大,从碳酸饮料到茶饮料,从功能性饮料到水,各个品类都有广泛的消费者基础。加之如今饮料消费场景不断延伸,家庭囤货、户外即饮、运动健身等成为消费者饮料需求的新场景,新需求带动线上饮料市场持续…

Numpy---创建多维数组、创建正态分布、创建均匀分布

1. 创建一个随机整数的多维数组 np.random.randint(low, highNone, sizeNone, dtypel) 参数说明: low : 最小值 highNone: 最大值 highNone时,生成的数值在【0, low)区间内 如果使用high这个值,则生成的数值在【low, high)区…

Nginx服务——主配置文件-nginx.conf

一、全局配置的6个模块简介 模块说明全局块全局配置,对全局生效events块配置影响 Nginx 服务器与用户的网络连接http块配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置server块配置虚拟主机的相关参数,一个 http 块中可…

SSD源码总结

一、生成默认框 默认框的宽高 默认框的宽高是相对于原图的尺寸计算出来的。 默认框的中心 默认框的中心是相对于特征图的尺寸计算出来的。 二、将真实框分配给默认框 1、区分正负样本 1.1、选取正样本 计算真实框(bboxs)与每个默认框(…

centos安装etcd

方法1:默认安装(不建议) 运行命令 yum install etcd 即可,只是安装的etcd版本较低,一般是 etcd-3.3.11,如下图 手动开启etcd,可以看到etcd服务已经开启来了,如下图 特别注意&#x…

Java开发手册中为什么要求谨慎使用ArrayList中的sublist方法

场景 Java开发手册中对于ArrayList的subList的要求如下: 【强制】ArrayList 的 subList 结果不可强转成 ArrayList,否则会抛出 ClassCastException 异常: java.util.RandomAccessSubList cannot be cast to java.util.ArrayList。 说明&a…

Customizable constraint systems for succinct arguments学习笔记(2)

微软研究中心Srinath Setty、a16z crypto research 和 Georgetown University Justin Thaler、Carnegie Mellon University Riad Wahby 20203年论文《Customizable constraint systems for succinct arguments》。 前序博客有: Customizable constraint systems f…

别小瞧,搬迁网络机房,讲究的可不少

大家好,我的网工朋友 最近围观咱们网工交流群,不少朋友提到机房搬迁这档子事,毕竟嘛,做到这方面项目的概率还是很高的。 别看机房搬迁很简单,其实可讲究了。 随着企业、单位的不断深入发展,机房搬迁&…

【正点原子STM32连载】 第二十六章 USMART调试组件实验摘自【正点原子】STM32F103 战舰开发指南V1.2

1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第二十…

记录搭建hadoop集群的过程

Linux(CentOS-7.6-x64位)基础配置, 虚拟机平台VmWare15 CentOS-7.6-x64镜像下载: https://www.aliyundrive.com/s/72Xg449t6i8 提取码: 32rm VmVare15安装包下载带序列号:VmVare15安装包下载带激活序列号资源-CSDN文库 点击关闭,点击完成&…

NineData,稳定、高效的Redis数据同步解决方案

在 DB-Engines 网站的排名中,Redis 在 Key-value 存储的NoSQL领域连续霸榜多年,是目前最流行的键值对存储数据库,被广泛用于缓存、队列、实时分析等多种高并发的场景中。在生产环境中,我们会遇到对Redis进行版本升级和架构的扩缩容…

vue 自定义el-table穿梭框功能

一、需求描述:前段时间接到一个需求是点击做一个类似穿梭框的表格点击选中功能,弹框的左边是全部数据展示,点击表格行数据可以选中自动增加到右边的已选框,并且可以手动删除、重置选中数据。点击确定后到展示到主页面,…