找回密码
 加入
搜索
查看: 4834|回复: 7

[效率算法] Excel如何提取单元格中的图片到文件夹并用相应的单元格命名图片[已解决]

  [复制链接]
发表于 2014-3-26 15:58:40 | 显示全部楼层 |阅读模式
本帖最后由 天天笑 于 2014-3-28 08:41 编辑

Excel如何提取单元格中的图片到文件夹并用相应的单元格命名图片;
例如:在单元格A1里面有一幅图,提取出来之后放到D:\Temp\A1-1.jpg
         在单元格A2里面有两幅图,提取出来之后放到D:\Temp\A2-1.jpg、A2-2.jpg
         在单元格A3里面有三幅图,提取出来之后放到D:\Temp\A3-1.jpg、A3-2.jpg、A3-3.jpg


先谢谢各位了
发表于 2014-3-26 16:00:12 | 显示全部楼层
给个测试文件呗
 楼主| 发表于 2014-3-26 16:14:29 | 显示全部楼层
本帖最后由 天天笑 于 2014-3-26 16:18 编辑

Hi kevinch,
测试附件~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2014-3-26 18:07:41 | 显示全部楼层
#include <ScreenCapture.au3>
#include <ClipBoard.au3>

$dic=ObjCreate("scripting.dictionary")
If Not IsObj($dic) Then
        MsgBox(0,"错误","创建对象失败!")
        Exit 0
EndIf
$xls=ObjGet(@ScriptDir&"\Test.xlsx")
If IsObj($xls) Then
        _GDIPlus_Startup()
        For $pic In $xls.activesheet.shapes
                $pic.copy
                If $dic.exists($pic.topleftcell.address(0,0)) Then
                        $dic($pic.topleftcell.address(0,0))=$dic($pic.topleftcell.address(0,0))+1
                Else
                        $dic($pic.topleftcell.address(0,0))=1
                EndIf
                $picname=$pic.topleftcell.address(0,0)&"-"&$dic($pic.topleftcell.address(0,0))&".jpg"
                _ClipBoard_Open(0)
                $iVerifyPics = _ClipBoard_GetDataEx($CF_BITMAP)
                $iVerifyPics = _GDIPlus_BitmapCreateFromHBITMAP($iVerifyPics)
                _GDIPlus_ImageSaveToFile ($iVerifyPics, @ScriptDir&""&$picname)
                _ClipBoard_Close()
        Next
        $xls.close(false)
EndIf
这个试一下,本打算用excel自身的方法提取,无奈在au3中水土不服

以上代码参考了坛友的代码,链接如下:
http://www.autoitx.com/forum.php?mod=viewthread&tid=36959
 楼主| 发表于 2014-3-27 11:46:28 | 显示全部楼层
本帖最后由 天天笑 于 2014-3-27 11:53 编辑

Hi kevinch,
经测试是可以用的。

不过还要两个地方需要请教一下的
1.获取到的图片的像素能否保持原来的像素呢;
2.如果合并了单元格,就只要第一个单元格来命名就可以了;比如1:A1、A2、A3合并了单元格,有三个图片在这个合并单元格里面,就命名为:A1-1,A1-2,A1-3;比如2:A1、B1、C1合并了单元格,有三个图片在这个合并单元格里面,就命名为:A1-1,A1-2,A1-3

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2014-3-27 16:25:10 | 显示全部楼层
这个很实用。收藏一下。
发表于 2014-3-27 20:05:19 | 显示全部楼层
#include <ScreenCapture.au3>
#include <ClipBoard.au3>

$dic=ObjCreate("scripting.dictionary")
If Not IsObj($dic) Then
        MsgBox(0,"错误","创建对象失败!")
        Exit 0
EndIf
$xls=ObjGet(@ScriptDir&"\Test.xlsx")
If IsObj($xls) Then
        _GDIPlus_Startup()
        For $pic In $xls.activesheet.shapes
                $pic.copy
                If $dic.exists($pic.topleftcell.mergearea(1).address(0,0)) Then
                        $dic($pic.topleftcell.mergearea(1).address(0,0))=$dic($pic.topleftcell.mergearea(1).address(0,0))+1
                Else
                        $dic($pic.topleftcell.mergearea(1).address(0,0))=1
                EndIf
                $picname=$pic.topleftcell.mergearea(1).address(0,0)&"-"&$dic($pic.topleftcell.mergearea(1).address(0,0))&".jpg"
                _ClipBoard_Open(0)
                $iVerifyPics = _ClipBoard_GetDataEx($CF_BITMAP)
                $iVerifyPics = _GDIPlus_BitmapCreateFromHBITMAP($iVerifyPics)
                _GDIPlus_ImageSaveToFile ($iVerifyPics, @ScriptDir&""&$picname)
                _ClipBoard_Close()
        Next
        $xls.close(false)
EndIf
命名的这样就行了,像素的,因为未见到有被缩放的图片,提取的都是100%显示的,似乎一保存就压缩了

评分

参与人数 1金钱 +10 收起 理由
天天笑 + 10 厉害、佩服

查看全部评分

 楼主| 发表于 2014-3-28 08:35:44 | 显示全部楼层
本帖最后由 天天笑 于 2014-3-28 08:38 编辑

感谢kevinch的帮忙 ,测试可用!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-13 23:30 , Processed in 0.089932 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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