将单元格值添加到范围的公式仅使用第一个值
Adding the cell value to a formula for a range just uses the first value
我只是想在后续步骤中轻松地进行查找和替换。否则,没有理由这样做。
我正在尝试获取单元格区域的值并将它们放入公式中。例如:
=VLOOKUP($A2,IMPORTRANGE("<placeholder_value>","Sheet!A:B"),2,0)
所以如果我有一个像下面这样的 table:
| id | group | formula |
| -- | ------ | ------- |
| 1 | GROUP1 | |
| 2 | GROUP1 | |
| 3 | GROUP1 | |
| 4 | GROUP1 | |
| 5 | GROUP1 | |
| 6 | GROUP2 | |
| 7 | GROUP2 | |
| 8 | GROUP2 | |
| 9 | GROUP2 | |
| 10 | GROUP2 | |
我希望 id <=5
的公式为:
=VLOOKUP($A2,IMPORTRANGE("GROUP1","Sheet!A:B"),2,0)
我希望 id >5
的公式为:
=VLOOKUP($A2,IMPORTRANGE("GROUP2","Sheet!A:B"),2,0)
然后当我为 GROUP1
和 GROUP2
生成单独的文件时,我可以在 MASTER
中找到一个替换为实际文档 ID 和 link 文档通过 VLOOKUP
这样 GROUP1
和 GROUP2
中的更新反映在 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
循环来完成我想要的,但一开始尽量避免这样做,因为这会减慢自动化速度。
关于如何完成此任务有什么建议吗?
我相信你的目标如下。
您想通过降低流程成本来转换以下情况。
来自
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)
根据您的脚本,我认为您的脚本可能是作为 Class 中的方法创建的。如果我的理解是正确的,下面的修改怎么样?
发件人:
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
是“group”列时,=VLOOKUP($A2,IMPORTRANGE("${v}","Sheet!A:B"),2,0)
的公式是使用“group”列的值创建的。
参考文献:
我只是想在后续步骤中轻松地进行查找和替换。否则,没有理由这样做。
我正在尝试获取单元格区域的值并将它们放入公式中。例如:
=VLOOKUP($A2,IMPORTRANGE("<placeholder_value>","Sheet!A:B"),2,0)
所以如果我有一个像下面这样的 table:
| id | group | formula |
| -- | ------ | ------- |
| 1 | GROUP1 | |
| 2 | GROUP1 | |
| 3 | GROUP1 | |
| 4 | GROUP1 | |
| 5 | GROUP1 | |
| 6 | GROUP2 | |
| 7 | GROUP2 | |
| 8 | GROUP2 | |
| 9 | GROUP2 | |
| 10 | GROUP2 | |
我希望 id <=5
的公式为:
=VLOOKUP($A2,IMPORTRANGE("GROUP1","Sheet!A:B"),2,0)
我希望 id >5
的公式为:
=VLOOKUP($A2,IMPORTRANGE("GROUP2","Sheet!A:B"),2,0)
然后当我为 GROUP1
和 GROUP2
生成单独的文件时,我可以在 MASTER
中找到一个替换为实际文档 ID 和 link 文档通过 VLOOKUP
这样 GROUP1
和 GROUP2
中的更新反映在 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
循环来完成我想要的,但一开始尽量避免这样做,因为这会减慢自动化速度。
关于如何完成此任务有什么建议吗?
我相信你的目标如下。
您想通过降低流程成本来转换以下情况。
来自
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)
根据您的脚本,我认为您的脚本可能是作为 Class 中的方法创建的。如果我的理解是正确的,下面的修改怎么样?
发件人:
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
是“group”列时,=VLOOKUP($A2,IMPORTRANGE("${v}","Sheet!A:B"),2,0)
的公式是使用“group”列的值创建的。