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.
User avatar

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

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
User avatar

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
User avatar

rachel.lei
 
Posts: 1571
Joined: Tue Jul 09, 2019 2:22 am

Return to Spire.Doc