【问题标题】:Python with XLSXWRITER: spreadsheet overwritten带有 XLSXWRITER 的 Python:电子表格被覆盖
【发布时间】:2014-10-03 17:39:30
【问题描述】:

这是我的 Python 脚本使用 XLSXwriter 遵循的基本流程:

  1. 创建工作簿
  2. 创建工作表
  3. 定义格式
  4. 在第 1 行写入列标题(利用第 3 步中的格式)
  5. 在后续行中写入实际数据(无特殊格式)

我可以创建工作簿/工作表。然后,我定义格式并使用“COLUMN HEADERS”填充工作表第 1 行列 A:H,这表示将写入后续行的每一列的 DATA 类型。这样就成功了。

我的代码和问题描述如下:

# write column header information
if total_xls_records == 1:
    worksheet1.set_row(0, 15, header_format)
    worksheet1.set_column('A:H',30)
    worksheet1.write('A1', 'Hostname')
    worksheet1.write('B1', 'Serial')
    worksheet1.write('C1', 'Manufacturer')
    worksheet1.write('D1', 'Model')
    worksheet1.write('E1', 'RAM')
    worksheet1.write('F1', 'Flash')
    worksheet1.write('G1', 'Version')
    worksheet1.write('H1', 'SW_Image')
# write device data to spreadsheet
else:
    worksheet1.set_row(total_xls_records, 15)
    worksheet1.set_column('A:H',30)
    worksheet1.write('A2', data[0])
    worksheet1.write('B2', data[1])
    worksheet1.write('C2', data[2])
    worksheet1.write('D2', data[3])
    worksheet1.write('E2', data[4])
    worksheet1.write('F2', data[5])
    worksheet1.write('G2', data[6])
    worksheet1.write('H2', data[7])

我正在从列表中提取数据以填充我的单元格。这个 if/else 的结果是:

  1. 当我匹配“if”语句时,列标题会正确写入电子表格

如果我打开电子表格,我会看到 row1 列 A:H 正确填充并按照 header_format 格式化,列宽为 30。

  1. 当我随后匹配“else”语句时,电子表格被覆盖

如果我打开电子表格,我会看到 row1 完全为空(所有列标题/格式现在都消失了),并且 row2 正确填充了设备数据(无格式)。

显然,期望的行为是让 row1 与 COLUMN HEADERS 和 rows2 一起使用 DATA。我想将 DATA '追加'到 rows2 中的电子表格 - 无论 row1 是否已经被写入。

是的,我知道 else 语句当前调用单元格 (A2-H2) 的“静态列表”,这意味着 else 的多个匹配项当前会将 DATA 写入同一组单元格。它目前是这样写的,因为我正处于针对我刚才描述的问题的“故障排除模式”。对我来说,在重写我的“单元格填充”代码之前修复电子表格覆盖问题是有意义的。

提前感谢您提供的任何帮助。

【问题讨论】:

  • 所以我已经解决了我自己的问题并发布此评论以防它对其他人有所帮助。看起来 XLSXWRITER 会“一次性”编写电子表格。初始写入操作完成后,该文件本质上是“因业务而关闭”。一旦发生这种情况,任何后续的写入尝试似乎都会覆盖该文件。所以我的解决方案不是使用 if/else 循环,而是使用 for 循环遍历“列表列表”。我使用“for item in list”后跟“for item in item”来做到这一点。

标签: python overwrite xlsxwriter


【解决方案1】:

XlsxWriter 无法重写文件或重复保存到文件。

一旦调用workbook.close(),文件就会被写入并关闭。

【讨论】:

  • 是的,我就是这么想的。不知道 XLSXwriter 是否仍在开发或接受功能请求,但多写和读将很棒。我查看了几个用于编写电子表格的 python 模块...... XLSXwriter 有很好的文档,很容易理解,而且我可以立即使用它。希望看到这个模块得到进一步发展。
  • XlsxWriter 仍在开发中,新功能会定期推出。但是,没有计划添加读取/重写功能。这任务太大了。
  • 很公平。感谢您的直接回答。 :)
  • @jmcnamara。你好。我想你之前关于阅读/重写的评论仍然成立吗?提前致谢。
  • 是的。现在和未来仍然如此。
猜你喜欢
  • 2022-06-15
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 2021-01-19
  • 1970-01-01
相关资源
最近更新 更多