|

楼主 |
发表于 2024-7-27 10:45:34
|
显示全部楼层
- 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):
- """
- :param pipeline_numbers_copy: 复制的管线号列表
- :param template_path_copy: 模版文件路径
- :param output_folder_copy: 输出文件路径
- :return:
- """
- # 构建新的文件名
- new_file = f"{pipeline_number_copy}.xlsx"
- # 构建新文件的完整路径
- new_file_path = os.path.join(output_folder_copy, new_file)
- # 复制模板文件到新文件路径
- shutil.copy(template_file, new_file_path)
- #这里开始加载图片
- # 加载源文件和新文件
- workbook_source = load_workbook(template_path_copy)
- workbook_new = load_workbook(new_file_path)
- # 复制每个 sheet 的图片
- for sheet_name in workbook_source.sheetnames:
- source_sheet = workbook_source[sheet_name]
- new_sheet = workbook_new[sheet_name]
- for img in source_sheet._images: # 提取图片
- new_img = Image(img.ref)
- new_sheet.add_image(new_img) # 添加到新表中
- # 保存修改后的 Excel 文件
- workbook_new.save(new_file_path)
- # 筛选出管线号等于pipeline_number_copy的行,这里是用来删除用不到的模版
- filtered_rows = df_merge[df_merge['管线号'] == pipeline_number_copy]
- # 获取processcards列的值,并去除重复项
- processcards = filtered_rows['工艺卡编号'].unique()
- #读取模版
- workbook_new=load_workbook(new_file_path)
- #获取列表所有sheet名
- sheet_names = workbook_new.sheetnames
- # 遍历所有sheet名,检查是否满足条件
- for sheet_name in sheet_names:
- # 检查sheet名是否包含字母H且不在管线号对应的工艺卡编号之内
- if 'H' in sheet_name and sheet_name not in processcards:
- # 删除满足条件的sheet
- workbook_new.remove(workbook_new[sheet_name])
- # 保存修改后的Excel文件
- workbook_new.save(new_file_path)
- print(f"已创建并保存文件:{new_file_path}")
- # 读取原始数据文件,考虑汇合到前面的程序,把名称先改过来df_merge
- 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("所有管线号对应的文件已成功创建!")
复制代码
不起作用呢,还是没图片的 |
|