使用 xlwings 快速写入 xlsm

Fast writing to xlsm with xlwings

我正在尝试使用 xlwings 0.20.2 将一些浮点数和字符串写入 xlsm 文件。

尽管以下工作正常,但我希望它更快:

sht.range('A1').options(transpose=True).value = [float1, float2]
sht.range('B7').value = string1
sht.range('A4').options(transpose=True).value = [string2, float3]
...

我已经认出来了

sht.range('A1').options(transpose=True).value = [float1, float2]

sht.range('A1').value = float1
sht.range('A2').value = float2

因此我的想法是将所有浮点数和字符串收集到一个列表列表中:

output = [[None] * 8, [None] * 8]
output[0][0] = float1
output[0][1] = float2
output[1][8] = string1
... 

并将其写入 Excel sheet。

问题在于,每次我在写出过程中点击 None 时,它都会擦除相关单元格的内容(例如 A3)。

您有什么避免这种情况的建议或替代方法的想法吗?正如我所说,这完全是关于性能的要求。

我写了一个自定义转换器,就像 here 中描述的那样,但它只是在 write_value() 方法中不返回任何值,如果值为 None,它仍然会擦除单元格的内容。

您需要读取整个范围,然后在 Python 一侧更改您想要的值并将其写回。如果你的范围内有公式,你可以用myrange.formula属性读出公式——再用.value写出来就可以了。这样,您就不会更改现有单元格。