Spire.Doc is a professional Word .NET library specifically designed for developers to create, read, write, convert and print Word document files. Get free and professional technical support for Spire.Doc for .NET, Java, Android, C++, Python.
Mon Apr 13, 2020 3:14 am
你好,我的word里面有表格,表格里面各个单元格有的有一张图片,有的有两张或者更多图片,我用下面的示例代码,当只有一张图片时,可以提取出来,当有两张或者更多时,只能提取最后一张图片,请问如何将所有图片提取出来,并知道是处于哪个单元格呢?谢谢啊
- Code: Select all
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System;
using System.Collections.Generic;
using System.Text;
namespace ExtractImgFromTable_Doc
{
class Program
{
static void Main(string[] args)
{
//创建Document实例
Document doc = new Document();
//加载Word文档
doc.LoadFromFile("sample.docx");
//获取文档中第一个节
Section section = doc.Sections[0];
//调用ExtractImagesFromTables方法,提取表格中的图片
ExtractImagesFromTables(section);
//关闭
doc.Close();
}
//创建静态方法ExtractImagesFromTables,参数为Section对象
static void ExtractImagesFromTables(Section section)
{
int index = 0;
String imageName = null;
//遍历section中的表格,提取表格中的图片并保存到本地
foreach (Table table in section.Tables)
{
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)
{
if (obj is DocPicture)
{
imageName = String.Format("TableImage-{0}.png", index);
(obj as DocPicture).Image.Save(imageName, System.Drawing.Imaging.ImageFormat.Png);
index++;
}
}
}
}
}
}
}
}
}
-
chairang
-
- Posts: 3
- Joined: Mon Apr 13, 2020 3:03 am
Mon Apr 13, 2020 8:10 am
您好,
感谢来信。
根据您的描述我模拟了一个文档,然后用最新版的
Spire.Doc Pack(hot fix)版本: 8.3.15测试了您的代码,但并未重现您的问题。如果您使用的是旧版本,请下载最新的版本再试一次。
如果问题仍然存在,请提供您的输入文档给我们进一步调查。谢谢!
Sincerely,
Rachel
E-iceblue support team
Last edited by
rachel.lei on Tue Apr 14, 2020 1:29 am, edited 1 time in total.
-
rachel.lei
-
- Posts: 1571
- Joined: Tue Jul 09, 2019 2:22 am
Mon Apr 13, 2020 11:19 am
您好,
非常感谢您的回复,我的word文档请见附件,我前面使用的是free spire.doc 7.11.0,使用的示例代码是C# 提取 Word 表格中的图片(我无权限粘贴url)代码参考的贵公司网站:spire.doc在线帮助文档-->表格-->C# 提取 Word 表格中的图片:spiredoc/extract-images-from-tables-in-word,我遇到的问题就是当world中table里某个cell同时含有两张或者更多image时,只提取出最后一张。比如我的这个文档,第二行第二列是有两个图片的,但是只提取出来最后一张(“我太难了”那张),前面金砖那张则没有提取保存。刚才用spire.doc_8.4.0试了还是同样的现象,应该是对同一个cell里面的图片没有遍历,而是默认一个cell只有一张图片造成的。所以想请教一下如何遍历同一个cell里面的图片。非常感谢。
rachel.lei wrote:您好,
感谢来信。
根据您的描述我模拟了一个文档,然后用最新版的版本: 8.3.15测试了您的代码,但并未重现您的问题。如果您使用的是旧版本,请下载最新的版本再试一次。
如果问题仍然存在,请提供您的输入文档给我们进一步调查。谢谢!
Sincerely,
Rachel
E-iceblue support team
Login to view the files attached to this post.
-
chairang
-
- Posts: 3
- Joined: Mon Apr 13, 2020 3:03 am
Tue Apr 14, 2020 3:17 am
您好,
感谢您的分享。
实际上,在Word文档的结构中,图片属于段落的子对象。您使用的代码是先遍历表格的cell,接着遍历cell的段落的所有子对象,然后再进一步判断子对象是否是图片类型。
我测试了您的文档,表格中的两张图片都可以被提取出来。这里我上传了我的测试项目,请直接在您那边运行看看。
http://www.e-iceblue.com/downloads/demo/21228Demo.zip如果还是有问题,为了帮助我们进一步调查,请提供您的环境信息,例如操作系统信息(Windows 7,64bit)。
Sincerely,
Rachel
E-iceblue support team
-
rachel.lei
-
- Posts: 1571
- Joined: Tue Jul 09, 2019 2:22 am
Tue Apr 14, 2020 4:38 am
试了一下您的代码,确实可以全部提取了,我再看看我的哪里出问题了,非常的感谢啊。
rachel.lei wrote:您好,
感谢您的分享。
实际上,在Word文档的结构中,图片属于段落的子对象。您使用的代码是先遍历表格的cell,接着遍历cell的段落的所有子对象,然后再进一步判断子对象是否是图片类型。
我测试了您的文档,表格中的两张图片都可以被提取出来。这里我上传了我的测试项目,请直接在您那边运行看看。
如果还是有问题,为了帮助我们进一步调查,请提供您的环境信息,例如操作系统信息(Windows 7,64bit)。
Sincerely,
Rachel
E-iceblue support team
-
chairang
-
- Posts: 3
- Joined: Mon Apr 13, 2020 3:03 am
Tue Apr 14, 2020 8:29 am
您好,
感谢您的反馈。
如果还有别的疑问,欢迎随时联系我们。
祝您一切顺利!
Sincerely,
Rachel
E-iceblue support team
-
rachel.lei
-
- Posts: 1571
- Joined: Tue Jul 09, 2019 2:22 am