sales@e-iceblue.com    |    028-81705109    |    2181348176    |    冰蓝科技    |    EN-US

C# Word 中添加、修改和提取 OLE

OLE(Object Linking and Embedding,对象连接与嵌入)是一种面向对象的技术。OLE分为两种形式,一种是嵌入,一种是链接。前者是将对象嵌入到文档中,不管外部对象怎么更改都是以嵌入操作当时的对象为准,之后不再改变。而后者是以链接形式来保存对象的,外部任何对该对象的更改都会影响文档。Spire.Doc支持Word中的OLE操作,包括添加,修改和提取OLE对象,本文将对此做详细。

添加OLE

//实例化一个Document对象
Document doc = new Document();
//向文档中添加一个Section对象
Section sec = doc.AddSection();

//在这个section上添加一个段落
Paragraph p = sec.AddParagraph();

//实例化一个DocPicture对象
DocPicture picture = new DocPicture(doc);

//目前我们还没有实现自动扫描成图标的功能, 只能手动用图片去设置图标
//事实上,我们每个产品都支持将文档保存成图片,可以巧妙地加以利用。
//这里我加载的图片是通过Spire.XLS 的SaveToImage方法得到的。
Image image = Image.FromFile(@"C:\Users\Administrator\Desktop\ole.png");
picture.LoadImage(image);

//在文档中插入一个工作表, OleLinkType 枚举值控制该OLE是链接还是嵌入
DocOleObject obj = p.AppendOleObject(@"jane.xlsx", picture, OleLinkType.Link);
//DocOleObject obj = p.AppendOleObject(@"jane.xlsx", picture, OleLinkType.Embed);

//保存文档
doc.SaveToFile("添加OLE.docx");

向文档中顺利添加了一个Excel工作表:

C# Word 中添加、修改和提取 OLE

修改OLE

//实例化一个Document对象
 Document doc = new Document();

 //加载一个有OLE对象的文档
 doc.LoadFromFile(@"添加OLE.docx");

 //获取第一个Section
 Section sec = doc.Sections[0];

 //遍历这个Section中的所有子元素,找到段落下的OLE对象
 foreach (DocumentObject obj in sec.Body.ChildObjects)
 {
     if (obj is Paragraph)
     {
         Paragraph par = obj as Paragraph;
         foreach (DocumentObject paraObj in par.ChildObjects)
         {
             //找到OLE对象,根据类型来进行更改操作
             if (paraObj.DocumentObjectType == DocumentObjectType.OleObject)
             {
                 DocOleObject Ole = paraObj as DocOleObject;
                 //如果是链接, 修改对象的链接路径
                 if (Ole.LinkType == OleLinkType.Link)
                 {
                     //同时还要手动去更改OLE的图片
                     DocPicture pic = Ole.OlePicture;
                     pic.LoadImage(Image.FromFile(@"WordOle.png"));
                     Ole.LinkPath = @"替换的Word文档.docx";
                 }
                 //如果是嵌入,更改数据即可
                 byte[] bys = File.ReadAllBytes(@"替换的Word文档.docx");
                 if (Ole.LinkType == OleLinkType.Embed)
                 {
                     DocPicture pic = new DocPicture(doc);
                     pic.LoadImage(Image.FromFile(@"WordOle.png"));
                     Ole.ObjectType = "Word.Document.12";
                     Ole.SetOlePicture(pic);
                     Ole.SetNativeData(bys);
                 }
             }
         }
     }
 }
 doc.SaveToFile("修改OLE.docx", Spire.Doc.FileFormat.Docx2013);

将原来文档中的excel工作表替换成了Word文档:

C# Word 中添加、修改和提取 OLE

提取OLE

//实例化一个Document对象
Document doc = new Document();

//加载一个有OLE对象的文档
doc.LoadFromFile(@"添加OLE.docx ");

