openpyxl循环创建多Excel表格报错表名已存在,求排查原因
问题原因与解决方案
你的代码使用了嵌套循环,外层遍历两个工作表,内层遍历两个表名,这会导致:
- 先给
Total - Chickens工作表添加TotalChickensTable和TotalCOWSTable两个表 - 接着尝试给
Total - COWS工作表添加TotalChickensTable时,由于Excel工作簿内的表名是全局唯一的(与所在工作表无关),此时TotalChickensTable已经存在,直接触发报错,循环根本没机会执行到给第二个工作表添加TotalCOWSTable的步骤。
解决方案
让每个工作表对应唯一的表名,用zip()把工作表列表和表名列表配对,替换嵌套循环为单层循环:
修改后的代码:
from openpyxl.utils import get_column_letter from openpyxl.worksheet.table import Table, TableStyleInfo chickensTotal = Report_workbook['Total - Chickens'] cowsTotal = Report_workbook['Total - COWS'] totalSheets = [chickensTotal, cowsTotal] totalTableList = ['TotalChickensTable', 'TotalCOWSTable'] # 用zip配对工作表和对应的表名 for sheet, table_name in zip(totalSheets, totalTableList): table_ref = f"A7:{get_column_letter(sheet.max_column)}{sheet.max_row}" tableParameters = Table(displayName=table_name, ref=table_ref) style = TableStyleInfo(name="TableStyleMedium16", showFirstColumn=False, showLastColumn=False, showRowStripes=True, showColumnStripes=False) tableParameters.tableStyleInfo = style sheet.add_table(tableParameters)
这样每个工作表只会添加对应的唯一表名,不会出现重复,就能正常创建两个目标表格。
内容的提问来源于stack exchange,提问作者jubilee
相关产品推荐
相关产品推荐

