使用 xlwings 快速写入 xlsm

Posted

技术标签:

【中文标题】使用 xlwings 快速写入 xlsm【英文标题】:Fast writing to xlsm with xlwings 【发布时间】:2021-01-04 15:52:04 【问题描述】:

我正在尝试使用 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() 方法中简单地不返回任何值仍会擦除单元格的内容。

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于使用 xlwings 快速写入 xlsm的主要内容,如果未能解决你的问题,请参考以下文章

模块“xlwings”没有属性“书”

问题使用 xlwings操作Excel表报错

Python 更棒的Excel操作模块xlwings

xlwingsapi要如何导入

通过python,将excel中的数据写入二维列表

使用 Python 3 的 xlwings 问题