太好了,代码能够运行了!现在我们来解决你提到的两个问题:
### 1. 处理同一管线号生成多个工艺卡
如果同一管线号有多个工艺卡模版,你需要确保在为每个模版创建工作表时,都能正确迭代并添加新的工作表。我们的代码要稍作修改,以便正确处理这些情况。
### 2. 指定生成文件夹位置
确保路径建立和生成文件的过程都是正确的。在代码中,我们会特别检查文件保存所用的路径。
### 修改后的代码:
我们会使用一个集合来记录每个管线号相关的所有工艺卡工作表,确保能够为每个工艺卡生成对应的工作表。同时,该部分将准确使用你指定的输出路径。
- import pandas as pd
- import os
- from openpyxl import load_workbook, Workbook
- # 假设你的 DataFrame 已经创建为 df_merge
- df_merge = pd.read_excel("提取数据2.xlsx")
- # 模板文件夹路径
- template_folder = "D:/PYTHON_NEW/pythonProject/提取python excel/工艺卡模版"
- # 定义输出路径
- output_folder = "D:/测试生成工艺卡"
- # 确保输出文件夹存在
- os.makedirs(output_folder, exist_ok=True)
- # 遍历每一行
- for index, row in df_merge.iterrows():
- pipe_number = row['管线号'] # 假设管线号在 DataFrame 中的列名是 '管线号'
- # 创建新的 Excel 文件
- new_file_path = os.path.join(output_folder, f"{pipe_number}.xlsx")
- # 设置已存在的 Sheet 名称
- existing_sheets = set()
- # 创建新的 Excel 工作簿
- new_wb = Workbook()
- # 删除默认生成的第一个Sheet
- default_sheet = new_wb.active
- new_wb.remove(default_sheet)
- # 遍历与该管线号对应的所有工艺卡编号
- for process_card in df_merge.loc[df_merge['管线号'] == pipe_number, '工艺卡编号'].unique():
- template_path = os.path.join(template_folder, f"{process_card}.xlsx")
- if os.path.exists(template_path):
- wb_template = load_workbook(template_path)
- sheet_name = process_card
- # 确保 Sheet 名称唯一
- suffix = 1
- while sheet_name in existing_sheets:
- sheet_name = f"{process_card}_{suffix}"
- suffix += 1
- # 获取模版的第一个sheet
- template_sheet = wb_template.active
-
- # 创建一个新的工作表
- new_sheet = new_wb.create_sheet(title=sheet_name)
- # 复制数据
- for row in template_sheet.iter_rows(values_only=True):
- new_sheet.append(row) # 将每一行的数据添加到新的工作表中
- existing_sheets.add(sheet_name)
- else:
- print(f"模板文件 {process_card}.xlsx 不存在,请检查路径!")
- # 保存新文件
- new_wb.save(new_file_path)
- print(f"已创建: {new_file_path} 包含模版: {existing_sheets}")
- print("所有文件处理完成!")
复制代码
### 修改点说明:
1. **处理多个工艺卡**:在 `for process_card in df_merge.loc[df_merge['管线号'] == pipe_number, '工艺卡编号'].unique():` 这一行,确保根据当前管线号过滤出所有对应的工艺卡编号,这样就能为每个工艺卡生成相应的工作表了。
2. **确认生成文件夹路径**:在创建 `new_file_path` 时使用的是 `os.path.join(output_folder, f"{pipe_number}.xlsx")`,确保生成文件的路径是你指定的 `output_folder`。
请尝试运行这个修改后的代码,看看这次是否能正确生成多个工艺卡以及是否能成功保存到指定的文件夹中。如果还有其他疑问,随时告诉我!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。