ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1794|回复: 13

[讨论] 不打开word文档的情况下,批量导出图片以及关键字搜索

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-2-12 21:14 | 显示全部楼层 |阅读模式
    通常情况下,导出word的图片,一般是先打开文件,然后再遍历导出。文档数量较多的情况下,VBA导出效率是一个问题。最近几天学习了一下Openxml,这个导出图片的效率是相当高。92份文档,200多张图片,10秒多就可以完成。
   同样,使用openxml根据关键字搜索word文档,效率也是相当高,个人感觉像可以数据库一样使用,在文档搜索较多时挺方便的。
openxml所能找到的资料有限,我想如果邮件合并采用类似办法,效率肯定比传统的邮件合并快的太多,哪位有资料可以共同研究一下,提升一下word的插件质量。  分享一下文档搜索和图片导出的效果动画 2.gif




1.gif

TA的精华主题

TA的得分主题

发表于 2022-2-13 06:53 来自手机 | 显示全部楼层
一直在用ooxml,
比较方便,就是打开zip,操作xml文件。我这里直接是读取内容到数据库查询的。图片稍微麻烦一点,搜ooxml解析word,c#有个openxml sdk可以看看
Screenshot_2022-02-13-06-49-22-951_com.termux.jpg
Screenshot_2022-02-13-06-49-36-413_com.termux.jpg

TA的精华主题

TA的得分主题

发表于 2022-2-13 06:58 来自手机 | 显示全部楼层
zpy2 发表于 2022-2-13 06:53
一直在用ooxml,
比较方便,就是打开zip,操作xml文件。我这里直接是读取内容到数据库查询的。图片稍微麻烦 ...

https://club.excelhome.net/forum.php?mod=viewthread&tid=1613280&mobile=&_dsign=51e743ea邮件合并的确很快,600个文件生产,几乎花不了几秒

TA的精华主题

TA的得分主题

发表于 2022-2-13 14:28 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
代码能否发出来学习下?

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-13 17:01 | 显示全部楼层
zpy2 发表于 2022-2-13 06:58
https://club.excelhome.net/forum.php?mod=viewthread&tid=1613280&mobile=&_dsign=51e743ea邮件合并的 ...

谢谢老师热心回复,我想的邮件合并是这样的:excel数据一行对应一个word文档,要填写的word模板数据区域黄色高亮。利用openxml查找到黄色高亮,然后批量生成。研究了一天,感觉还是要深入学习一下xml。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-13 17:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhanglei1371 发表于 2022-2-13 14:28
代码能否发出来学习下?

批量导出图片的C#代码
public void ExportImage(string[] aFiles, string outFolder)
        {
            
            if (Directory.Exists(outFolder))
                Directory.Delete(outFolder,true);
            Directory.CreateDirectory(outFolder);

            int imageIndex = 0;
            foreach (string filePath in aFiles)
            {
                using (WordprocessingDocument doc = WordprocessingDocument.Open(filePath, false))
                {
                    MainDocumentPart mainPart = doc.MainDocumentPart;   //word文件夹
                    Body body = mainPart.Document.Body;                 //文档正文 word.xml中的body
                    var imageParts = mainPart.ImageParts;               //图片部分
                  
                    foreach (ImagePart image in imageParts)
                    {
                        var suffix = image.ContentType.Split('/')[1];  //图片后缀名              
                        Stream stream = image.GetStream();
                        Bitmap bmp = new Bitmap(stream);
                       
                        bmp.Save(outFolder + "\\" +(++imageIndex) + "." + suffix);
                    }

                }
            }
            if (imageIndex > 0)
                   System.Diagnostics.Process.Start("explorer.exe", outFolder);
        }

TA的精华主题

TA的得分主题

发表于 2022-2-13 17:41 来自手机 | 显示全部楼层
zmj9151 发表于 2022-2-13 17:01
谢谢老师热心回复,我想的邮件合并是这样的:excel数据一行对应一个word文档,要填写的word模板数据区域 ...

模板一对一 我是 {0}大括号
一对多 【】
最好是字符串方便查询
Screenshot_2022-02-13-17-40-12-315_cn.wps.moffice_eng.jpg

TA的精华主题

TA的得分主题

发表于 2022-2-13 17:45 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zmj9151 发表于 2022-2-13 17:02
批量导出图片的C#代码
public void ExportImage(string[] aFiles, string outFolder)
        {

只获取图片可以直接解压 word/media的图片文件。

TA的精华主题

TA的得分主题

发表于 2022-2-13 19:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zmj9151 发表于 2022-2-13 17:02
批量导出图片的C#代码
public void ExportImage(string[] aFiles, string outFolder)
        {

这样保存出来是否是按照图片的从第一张到最后一张的先后顺序?若是直接解压出来,图片的名称和顺序无法控制。
另外既然用C#了,Aspose也可以试试,速度似乎也是飞快。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-13 22:17 来自手机 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-7 09:05 , Processed in 0.045843 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表