【问题标题】:Adding the cell value to a formula for a range just uses the first value将单元格值添加到范围的公式仅使用第一个值
【发布时间】:2021-12-05 17:25:33
【问题描述】:

我想要做的只是为了在后续步骤中轻松进行查找和替换。否则,没有理由这样做。

我正在尝试获取单元格区域的值并将它们放入公式中。例如:

=VLOOKUP($A2,IMPORTRANGE("<placeholder_value>","Sheet!A:B"),2,0)

所以,如果我有如下表格:

| id | group  | formula |
| -- | ------ | ------- |
| 1  | GROUP1 |         |
| 2  | GROUP1 |         |
| 3  | GROUP1 |         |
| 4  | GROUP1 |         |
| 5  | GROUP1 |         |
| 6  | GROUP2 |         |
| 7  | GROUP2 |         |
| 8  | GROUP2 |         |
| 9  | GROUP2 |         |
| 10 | GROUP2 |         |

我希望id &lt;=5 的公式为:

=VLOOKUP($A2,IMPORTRANGE("GROUP1","Sheet!A:B"),2,0)

我希望id &gt;5 的公式为:

=VLOOKUP($A2,IMPORTRANGE("GROUP2","Sheet!A:B"),2,0)

然后,当我为 GROUP1GROUP2 生成单独的文件时,我可以在 MASTER 中找到替换为实际文档 ID 并通过 VLOOKUP 链接文档,以便在 GROUP1 和 @987654332 中进行更新@ 反映在 MASTER 中。 这是一个过于简单的例子。

所以我到目前为止所做的尝试是:

let placeholderRange = this.sheet.getRange(2, this.groupColumn, this.lastRow - 1, 1);
let formula = '=' + placeholderRange.getValue();
// let formula = '=' + placeholderRange.getValues(); 
// let formula = '=' + placeholderRange.getDisplayValue();
// let formula = '=' + placeholderRange.getDisplayValues();
formulaRange.setFormula(formula);

.getValue().getDisplayValue() 的情况下,它只使用它找到的第一个值,因此它会将GROUP1 放在每个公式中,而不是在到达这些记录时更改为GROUP2

对于.getValues().getDisplayValues(),它只是将该范围内的所有值的数组添加到公式中。

我可以使用for 循环来完成我想要做的事情,但最初尝试避免这种情况,因为这会减慢自动化速度。

对如何实现这一点有什么建议吗?

【问题讨论】:

  • 我是否正确阅读了这一点,唯一的问题是您想要动态引用文档,具体取决于组?
  • 虽然我不确定我是否能正确理解你的问题,但我提出了一个修改后的脚本作为答案。你能确认一下吗?如果我误解了您的问题并且没有用,我深表歉意。

标签: google-apps-script google-sheets google-sheets-formula


【解决方案1】:

我相信你的目标如下。

  • 您想通过降低流程成本来转换以下情况。

    • 来自

        id  group   formula
        1   GROUP1
        2   GROUP1
        3   GROUP1
        4   GROUP1
        5   GROUP1
        6   GROUP2
        7   GROUP2
        8   GROUP2
        9   GROUP2
        10  GROUP2
      
    •   id  group   formula
        1   GROUP1  =VLOOKUP($A2,IMPORTRANGE("GROUP1","Sheet!A:B"),2,0)
        2   GROUP1  =VLOOKUP($A2,IMPORTRANGE("GROUP1","Sheet!A:B"),2,0)
        3   GROUP1  =VLOOKUP($A2,IMPORTRANGE("GROUP1","Sheet!A:B"),2,0)
        4   GROUP1  =VLOOKUP($A2,IMPORTRANGE("GROUP1","Sheet!A:B"),2,0)
        5   GROUP1  =VLOOKUP($A2,IMPORTRANGE("GROUP1","Sheet!A:B"),2,0)
        6   GROUP2  =VLOOKUP($A2,IMPORTRANGE("GROUP2","Sheet!A:B"),2,0)
        7   GROUP2  =VLOOKUP($A2,IMPORTRANGE("GROUP2","Sheet!A:B"),2,0)
        8   GROUP2  =VLOOKUP($A2,IMPORTRANGE("GROUP2","Sheet!A:B"),2,0)
        9   GROUP2  =VLOOKUP($A2,IMPORTRANGE("GROUP2","Sheet!A:B"),2,0)
        10  GROUP2  =VLOOKUP($A2,IMPORTRANGE("GROUP2","Sheet!A:B"),2,0)
      

根据您的脚本,我认为您的脚本可能是作为类中的方法创建的。如果我的理解是正确的,那么下面的修改呢?

发件人:

let placeholderRange = this.sheet.getRange(2, this.groupColumn, this.lastRow - 1, 1);
let formula = '=' + placeholderRange.getValue();
// let formula = '=' + placeholderRange.getValues(); 
// let formula = '=' + placeholderRange.getDisplayValue();
// let formula = '=' + placeholderRange.getDisplayValues();
formulaRange.setFormula(formula);

收件人:

const range = this.sheet.getRange(2, this.groupColumn, this.lastRow - 1, 1);
const formulas = range.getValues().map(([v]) => [`=VLOOKUP(\$A2,IMPORTRANGE("${v}","Sheet!A:B"),2,0)`]);
range.offset(0, 1, formulas.length, 1).setFormulas(formulas);
  • 在此修改后的脚本中,当this.groupColumn 是“组”列时,使用“组”列的值创建=VLOOKUP(\$A2,IMPORTRANGE("${v}","Sheet!A:B"),2,0) 的公式。

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多