使用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
错误原因
- 新建
Workbook时会默认创建一个名为Sheet的活动工作表,你在循环中反复修改这个同一个工作表的标题,最终它的名字会被覆盖为列表最后一个元素name4 - 每次调用
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
相关产品推荐
相关产品推荐

