写点什么

C#/VB.NET 在 Word 表格中插入或提取图像

作者:在下毛毛雨
  • 2023-01-20
    美国
  • 本文字数:3933 字

    阅读完需:约 13 分钟

C#/VB.NET 在 Word 表格中插入或提取图像

在日常工作中,相信大家都会频繁的使用到 Word 文档来完成工作。但是 Word 的元素种类丰富,在使用的过程中,难免会有一些不一样的需求。例如,需要你把 Word 表格中的图像全部提取出来,或者在 Word 表格中插入图片。如果一张张的手动保存/添加的话,不仅效率低下而且还很浪费时间。那有没有轻松又高效的办法呢?我这不就来拯救大家了么!今天要给大家介绍的方法是,通过编程方式的来实现此操作。此办法简单易上手,快和我一起学起来!

程序环境

本次测试时,在 VS 程序中引入 Free Spire.Doc for.NET。可通过以下方法引用 Free Spire.Doc.dll 文件:

方法 1:将 Free Spire.Doc for .NET下载到本地,解压,安装。安装完成后,找到安装路径下 BIN 文件夹中的 Spire.Doc.dll。然后在 Visual Studio 中打开“解决方案资源管理器”,鼠标右键点击“引用”,“添加引用”,将本地路径 BIN 文件夹下的 dll 文件添加引用至程序。

方法 2:通过NuGet安装。可通过以下 2 种方法安装:

(1)可以在 Visual Studio 中打开“解决方案资源管理器”,鼠标右键点击“引用”,“管理 NuGet 包”,然后搜索“Free Spire.Doc”,点击“安装”。等待程序安装完成。

(2)将以下内容复制到 PM 控制台安装。

Install-PackageFreeSpire.Doc -Version 10.8.0

在 Word 文档中将图像插入表格

详细步骤如下:

  • 初始化 Document 类的一个实例。

  • 使用 Document.LoadFromFile() 方法加载 Word 文档。

  • 通过 Document.Sections[int] 属性按索引获取文档中的特定节。

  • 通过 Section.Tables[int] 属性根据其索引获取节中的特定表。

  • 通过 Table.Row[int].Cells[int] 属性访问要向其添加图像的特定单元格。

  • 使用 TableCell.Paragraphs[int].AppendPicture() 方法将图像添加到单元格的特定段落。

  • 通过 DocPicture.Width 和 DocPicture.Height 属性设置图像的宽度和高度。

  • 使用 Document.SaveToFile() 方法保存结果文档。

完整代码

C#

using Spire.Doc;using Spire.Doc.Fields;using System.Drawing;
namespace InsertImagesIntoTable{ class Program { static void Main(string[] args) { //初始化 Document 类的一个实例 Document doc = new Document(); //加载 Word 文档 doc.LoadFromFile("表格.docx");
//获取文档的第一节 Section section = doc.Sections[0];
//从第一节获取第一个表 Table table = (Table)section.Tables[0];
//将图像添加到表中第二行的第三个单元格 TableCell cell = table.Rows[1].Cells[2]; DocPicture picture = cell.Paragraphs[0].AppendPicture(Image.FromFile("拉布拉多.png")); //设置图片宽高 picture.Width = 100; picture.Height = 100; //将图像添加到表中第 3 行的第 3 个单元格 cell = table.Rows[2].Cells[2]; picture = cell.Paragraphs[0].AppendPicture(Image.FromFile("法斗.png")); //设置图片宽高 picture.Width = 100; picture.Height = 100;
//保存结果文档 doc.SaveToFile("添加图像到表.docx", FileFormat.Docx2013); } }}
复制代码

VB.NET

Imports Spire.DocImports Spire.Doc.Fields
Namespace InsertImagesIntoTable Friend Class Program Private Shared Sub Main(ByVal args As String()) '初始化 Document 类的一个实例 Dim doc As Document = New Document() '加载 Word 文档 doc.LoadFromFile("表格.docx")
'获取文档的第一节 Dim section As Section = doc.Sections(0)
'从第一节获取第一个表 Dim table As Table = CType(section.Tables(0), Table)
'将图像添加到表中第二行的第三个单元格 Dim cell As TableCell = table.Rows(1).Cells(2) Dim picture As DocPicture = cell.Paragraphs(0).AppendPicture(Image.FromFile("拉布拉多.png")) '设置图片宽高 picture.Width = 100 picture.Height = 100 '将图像添加到表中第 3 行的第 3 个单元格 cell = table.Rows(2).Cells(2) picture = cell.Paragraphs(0).AppendPicture(Image.FromFile("法斗.png")) '设置图片宽高 picture.Width = 100 picture.Height = 100
'保存结果文档 doc.SaveToFile("添加图像到表.docx", FileFormat.Docx2013) End Sub End ClassEnd Namespace
复制代码

效果图

从 Word 文档中的表格中提取图像

