|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 bluesky_0 于 2024-5-24 16:52 编辑
先说下背景:
我有个需求在word,或者EXCEL里有很多图片,需要批量导出来,且按照指定名称命名;
解决问题第一次努力:
论坛有个大神,用word做的,在32位系统OK,在64位报错.我搞了好久也没有解决.
那个word VBA帖子地址:https://club.excelhome.net/thread-1412524-1-1.html
解决问题第二次努力:
我转向Python 解析WORD,借助狗屁通代码OK,但是遇到一个问题,就是word的图片如果出现重复的,无法准确的存出来
举例:Word文件里本来有图片20个,但是有3对是重复的,代码取出来的就是17个....我研究一个月没有搞定.具体代码,在下面:
解决问题第三次努力:
我研究EXCEL VBA ,经过几天终于搞定;源代码见附件
开始借助AI,GPT3.5,文心一言;都达不到我想要的.....还是靠我自己搞定的!
这里说下百度那个AI,智障一样......
我也在论坛搜了,没有找到我需要的,
但是发现很多人都遇到这个问题,所以我完全共享我的源代码
论坛有个朋友提到几个方法,我觉得都不好,地址在:https://club.excelhome.net/threa ... tml?_dsign=7154d8b6
打开EXCEL VBA文件以后,菜单自动创建MYTAB 菜单 ,目前只搞了二个功能,提取图片,删除图片,插入图片还在研究
mytab
附件:
Python 提取Word里表格见截图)的图片,且按照指定名称命名的代码:
Word的样式
- import os
- import zipfile
- from docx import Document
- from collections import defaultdict
- # 提供的Word文件路径
- word_file = 'D:\\202401\\202401.docx'
- # 指定存储图片的文件夹路径
- output_folder = 'D:\\202401'
- # 创建存储图片的文件夹
- if not os.path.exists(output_folder):
- os.makedirs(output_folder)
- # 使用python-docx打开Word文档
- doc = Document(word_file)
- # 建立字典用于存储图片文件名和个数
- image_data_dict = defaultdict(list)
- # 从Word文件(ZIP包)中提取图片
- image_files = []
- with zipfile.ZipFile(word_file, 'r') as z:
- image_files = [f for f in z.namelist() if f.startswith('word/media/')]
- for table in doc.tables: # 添加表格遍历以获取文件名和图片数量
- for row in table.rows:
- cell_text = row.cells[0].text.strip()
- image_count = 0
- for paragraph in row.cells[1].paragraphs:
- image_count += len(paragraph.runs) # 计算每行中的图片数量
- print(f"文件名: {cell_text}, 图片数量: {image_count}")
- if image_count > 0:
- image_files_per_cell = image_files[:image_count] # 获取当前单元格对应的图片文件
- image_files = image_files[image_count:] # 更新剩余的图片文件列表
- image_data_dict[cell_text].extend(image_files_per_cell) # 存储对应关系
- # 按照图片原始名称排序顺序提取图片
- for key, value in image_data_dict.items():
- with zipfile.ZipFile(word_file, 'r') as z: # 重新打开 ZIP 文件
- for index, image_file in enumerate(value):
- image_data = z.read(image_file) # 读取图片数据
- image_name = f"{key}_image_{index+1}" # 图片名称,按照图片原始名称排序
- _, extension = os.path.splitext(image_file) # 获取文件扩展名
- image_path = os.path.join(output_folder, f"{image_name}{extension}") # 构建图片路径
- # 保存图片
- with open(image_path, 'wb') as img_file:
- img_file.write(image_data)
- print("Images have been extracted and saved.")
复制代码
|
评分
-
2
查看全部评分
-
|