使用 xlwings 快速写入 xlsm

问题描述

我正在尝试使用 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 工作表。 问题在于,每次我在写出过程中点击“无”时,它都会擦除相关单元格的内容(例如 A3)。

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

PS:我编写了一个here 描述的自定义转换器,但如果值为“无”,则在 write_value() 方法中不返回任何值仍会擦除单元格的内容

解决方法

您需要读取整个范围,然后在 Python 端更改您想要的值并将其写回。如果您的范围包含公式,您可以使用 myrange.formula 属性读取公式 - 可以再次通过 .value 写出它们。这样,您就不会更改现有单元格。