You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用openpyxl在for循环中生成错误工作表名称,求排查原因

问题分析:OpenPyXL 创建工作表名称不符合预期

原代码

import os
import sys
my_path = 'C:/Users/S.Fazlollahzadeh/Desktop/shell-scripts/test only/excel'
os.chdir(my_path)
sys.path.append(my_path)
from openpyxl import Workbook

names = ['name1', 'name2', 'name3', 'name4']
wb = Workbook()
ws = wb.active

for name in names:
        ws.title = name
        wb.create_sheet(name)

wb.save("sample.xlsx")
quit()

实际生成的工作表名称

name4
name11
name21
name31
name41

预期的工作表名称

name1
name2
name3
name4

错误原因

  1. 新建Workbook时会默认创建一个名为Sheet的活动工作表,你在循环中反复修改这个同一个工作表的标题,最终它的名字会被覆盖为列表最后一个元素name4
  2. 每次调用wb.create_sheet(name)时,因为当前工作簿中已经存在同名工作表(你刚把活动表改成这个名字),openpyxl会自动在名称后添加数字来避免重复,于是生成了name11、name21这类带后缀的名称

修正方案

方案一:复用默认工作表,创建剩余表

把默认的活动工作表命名为列表第一个名称,再循环创建剩下的工作表:

import os
import sys
my_path = 'C:/Users/S.Fazlollahzadeh/Desktop/shell-scripts/test only/excel'
os.chdir(my_path)
sys.path.append(my_path)
from openpyxl import Workbook

names = ['name1', 'name2', 'name3', 'name4']
wb = Workbook()
ws = wb.active
# 将默认工作表命名为第一个名称
ws.title = names[0]
# 循环创建剩余名称的工作表
for name in names[1:]:
    wb.create_sheet(name)

wb.save("sample.xlsx")

方案二:删除默认工作表,重新创建所有表

先删除默认的Sheet,再循环创建所有需要的工作表:

import os
import sys
my_path = 'C:/Users/S.Fazlollahzadeh/Desktop/shell-scripts/test only/excel'
os.chdir(my_path)
sys.path.append(my_path)
from openpyxl import Workbook

names = ['name1', 'name2', 'name3', 'name4']
wb = Workbook()
# 删除默认的空白工作表
wb.remove(wb.active)
# 循环创建所有名称的工作表
for name in names:
    wb.create_sheet(name)

wb.save("sample.xlsx")

内容的提问来源于stack exchange,提问作者Saeed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:33:20