你好!感谢你的反馈!让我们逐一解决这几个问题,确保代码能顺利生成你想要的Excel文件。
### 1. 设置生成文件的路径
为了指定生成文件的路径,你可以在 `new_file_path` 中添加想要的目录路径。例如,如果你希望将新文件保存在 `C:\generated_files` 文件夹中,可以这样修改:
# 定义输出路径
output_folder = "C:\\generated_files"
# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)
# 创建新 Excel 文件
new_file_path = os.path.join(output_folder, f"{管线号}.xlsx")
### 2. 处理多个工艺卡模版
如果一个管线号有多个工艺卡编号,我们需要为每个工艺卡创建相应的工作表,并且要确保所有的模版都被加载。以下是改进后的代码部分,用于处理这个需求:
# 确保 Sheet 名称的唯一性
existing_sheets = set()
# 遍历每个工艺卡编号
for 工艺卡编号 in df_merge['工艺卡编号'].unique():
# 模板路径和文件名
template_path = os.path.join(template_folder, f"{工艺卡编号}.xlsx")
if os.path.exists(template_path):
wb_template = load_workbook(template_path)
sheet_name = 工艺卡编号
# 如果 sheet 名称已经存在,给它加个后缀
suffix = 1
while sheet_name in existing_sheets:
sheet_name = f"{工艺卡编号}_{suffix}"
suffix += 1
# 复制模板的第一个sheet
template_sheet = wb_template.worksheets[0]
new_sheet = wb.copy_worksheet(template_sheet)
new_sheet.title = sheet_name
existing_sheets.add(sheet_name)
else:
print(f"模板文件 {工艺卡编号}.xlsx 不存在,请检查路径!")
### 3. 生成的第一个Sheet要去掉
如果你不想生成第一个空的工作表,可以在创建新的Excel文件时直接删除它。比如在创建新的 `Workbook` 后,立即删除默认的第一个Sheet:
from openpyxl import Workbook
# 创建新的 Excel 文件
new_wb = Workbook()
# 删除默认生成的第一个Sheet
default_sheet = new_wb.active
new_wb.remove(default_sheet)
### 完整示例代码
结合以上改进,以下是完整代码示例:
import pandas as pd
import os
from openpyxl import load_workbook, Workbook
# 假设你的 DataFrame 已经创建为 df_merge
df_merge = pd.read_excel("提取数据.xlsx")
# 模板文件夹路径
template_folder = "模版的文件夹路径"
# 定义输出路径
output_folder = "C:\\generated_files"
# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)
# 遍历每一行
for index, row in df_merge.iterrows():
管线号 = row['管线号']
# 创建新的 Excel 文件
new_file_path = os.path.join(output_folder, f"{管线号}.xlsx")
# 设置已存在的 Sheet 名称
existing_sheets = set()
# 创建新的 Excel 工作簿
new_wb = Workbook()
# 删除默认生成的第一个Sheet
default_sheet = new_wb.active
new_wb.remove(default_sheet)
# 遍历每个工艺卡编号
for 工艺卡编号 in df_merge.loc[df_merge['管线号'] == 管线号, '工艺卡编号'].unique():
template_path = os.path.join(template_folder, f"{工艺卡编号}.xlsx")
if os.path.exists(template_path):
wb_template = load_workbook(template_path)
sheet_name = 工艺卡编号
# 确保 Sheet 名称唯一
suffix = 1
while sheet_name in existing_sheets:
sheet_name = f"{工艺卡编号}_{suffix}"
suffix += 1
# 复制模板的第一个sheet
template_sheet = wb_template.worksheets[0]
new_sheet = new_wb.copy_worksheet(template_sheet)
new_sheet.title = sheet_name
existing_sheets.add(sheet_name)
else:
print(f"模板文件 {工艺卡编号}.xlsx 不存在,请检查路径!")
# 保存新文件
new_wb.save(new_file_path)
print(f"已创建: {new_file_path} 包含模版: {existing_sheets}")
print("所有文件处理完成!")
这段代码应该能够实现你所要求的功能,并处理之前遇到的问题。请尝试一下,如果还有其他问题,随时来问我哦!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |