这是我的网络抓取代码的一小部分.

wb = xw.Book("jockeyclub.xlsx")
rc1 = wb.sheets['Race Card 1']

besttime = 7

rc1.range('S7').formula = f'=MIN(IF({besttime}1:{besttime}150<>"", {besttime}1:{besttime}150))'
    
rc1.range('AA7').formula = f'=MATCH(MIN(IF({besttime}1:{besttime}150<>"", {besttime}1:{besttime}150)), {besttime}1:{besttime}150, 0) + ROW({besttime}1) - 1'

它确实在单元格S7和AA7中打印了以下公式,但在中间添加了一个"@".

对于单元格S7,它打印

=MIN(IF(@BQ1:BQ150<>"", BQ1:BQ150))

对于单元格AA7,它打印

=MATCH(MIN(IF(@BQ1:BQ150<>"", BQ1:BQ150)), BQ1:BQ150, 0) + ROW(BQ1) - 1

由于中间的"@",两个公式都不起作用.它为什么会在那里,我如何通过代码消除它?

推荐答案

Range.Formula使用"隐式交集求值",这意味着公式不会在溢出数组的基础上求值.这就是为什么Excel在公式中的一个或多个位置插入"@"的原因.

Range.Formula2是插入公式的"数组版本".如果您使用它,只有在公式对Excel有意义的唯一方式下才应该插入"@"(甚至可能不是这样).

这个链接是微软对正在发生的事情的一个很好的解释.(在Microsoft文档家族中,人们不会期望以断开的链接结束,以上是对重要部分的总结.)

https://learn.microsoft.com/en-us/office/vba/excel/concepts/cells-and-ranges/range-formula-vs-formula2

我不能说你如何用你给你的问题加标签的各种语言/工具访问Range.Formula2(或任何其他"xxxx.xxxx2"函数),但我非常肯定它们都有方法.

Python相关问答推荐

如何在具有重复数据的pandas中对groupby进行总和,同时保留其他列

Matlab中是否有Python的f-字符串等效物

如何避免Chained when/then分配中的Mypy不兼容类型警告?

pyscript中的压痕问题

Python—从np.array中 Select 复杂的列子集

Stacked bar chart from billrame

将输入聚合到统一词典中

无法连接到Keycloat服务器

解决调用嵌入式函数的XSLT中表达式的语法移位/归约冲突

在Python中使用yaml渲染(多行字符串)

Python避免mypy在相互引用中从另一个类重定义类时失败

如何获取Python synsets列表的第一个内容?

判断Python操作:如何从字面上得到所有decorator ?

Pandas 数据帧中的枚举,不能在枚举列上执行GROUP BY吗?

Pandas:计数器的滚动和,复位

我怎么才能用拉夫分拣呢?

正在try 让Python读取特定的CSV文件

在一个数据帧中,我如何才能发现每个行号是否出现在一列列表中?

删除另一个div中的特定div容器

为什么fizzbuzz在两个数字的条件出现在一个数字的条件之后时不起作用?