Ellia.Duan 发表于 2024-6-3 17:30:04

电子表格中的共享公式(SharedFormula)

本帖最后由 AlexZ 于 2024-6-5 17:34 编辑

在一些场景下,需要对一片区域进行公式设置与计算,而公式具有相似性。

如上图所示,我们发现公式基本结构一致,而只有引用位置发生了变化。
而在公式中,我们有baseRow,baseColumn的用法,具体参考这篇文章:公式计算中的 BaseRow / BaseColumn 到底有什么用?
那么,我们是不是可以不用一个一个单元格设置公式,而是可以通过baseRow,baseColumn只设置一个公式,答案是肯定,那就是共享公式。


在共享公式前,我们先来看下不用共享公式,为每一个单元格设置公式的用法:

如上图所示,A1、A2、A3分时是1,2,3 。
此时如果想为C1,C2,C3单元格赋值公式“=A1”,"=A2","=A3"。那么需要需要设置三次公式,如下图所示

其api是sheet.getCell(row,col).formula('XXX')

观察上图,我们获取了一片区域D1:D3 ,并为其设置公式“=A1”,并为第二个参数设置布尔值true ,其含义是设置共享公式。
点击D2单元格,其公式值是'=A2'

点击D3单元格,其公式值是'=A3'。
所以通过设置此代码可以实现我们的需求sheet.getRange(0,3,3,1).formula('=A1',true)

我们再来描述另一种场景:
如下图所示,我们有一个订单表

其中E1单元格显示的是商品折扣,我们希望总价=单价*售价*折扣 ,所以通过上述共享公式方法为F3:F6赋值,结果如下




代码执行后,如上图所示,我们发现F4,F5,F6单元格与我们预期不符,具体点击单元格看到F4公式为"=C4*D4*E2"
而我们预期的公式是"=C4*D4*E1" ,那这时候怎么办呢?

别着急,在开始介绍解决方案前,我先给大家介绍下Excel的相对引用,绝对引用,和混合引用。如果了解这一部分的内容,可以直接跳到最后看方案。
在Excel中,默认情况下,单元格引用是相对引用,这意味着引用相对于单元格的位置。 例如,如果引用单元格 C2 中的单元格 A2,则实际上引用的是左侧 (C 减去 A) 的两列的单元格,该行 (2) 。 复制包含相对单元格引用的公式时,公式中的引用将更改。

例如,如果将公式 =B4*C4 从单元格 D4 复制到 D5,则 D5 中的公式将按一列向右调整,并变为 =B5*C5。 如果要在复制时保留此示例中的原始单元格引用,则通过在 B 和 C () 列和行 (2) 列前面加上美元符号 ($) ,使单元格引用成为绝对值。 然后,将公式 =$B$4*$C$4 从 D4 复制到 D5 时,公式将完全相同。

那么,什么是混合引用呢?
如$A1(绝对列和相对行)、A$1(相对列和绝对行)

我们再回到场景二的问题中,那么如何正确设置公式呢?
sheet.getRange(2,5,4,1).formula('=C3*D3*$E$1',true)执行后,观察下图,已经是我们想要的结果了

页: [1]
查看完整版本: 电子表格中的共享公式(SharedFormula)