导出嵌入单元格图片的原图

wils
wils

创作者俱乐部成员

原理是,解压xlsx文件,解析xml获取图片与id的关系,导出原图,以嵌入单元格的那个id命名

所以用了最简单的批处理方式

复制代码,用记事本保存为bat文件,改一下需要处理的文件名,如果文件名是中文,最好保存成ansi编码的批处理,最后运行即可

🔔

#ANSI编码&cls&powershell -Version 5.1 -NoLogo -NoProfile "gc '%~0'|out-string|iex"&pause&exit

$f = 'a.xlsx'

$z = ($f -split '\.')[0] + '.zip'

rni $f $z

Expand-Archive $z

rni $z $f

$x = [xml](gc .\a\xl\cellimages.xml)

$d = @{}

$x.SelectNodes('//*[local-name()="cellImage"]') | %{

$d[$_.SelectSingleNode('.//*[local-name()="cNvPr"]').name] = $_.SelectSingleNode('.//*[local-name()="blip"]').embed

}

$x = [xml](gc .\a\xl\_rels\cellimages.xml.rels)

$h = @{}

$x.SelectNodes('//*[local-name()="Relationship"]') | %{

$h[$_.Id] = './a/xl/' + $_.Target

}

$d.Keys | %{

$n = $h[$d[$_]]

cp $n ($_ + '.' + ($n -split '\.')[-1])

}

rm -Recurse ($f -split '\.')[0]

写的比较粗,但意思到了,应该根据自己的需要再做修改

广东省
浏览 106
收藏
5
分享
5 +1
7
+1
全部评论 7
 
星辰
6
· 江西省
回复
 
懒得批爆
懒得批爆

创作者俱乐部成员

每次最喜欢看这种代码大佬解决问题,万事不决上代码 能用代码解决的问题都不用鼠标右键 不过我这种代码文盲,看不懂代码,也不知道代码里面有没有夹带什么私货, 毕竟经历过CIH,对任意看不懂的代码都有天生胆怯,要是每条代码都有解释有可能还敢使用(图一)。 就只能用最老土的办法,就是从xlsx文件下手,xlsx文件、docx文件、ppx文件原则上都是压缩包,那么只需要用压缩软甲打开即可。(图二) 所以这下知道了,xlsx中的所有媒体文件都应该保存在【*.xlsx\xl\media\】下面,其他文件夹下面的xml文件应该对应的都是文件夹名称字面意义上的类型。 同理pptx中所有的媒体文件也保存在【*.pptx\ppt\media\】,那么docx文件呢,自己去试试看吧。 提示:7z-zip可以在不改后缀的情况下直接将该文件(有资格作为压缩包的文件)当做压缩包打开(图四)
· 四川省
1
回复
wils
wils

创作者俱乐部成员

其实没区别,就是解压找图片,只不过又找了一下每张图片对应的那个id,重命名了一下 如果手动重命名,就有点太麻烦了 注释是真的懒得写了,交给ai,比我解释的全面多了 其实分享的大都是脚本,让ai解释一遍,干了什么非常清楚,再让ai修改一下,也非常方便,因为用的都是最常见的脚本语言
· 海南省
1
回复