请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Ellia.Duan SpreadJS 开发认证

超级版主

51

主题

4028

帖子

6203

积分

超级版主

Rank: 8Rank: 8

积分
6203

SpreadJS 认证SpreadJS 高级认证

Ellia.Duan SpreadJS 开发认证
超级版主   /  发表于:2024-6-3 17:30  /   查看:79  /  回复:0
本帖最后由 AlexZ 于 2024-6-5 17:34 编辑

在一些场景下,需要对一片区域进行公式设置与计算,而公式具有相似性。
image.png170669554.png
如上图所示,我们发现公式基本结构一致,而只有引用位置发生了变化。
而在公式中,我们有baseRow,baseColumn的用法,具体参考这篇文章:公式计算中的 BaseRow / BaseColumn 到底有什么用?
那么,我们是不是可以不用一个一个单元格设置公式,而是可以通过baseRow,baseColumn只设置一个公式,答案是肯定,那就是共享公式。


在共享公式前,我们先来看下不用共享公式,为每一个单元格设置公式的用法:
image.png55560301.png
如上图所示,A1、A2、A3分时是1,2,3 。
此时如果想为C1,C2,C3单元格赋值公式“=A1”,"=A2","=A3"。那么需要需要设置三次公式,如下图所示
image.png142360533.png
其api是
  1. sheet.getCell(row,col).formula('XXX')
复制代码

image.png961418762.png
观察上图,我们获取了一片区域D13 ,并为其设置公式“=A1”,并为第二个参数设置布尔值true ,其含义是设置共享公式。
点击D2单元格,其公式值是'=A2'
image.png582857360.png
点击D3单元格,其公式值是'=A3'。
所以通过设置此代码可以实现我们的需求
  1. sheet.getRange(0,3,3,1).formula('=A1',true)
复制代码


我们再来描述另一种场景:
如下图所示,我们有一个订单表
image.png132541503.png
其中E1单元格显示的是商品折扣,我们希望总价=单价*售价*折扣 ,所以通过上述共享公式方法为F3:F6赋值,结果如下


image.png962959594.png

代码执行后,如上图所示,我们发现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 时,公式将完全相同。
image.png541859130.png
那么,什么是混合引用呢?
如$A1(绝对列和相对行)、A$1(相对列和绝对行)

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

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部