gpt4 book ai didi

python - 如何防止 Excel/XlsxWriter 在我的公式中随机添加 @ 字符

转载 作者:行者123 更新时间:2023-12-04 20:23:12 26 4
gpt4 key购买 nike

上下文

我使用 将一些数据写入 xlsx 文件代码。
我需要用计算特定列(包含时间值)的平均值的公式填充单元格。

问题描述

我注意到,当我尝试使用 Excel 打开我的文档时,它会自动在我的范围之前添加一个“@”符号,这使得我的公式计算失败...
如果我手动删除这个额外的“@”,该公式将按预期完美运行。

像这样手动修复我的公式真的很烦人,因为我有很多类似的平均计算因此而被破坏。
我读到是 Excel 添加了它,因此似乎没有办法使用 xlsxwriter API 从我的 python 代码中以编程方式防止这种不良行为。

问题

有人知道是否有办法阻止 Excel 对我的公式进行任何修改吗?

到目前为止我尝试了什么

我已经尝试过 "protect"我所有的工作表(将它们设置为只读)但它似乎只适用于用户,不适用于 Excel...


示例

这是我的问题的一个例子(为了让这些纯文本负载更容易理解)。

在我的 python 代码中,如果我编写以下公式:

=AVERAGE(TIMEVALUE(B2:B8))

打开文档后,Excel自动修改公式为:

=AVERAGE(TIMEVALUE(@B2:B8))

使得计算结果变为:

#VALUE!

如果我通过手动恢复我的公式(手动编辑单元格并删除“@”)撤消 Excel 所做的操作,我将得到我预期的所需计算平均值。

最佳答案

一般情况下,如果 Excel 在 XlsxWriter 编写的公式中插入 @,则表示该公式是一个数组公式,应该使用 worksheet.write_array_formula() 编写(尽管有一些注意事项,请参阅下文)。

因此,对于您的示例的变体:

import xlsxwriter

workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet()

worksheet.write_array_formula('A1', '=AVERAGE(TIMEVALUE(B1:B6))')

worksheet.write_column('B1', ['2:30'] * 6)

workbook.close()

输出:

enter image description here

但是,最新版本的 Excel 引入了动态公式和动态数组。我想你在这里看到的是 Implicit intersection operator: @ . 我目前正在努力支持 XlsxWriter 中的动态公式和数组,但仍在调查中

更新

从 2021 年 5 月的 1.4.1 版开始,XlsxWriter 支持 dynamic arrays所以上面的示例可以更改为使用 write_dynamic_array_formula() ,如下所示:

worksheet.write_dynamic_array_formula('A1', '=AVERAGE(TIMEVALUE(B1:B6))')

这将在 Excel 365 中给出以下输出(注意它不再有 @ 或数组公式大括号 {}):

enter image description here

关于python - 如何防止 Excel/XlsxWriter 在我的公式中随机添加 @ 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67165910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com