哎呀,看来我们真的遇到了一些麻烦,让我再仔细检查一下!首先,我们要确保 `openpyxl` 可以正确处理 Excel 文件中的图片。以下是一个更详细和可靠的示例代码,以确保图像能被正确提取和添加到新的 Excel 文件中。我们会更显式地处理源工作表和目标工作表之间的关系。
请确认你已经安装了最新版本的 `openpyxl`,因为处理图片的能力在一些版本中可能会有所不同。可以使用下面的命令进行更新:
pip install --upgrade openpyxl
请尝试以下修改后的代码:
import pandas as pd
import openpyxl
from openpyxl import load_workbook
from openpyxl.drawing.image import Image
import os
import shutil
def copy_template_to_new_file(pipeline_number_copy, template_path_copy, output_folder_copy):
# 构建新文件名和路径
new_file = f"{pipeline_number_copy}.xlsx"
new_file_path = os.path.join(output_folder_copy, new_file)
# 复制模板文件
shutil.copy(template_path_copy, new_file_path)
# 加载源文件和新文件
workbook_source = load_workbook(template_path_copy)
workbook_new = load_workbook(new_file_path)
for sheet_name in workbook_source.sheetnames:
source_sheet = workbook_source[sheet_name]
new_sheet = workbook_new.create_sheet(title=sheet_name)
# 复制数据(如果需要)
for row in source_sheet.iter_rows(values_only=True):
new_sheet.append(row)
# 复制图片
for img in source_sheet._images:
new_img = Image(img.ref)
new_img.anchor = img.anchor # 保持原位置
new_sheet.add_image(new_img) # 添加图片到新工作表
# 筛选出管线号对应的行
filtered_rows = df_merge[df_merge == pipeline_number_copy]
processcards = filtered_rows.unique()
# 删除不需要的工作表
sheet_names = workbook_new.sheetnames
for sheet_name in sheet_names:
if 'H' in sheet_name and sheet_name not in processcards:
std = workbook_new[sheet_name] # 获取具体的sheet
workbook_new.remove(std) # 删除sheet
# 保存修改后的文件
workbook_new.save(new_file_path)
print(f"已创建并保存文件:{new_file_path}")
# 读取数据
df_merge = pd.read_excel("提取数据.xlsx")
# 获取所有管线号
pipeline_ids = df_merge.unique()
# 定义模板文件路径和输出文件夹
template_file = "工艺卡模板.xlsx"
target_folder = "C:\\测试文件夹"
# 确保输出文件夹存在
if not os.path.exists(target_folder):
os.makedirs(target_folder)
# 遍历管线号,复制模板文件
for pipeline_number in pipeline_ids:
copy_template_to_new_file(pipeline_number, template_file, target_folder)
print("所有管线号对应的文件已成功创建!")
### 关键点:
1. **明确复制数据**:在创建新工作表时,如果需要,不妨将源工作表中的数据也逐行复制到新的工作表中,这样可以确保内容完整。
2. **图片复制**:确保在循环中使用 `for img in source_sheet._images:` 来提取和添加图片。
3. **创建新工作表**:在目标工作簿中,为每个源工作表创建一个新的工作表,并将其命名为相同的名称。
4. **注意 Excel 格式**:确保源文件 (`工艺卡模板.xlsx`) 是 `.xlsx` 格式,而不是 `.xls` 等旧格式,因为 `openpyxl` 不支持旧格式。
如果您仍然无法看到图片,可以尝试用其他 Excel 文件查看或测试此代码,看看问题是否出在特定文件上。如果有其他错误信息,请提供给我,我们一起解决!统计数据总是有帮助的!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |