Microsoft Word 中的表格可以包含多种元素,包括文本、图像等等。有时,您可能希望将图像插入表格中以显示一些信息或从表格中提取图像以用于其他文档。本文将为您展示如何使用 Spire.Doc for .NET 通过 C#/VB.NET 代码 在 Word 表格中插入或提取图像。
安装 Spire.Doc for .NET
首先,您需要添加 Spire.Doc for .NET 包中包含的 DLL 文件作为 .NET 项目中的引用。DLL 文件可以从此链接下载或通过 NuGet 安装。
PM> Install-Package Spire.Doc
在 Word 文档中将图像插入表格
Spire.Doc 提供了 TableCell.Paragraphs[int].AppendPicture() 方法,使您能够将图像添加到特定的表格单元格。详细步骤如下:
- 初始化 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#
- VB.NET
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("doc.png"));
//设置图片宽高
picture.Width = 100;
picture.Height = 100;
//将图像添加到表中第 3 行的第 3 个单元格
cell = table.Rows[2].Cells[2];
picture = cell.Paragraphs[0].AppendPicture(Image.FromFile("xls.png"));
//设置图片宽高
picture.Width = 100;
picture.Height = 100;
//保存结果文档
doc.SaveToFile("添加图像到表.docx", FileFormat.Docx2013);
}
}
}
Imports Spire.Doc
Imports 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("doc.png"))
'设置图片宽高
picture.Width = 100
picture.Height = 100
'将图像添加到表中第 3 行的第 3 个单元格
cell = table.Rows(2).Cells(2)
picture = cell.Paragraphs(0).AppendPicture(Image.FromFile("xls.png"))
'设置图片宽高
picture.Width = 100
picture.Height = 100
'保存结果文档
doc.SaveToFile("添加图像到表.docx", FileFormat.Docx2013)
End Sub
End Class
End Namespace
从 Word 文档中的表格中提取图像
从表格中提取图像,需要遍历表格中的所有行、每行中的所有单元格、每个单元格中的所有段落以及每个段落中的所有子对象,然后找到 DocPicture 类型的对象并调用 DocPicture. Image.Save() 方法将它们保存到指定的文件路径。详细步骤如下:
- 初始化 Document 类的一个实例。
- 使用 Document.LoadFromFile() 方法加载 Word 文档。
- 通过 Document.Sections[int] 属性按索引获取文档中的特定节。
- 通过 Section.Tables[int] 属性根据其索引获取节中的特定表。
- 遍历表中的所有行。
- 遍历每行中的所有单元格。
- 遍历每个单元格中的所有段落。
- 遍历每个段落中的所有子对象。
- 检查当前子对象是否为 DocPicture 类型。
- 如果是,将对象类型转换为 DocPicture 并调用 DocPicture.Image.Save() 方法将图像保存到指定的文件路径。
- C#
- VB.NET
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(@"TableImage-{0}.png", index);
(obj as DocPicture).Image.Save(imageName, ImageFormat.Png);
index++;
}
}
}
}
}
}
}
}
Imports Spire.Doc
Imports Spire.Doc.Documents
Imports Spire.Doc.Fields
Imports 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("TableImage-{0}.png", index)
TryCast(obj, DocPicture).Image.Save(imageName, ImageFormat.Png)
index += 1
End If
Next
Next
Next
Next
End Sub
End Class
End Namespace
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。