  • 初始化 Document 类的一个实例。

  • 使用 Document.LoadFromFile() 方法加载 Word 文档。

  • 通过 Document.Sections[int] 属性按索引获取文档中的特定节。

  • 通过 Section.Tables[int] 属性根据其索引获取节中的特定表。

  • 遍历表中的所有行。

  • 遍历每行中的所有单元格。

  • 遍历每个单元格中的所有段落。

  • 遍历每个段落中的所有子对象。

  • 检查当前子对象是否为 DocPicture 类型。

  • 如果是,将对象类型转换为 DocPicture 并调用 DocPicture.Image.Save() 方法将图像保存到指定的文件路径。

完整代码

C#

using Spire.Doc;using Spire.Doc.Documents;using Spire.Doc.Fields;using System.Drawing.Imaging;
namespace ExtractImagesFromTable{ class Program { static void Main(string[] args) { //初始化 Document 类的一个实例 Document doc = new Document(); //加载 Word 文档 doc.LoadFromFile("添加图像到表.docx");
//获取文档的第一节 Section section = doc.Sections[0];
//从第一节获取第一个表 Table table = (Table)section.Tables[0];
int index = 0; string imageName = null;
//遍历表中的所有行 for (int i = 0; i < table.Rows.Count; i++) { //遍历每行中的所有单元格 for (int j = 0; j < table.Rows[i].Cells.Count; j++) { //遍历每个单元格中的所有段落 foreach (Paragraph para in table[i, j].Paragraphs) { //遍历每个段落中的所有子对象 foreach (DocumentObject obj in para.ChildObjects) { //检查当前子对象是否为DocPicture类型 if (obj is DocPicture) { //将图片保存到指定文件路径 imageName = string.Format("D:\\VS2022项目\\free Doc\\bin\\Debug\\图像\\TableImage-{0}.png", index); (obj as DocPicture).Image.Save(imageName, ImageFormat.Png); index++; } } } } } } }}
复制代码

VB.NET

Imports Spire.DocImports Spire.Doc.DocumentsImports Spire.Doc.FieldsImports System.Drawing.Imaging
Namespace ExtractImagesFromTable Friend Class Program Private Shared Sub Main(ByVal args As String()) '初始化 Document 类的一个实例 Dim doc As Document = New Document() '加载 Word 文档 doc.LoadFromFile("添加图像到表.docx")
'获取文档的第一节 Dim section As Section = doc.Sections(0)
'从第一节获取第一个表 Dim table As Table = CType(section.Tables(0), Table)
Dim index = 0 Dim imageName As String = Nothing
'遍历表中的所有行 For i As Integer = 0 To table.Rows.Count - 1 '遍历每行中的所有单元格 For j As Integer = 0 To table.Rows(i).Cells.Count - 1 '遍历每个单元格中的所有段落 For Each para As Paragraph In table(i, j).Paragraphs '遍历每个段落中的所有子对象 For Each obj As DocumentObject In para.ChildObjects '检查当前子对象是否为DocPicture类型 If TypeOf obj Is DocPicture Then '将图片保存到指定文件路径 imageName = String.Format("D:\VS2022项目\free Doc\bin\Debug\图像\TableImage-{0}.png", index) TryCast(obj, DocPicture).Image.Save(imageName, ImageFormat.Png) index += 1 End If Next Next Next Next End Sub End ClassEnd Namespace
复制代码

效果图

—本文完—

发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2022-06-02 加入

还未添加个人简介

评论

发布
暂无评论
C#/VB.NET 在 Word 表格中插入或提取图像_C#_在下毛毛雨_InfoQ写作社区