鱼C论坛

 找回密码
 立即注册
查看: 442|回复: 0

代码报错,老师们帮看下

[复制链接]
发表于 2024-7-26 15:12:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import pandas as pd
  2. import os
  3. from openpyxl import load_workbook, Workbook

  4. # 假设你的 DataFrame 已经创建为 df_merge
  5. df_merge = pd.read_excel("提取数据2.xlsx")

  6. # 模板文件夹路径
  7. template_folder = "D:/PYTHON_NEW/pythonProject/提取python excel/工艺卡模版"
  8. # 定义输出路径
  9. output_folder = "C:\\集中"

  10. # 确保输出文件夹存在
  11. os.makedirs(output_folder, exist_ok=True)

  12. # 遍历每一行
  13. for index, row in df_merge.iterrows():
  14.     pipe_number = row['管线号']  # 假设管线号在 DataFrame 中的列名是 '管线号'

  15.     # 创建新的 Excel 文件
  16.     new_file_path = os.path.join(output_folder, f"{pipe_number}.xlsx")

  17.     # 设置已存在的 Sheet 名称
  18.     existing_sheets = set()

  19.     # 创建新的 Excel 工作簿
  20.     new_wb = Workbook()
  21.     # 删除默认生成的第一个Sheet
  22.     default_sheet = new_wb.active
  23.     new_wb.remove(default_sheet)

  24.     # 遍历与该管线号对应的所有工艺卡编号
  25.     for process_card in df_merge.loc[df_merge == pipe_number, '工艺卡编号'].unique():
  26.         template_path = os.path.join(template_folder, f"{process_card}.xlsx")

  27.         if os.path.exists(template_path):
  28.             wb_template = load_workbook(template_path)
  29.             sheet_name = process_card

  30.             # 确保 Sheet 名称唯一
  31.             suffix = 1
  32.             while sheet_name in existing_sheets:
  33.                 sheet_name = f"{process_card}_{suffix}"
  34.                 suffix += 1

  35.             # 获取模版的第一个sheet
  36.             template_sheet = wb_template.active
  37.             new_sheet = new_wb.create_sheet(title=sheet_name)

  38.             # 复制数据和样式
  39.             for i, row in enumerate(template_sheet.iter_rows(values_only=False)):
  40.                 for j, cell in enumerate(row):
  41.                     new_cell = new_sheet.cell(row=i + 1, column=j + 1, value=cell.value)

  42.                     # 复制样式属性
  43.                     if cell.has_style:
  44.                         if cell.font is not None:
  45.                             new_cell.font = cell.font
  46.                         if cell.border is not None:
  47.                             new_cell.border = cell.border
  48.                         if cell.fill is not None:
  49.                             new_cell.fill = cell.fill
  50.                         new_cell.number_format = cell.number_format
  51.                         new_cell.protection = cell.protection
  52.                         if cell.alignment is not None:
  53.                             new_cell.alignment = cell.alignment

  54.             # 复制行高
  55.             for row in template_sheet.iter_rows():
  56.                 new_sheet.row_dimensions[row[0].row].height = row[0].row_height

  57.             # 复制合并单元格
  58.             for merged_range in template_sheet.merged_cells.ranges:
  59.                 new_sheet.merge_cells(str(merged_range))

  60.             # 复制图片
  61.             for img in template_sheet._images:
  62.                 new_sheet.add_image(img)

  63.             existing_sheets.add(sheet_name)
  64.         else:
  65.             print(f"模板文件 {process_card}.xlsx 不存在,请检查路径!")

  66.     # 保存新文件
  67.     new_wb.save(new_file_path)
  68.     print(f"已创建: {new_file_path} 包含模版: {existing_sheets}")

  69. print("所有文件处理完成!")
复制代码


代码报错如下
D:\PYTHON_NEW\pythonProject\.venv\Scripts\python.exe "D:\PYTHON_NEW\pythonProject\提取python excel\测试含图片的excel抽取工艺卡.py"
Traceback (most recent call last):
  File "D:\PYTHON_NEW\pythonProject\提取python excel\测试含图片的excel抽取工艺卡.py", line 33, in <module>
    for process_card in df_merge.loc[df_merge == pipe_number, '工艺卡编号'].unique():
                        ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\PYTHON_NEW\pythonProject\.venv\Lib\site-packages\pandas\core\indexing.py", line 1184, in __getitem__
    return self._getitem_tuple(key)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\PYTHON_NEW\pythonProject\.venv\Lib\site-packages\pandas\core\indexing.py", line 1368, in _getitem_tuple
    return self._getitem_lowerdim(tup)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\PYTHON_NEW\pythonProject\.venv\Lib\site-packages\pandas\core\indexing.py", line 1089, in _getitem_lowerdim
    return getattr(section, self.name)[new_key]
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "D:\PYTHON_NEW\pythonProject\.venv\Lib\site-packages\pandas\core\indexing.py", line 1191, in __getitem__
    return self._getitem_axis(maybe_callable, axis=axis)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\PYTHON_NEW\pythonProject\.venv\Lib\site-packages\pandas\core\indexing.py", line 1418, in _getitem_axis
    raise ValueError("Cannot index with multidimensional key")
ValueError: Cannot index with multidimensional key

Process finished with exit code 1

老师帮看下,太长了,吓人
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-20 02:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表