【发布时间】:2014-10-03 17:39:30
【问题描述】:
这是我的 Python 脚本使用 XLSXwriter 遵循的基本流程:
- 创建工作簿
- 创建工作表
- 定义格式
- 在第 1 行写入列标题(利用第 3 步中的格式)
- 在后续行中写入实际数据(无特殊格式)
我可以创建工作簿/工作表。然后,我定义格式并使用“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 的结果是:
- 当我匹配“if”语句时,列标题会正确写入电子表格
如果我打开电子表格,我会看到 row1 列 A:H 正确填充并按照 header_format 格式化,列宽为 30。
- 当我随后匹配“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