//遍历文档所有Section          
foreach (Section sec in doc.Sections)
{
    //遍历Section下面所有的子元素
    foreach (DocumentObject obj in sec.Body.ChildObjects)
    {
        if (obj is Paragraph)
        {
            Paragraph par = obj as Paragraph;
            //遍历这个section下面的段落
            foreach (DocumentObject o in par.ChildObjects)
            {
                //找到OLE对象,并根据类型提取
                if (o.DocumentObjectType == DocumentObjectType.OleObject)
                {
                    DocOleObject Ole = o as DocOleObject;
                    //ObjectType属性可以获取ole对象的具体类型。
                    //注意,如果是用Spire.Doc添加的ole对象的话,需要在AppendOleObject
                    //的时候先声明OleObjectType,不然这里得不到具体的类型,只会得到Package
                    string s = Ole.ObjectType;
                    //"AcroExch.Document.11"是指PDF对象对应的ProgID
                    if (s == "AcroExch.Document.11")
                    {
                        File.WriteAllBytes("Result.pdf", Ole.NativeData);
                    }
                    //"Excel.Sheet.12"是指 Excel03之后的工作表对应的ProgID
                    else if (s == "Excel.Sheet.12")
                    {
                        File.WriteAllBytes("Result.xlsx", Ole.NativeData);
                    }
                    //"Word.Document.12"是指03之后的Word对应的ProgID
                    else if (s == "Word.Document.12")
                    {
                        File.WriteAllBytes("Result.docx", Ole.NativeData);
                    }
                }
            }
        }
    }
}

提取出来的excel工作表如下:

C# Word 中添加、修改和提取 OLE

