本帖最后由 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')
复制代码
观察上图,我们获取了一片区域D13 ,并为其设置公式“=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)
复制代码 执行后,观察下图,已经是我们想要的结果了
|
|