【问题标题】:XlsxWriter: Creating new worksheetsXlsxWriter:创建新工作表
【发布时间】:2015-05-25 13:07:56
【问题描述】:

我正在尝试使用 XlsxWriter 创建新工作表,以便在循环的每次新迭代中将数据写入新工作表。

我的代码如下:

workbook = xlsxwriter.Workbook('Report.xlsx')
for i in range(0, len(list)):
    worksheet = workbook.add_worksheet()
    #Extract data from the list and add it to the excel sheet
    workbook.close()

现在,这种方法的问题是我只能看到一个工作表,而不是多个工作表。

我哪里错了?

【问题讨论】:

  • 试试workbook.add_worksheet(i),看看你是否得到了不同名称的工作表
  • 你想同时处理多张工作表
  • @VigneshKalai 每次迭代,我都想写一个新的工作表。
  • 正如@Vaulstein 所说,您可以使用整数添加工作表作为工作表名称,或者您可以使用 worksheet = workbook.add_worksheet() 添加新工作表,它会自动将名称命名为工作表 1、工作表 2,就像 excel 一样
  • 尝试在 for 循环外关闭,如果这不起作用,请尝试在 workbook.close() 之前在 for 循环外添加测试表

标签: python excel worksheet-function xlsxwriter


【解决方案1】:

根据评论的更正,即使 XlsxWriter API 允许在修改之间关闭工作簿,它也只会在第一次关闭之前写入更改。

import xlsxwriter
import openpyxl

workbook = xlsxwriter.Workbook('test.xlsx')
for i in range(10):
    workbook.add_worksheet()
    workbook.close()
assert len(workbook.worksheets()) == 10
assert len(openpyxl.load_workbook('test.xlsx').sheetnames) == 1

workbook = xlsxwriter.Workbook('test.xlsx')
for i in range(10):
    workbook.add_worksheet()
workbook.close()
assert len(workbook.worksheets()) == 10
assert len(openpyxl.load_workbook('test.xlsx').sheetnames) == 10

在所有工作簿修改之后,您需要将 workbook.close() 移出循环:

workbook = xlsxwriter.Workbook('Report.xlsx')
for i in range(0, len(list)):
    worksheet = workbook.add_worksheet()
    #Extract data from the list and add it to the excel sheet
workbook.close()

【讨论】:

  • 可以在中间关闭工作簿的同时继续添加工作表等::严格来说不是。该对象可能包含 10 个工作表,就像您的断言一样,但该文件将仅包含 1 个。工作簿应该只关闭一次。
  • @jmcnamara 你说得对,先生。结果文件确实只有一张纸,即使模型允许进一步修改。跛脚的我会自动期望这种一致性。
  • 或者也许我很蹩脚,不让多次关闭成为异常或警告。 :-|
猜你喜欢
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-31
相关资源
最近更新 更多