如何使用Python及openpyxl库写入带指定表名的Excel多工作表
问题根因
原代码的核心错误是错误覆盖了工作表的引用变量:
- 初始化
openpyxl.Workbook()时,会自动生成一个名为'Sheet'的默认工作表,该表默认处于活跃状态 - 完成
ws1 = workbook.create_sheet('ONE')、ws2 = workbook.create_sheet('TWO')的创建操作后,两个变量本来分别对应'ONE'、'TWO'两个自定义工作表 - 后续两行
ws1 = workbook.active、ws2 = workbook.active,直接把ws1、ws2的引用全部替换为那个默认活跃的'Sheet'表。之前创建的'ONE'、'TWO'工作表因为失去了操作入口,没有写入任何内容,最终显示为空表 - 后续所有针对ws1、ws2的单元格写入操作,全部作用在同一个默认活跃表上,这就是为什么最终生成的文件里只有一个存储了ws2全部内容的工作表
修正方案
- 删除错误的两次
workbook.active赋值语句,保留create_sheet返回的正确工作表引用 - 可直接移除新建工作簿时自动生成的默认空表,避免产生冗余的Sheet页
修正后可正常运行的代码
import openpyxl workbook = openpyxl.Workbook() # 删除自动生成的默认空工作表 workbook.remove(workbook.active) ws1 = workbook.create_sheet('ONE') ws2 = workbook.create_sheet('TWO') # 向ONE工作表写入测试内容 ws1['A1'] = 'ID' ws1['B1'] = 'Text' ws1['C1'] = 'Category' ws1['A2'] = '234' ws1['B2'] = 'Sample' ws1['C2'] = 'ASD' # 向TWO工作表写入测试内容 ws2['A1'] = 'ID' ws2['B1'] = 'Text' ws2['C1'] = 'Category' ws2['A2'] = '566' ws2['B2'] = 'Sample' ws2['C2'] = 'PED' ws2['A3'] = '896' ws2['B3'] = 'SAmple' ws2['C3'] = 'HEAD' workbook.save('sam.xlsx')
内容的提问来源于stack exchange,提问作者sinG20
相关产品推荐
相关产品推荐

