|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
vba在64位没有修改好,我借助GPT,用Python 实现了。更快更稳定
源代码代码如下:(注意需要安装os zip docx 库,不会都问AI)
import os
import zipfile
from docx import Document
from collections import defaultdict
# 提供的Word文件路径
word_file = 'D:\\OK.docx'
# 指定存储图片的文件夹路径
output_folder = 'D:\\TEST'
# 创建存储图片的文件夹
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.") |
|