使用 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
写出来就可以了。这样,您就不会更改现有单元格。
我正在尝试使用 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
写出来就可以了。这样,您就不会更改现有单元格。