Spire.Doc
C# 添加 Word 超链接
C# 插入、计数、检索和删除 Word 文档变量
C# 如何在 Word 中插入分页符和分节符
C# 如何在 Word 中插入和删除文本框
C# 添加形状和形状组合到 Word 文档
C# 如何插入图片到 Word 以及提取 Word 中的图片
C# 给 Word 文档添加内容控件
如何合并 Word 文档
C# Word 文档保护
创建 Word 文档
启用 Word 修订功能,接受和拒绝修订
C# 操作 Word 批注功能
Spire.Doc 转换功能详述
使用 C# 为 Word 文档添加脚注尾注
C# 为 Word 文档添加页眉,页脚和页码
C# 为 Word 文档添加文本和图片水印
添加和获取 Word 文档摘要及属性
C# Word 查找和替换功能
C# 创建 Word 表格
使用 C# 添加 Word 域
C# 添加,替换和删除 Word 书签
C# 合并与拆分 Word 表格中的单元格
C# Word 图片替换
C# 根据分节符和分页符拆分 Word 文档
C# 给 Word 文档设置背景颜色和背景图片
C# 在 Word 中创建文本框
C# 设置纸张大小以及页边距
C# 在 Word 中插入下拉列表控件、文本控件、图片控件等
C# 在 Word 中创建项目符号列表、多级编号列表
C# 插入表格到 Word 文本框以及获取和删除 Word 文本框中的表格
C# Word 中添加和删除特殊符号
C# 创建 Word 邮件合并模板并合并文本和图片
C# 打印 Word 文档
C# Word 中添加、修改和提取 OLE
C# Word 中设置文字效果
C# Word 添加分栏、分割线
C# 在 Word 中插入上下标
C# 设置 Word 表格的格式
C# 操作 Word 表格行和列
C# 创建 Word 艺术字
Spire.DocViewer
如何添加 Spire.DocViewer 控件到 Toolbox
Spire.XLS
C# Excel 插入和删除分页符
C# 给 Excel 工作表添加水印
C# 图表中隐藏和空单元格的设置
给 Excel 表格添加超链接
C# 复制 Excel 工作表
使用 Spire.XLS 创建 Excel 图表
C# 设置 Excel 数据验证/数据有效性
Excel 查找替换高亮显示数据
C# 显示和隐藏 Excel 工作表及工作表中的行与列
C# 添加修改及删除 Excel 批注
如何使用 C# 打印 Excel 文档
使用 C# 将 Excel 工作薄和 Excel 工作表保存为 PDF 格式
C# Excel 图片添加、提取和删除
C# Excel 文档保护
合并/取消合并 Excel 单元格
C# 创建 Excel 文件
如何设置和获取 Excel 工作薄摘要及自定义属性
C# 设置 Excel 页眉页脚
C# Excel 数据分组和取消分组
C# 创建、读取 Excel 公式
C# Excel 字体设置
C# 如何在 Excel 中设置条件格式
C# Excel 工作表和 Excel 图表保存为图片
C# Excel 冻结窗格
C# 设置 Excel 图片大小和位置
C# 给 Excel 文档设置背景颜色和背景图片
C# 设置现有 Excel 图表的数据标签样式
C# 展开和折叠 Excel 分组
C# 重命名 Excel 工作表和设置工作表标签颜色
C# 如何合并 Excel 文档
C# Excel 插入图形
C# 将 Excel 文件转换为 HTML 格式
C# 转换 CSV 到 Excel、PDF、Datatable
C# Excel 创建多级分组
C# 设置 Excel 工作表视图模式和显示比例
C# Excel 单元格锁定和取消锁定
C# Excel 导入导出数据
C# 设置 Excel 中数字格式
C# Excel 自定义数据标签
C# 设置 Excel 中边框(网格线)样式
C# Excel 插入和删除表单控件
C# 添加、修改和删除Excel迷你图
Spire.Presentation
C# 给 PPT 文档添加水印
Spire.Presentation 保护 PPT 文档
C# 创建 PowerPoint 文档
C# PowerPoint 文档转换成图片、PDF、SVG 等格式文件
C# 如何提取 PowerPoint 文档中的文本和图片
C# 创建、删除、操作 PowerPoint 表格
C# 如何添加、删除 PowerPoint 图形
C# 创建 PowerPoint 图表
C# Presentation 文本替换
C# 隐藏和取消隐藏幻灯片
C# 添加、编辑、提取和删除 PowerPoint 批注
C# PPT 插入和提取视频
C# PPT 添加、修改超链接
C# 创建 PowerPoint 堆积图
C# 设置和获取 PowerPoint 文档属性
C# 添加和获取 PowerPoint 备注
C# 添加或删除 PowerPoint 段落和设置段落样式
C# 幻灯片插入 SmartArt 图形
C# 设置 PPT 表格中文字的对齐方式
C# PowerPoint 添加页脚、页码
C# 更改 PPT 中文字方向
C# 打印 PowerPoint 文档
C# 给 PowerPoint 文档设置背景颜色和背景图片
C# 创建幻灯片编号列表和项目符号列表
C# 设置PowerPoint中文字透明度
C# PowerPoint分离饼状图
Spire.PDF
C# 添加、获取及删除 PDF 附件
C# 给 PDF 文档添加背景颜色和背景图片
C# PDF 转 Word、Image、XPS
C# PDF 图片添加、删除和替换
C# 压缩 PDF 文档
C# 创建 PDF 文档
C# 何如提取 PDF 文档中的文本和图片
合并与拆分 PDF 文档
C# PDF 添加页眉页脚
C# 给 PDF 文档添加水印
打印 PDF 文档
C# PDF 数字签名
C# PDF 字体设置
C# 操作 FDF 和 XFDF 文件
C# 创建 PDF 表单域
C# PDF 文档保护与取消保护
C# 将 PDF 表单域设置为只读
C# 创建 PDF 表格
如何使用 C# 在 PDF 中绘制图形
C# 添加或删除 PDF 页面,调整页面顺序
C# PDF 添加注释和标记
C# 添加、修改和删除 PDF 书签
C# 如何删除 PDF 表单域
C# PDF 设置页边距和页面大小
C# PDF 查找和高亮显示文本
C# 添加和删除 PDF 图层
C# 添加、获取和删除 PDF 自定义文档属性
C# 打印 PDF 文档的多页到一页和一页到多页
C# 创建 PDF 项目符号列表和多级编号列表
C# 固定 PDF 文本框中文字的大小和颜色
C# 给 PDF 文档添加超链接
C# 用 JavaScript 设置和验证 PDF 文本域格式
C# 给 PDF 文档添加动作
C# PDF 文档加密和解密
Spire.PDFViewer
Spire.DataExport
Spire.BarCode for .NET
Licensing
如何应用 License
License Agreement
Spire.BarCode for JAVA
如何使用 Spire.Barcode for Java 生成条形码
使用 Spire.Barcode for Java 识别条形码
Spire.Email
C# 如何群发邮件
C# 如何接收和保存邮件
C# 创建、重命名、删除邮箱文件夹
C# 添加、提取、删除邮件附件