google-apps-script - 将公式设置为多个单元格脚本 - 必须有更有效的方法
问题描述
在 Google 表格中,我想将以下公式应用于 A2、A14、A26 和 A28,并将另一个公式应用于 B2、B14、B26 和 B28。现在我只做以下4次。它有效,但它并不漂亮。我怎样才能更有效地做到这一点?
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
sheets[7].setName('.NCF');
var sheet = ss.getSheets()[5];
var cell1a = sheet.getRange("A2");
cell1a.setFormula("=iferror(IF(QUERY('.NCF'!A2, \"where A contains '1ST'\")<>\"\", 1, ),\"\")");
var cell1b = sheet.getRange("A14");
cell1a.setFormula("=iferror(IF(QUERY('.NCF'!A14, \"where A contains '1ST'\")<>\"\", 1, ),\"\")");
var cell1c = sheet.getRange("A26");
cell1c.setFormula("=iferror(IF(QUERY('.NCF'!A26, \"where A contains '1ST'\")<>\"\", 1, ),\"\")");
var cell1d = sheet.getRange("A38");
cell1d.setFormula("=iferror(IF(QUERY('.NCF'!A38, \"where A contains '1ST'\")<>\"\", 1, ),\"\")");
var cell2a = sheet.getRange("B2");
cell2a.setFormula("=iferror(if(A2=1,query('.NCF'!A:A,\"Select A where A contains '( G54.1P'\"),\"\"),\"\")");
var cell2b = sheet.getRange("B14");
cell2a.setFormula("=iferror(if(A14=2,query('.NCF'!A:A,\"Select A where A contains '( G54.1P'\"),\"\"),\"\")");
var cell2c = sheet.getRange("B26");
cell2a.setFormula("=iferror(if(A26=3,query('.NCF'!A:A,\"Select A where A contains '( G54.1P'\"),\"\"),\"\")");
var cell2d = sheet.getRange("B38");
cell2a.setFormula("=iferror(if(A38=4,query('.NCF'!A:A,\"Select A where A contains '( G54.1P'\"),\"\"),\"\")");
}
解决方案
使用Array.forEach循环遍历行号和列字母。
使用模板文字创建要设置的公式。
function onEdit(e) {
const ss = e.source;
const sheets = ss.getSheets();
sheets[7].setName('.NCF');
const sheet = sheets[5];
let a1;
['A', 'B'].forEach(column =>
[2, 14, 26, 38].forEach((row, i) =>
sheet
.getRange((a1 = column + row))
.setFormula(
column === 'A'
? `=IFERROR(IF(QUERY('.NCF'!${a1}, "WHERE A CONTAINS '1ST'")<>"",1,))`
: `=IFERROR(IF(A${row}=${i +
1},QUERY('.NCF'!A:A,"SELECT A WHERE A CONTAINS '( G54.1P'"),))`
)
)
);
}
另请参阅三元运算符。
推荐阅读
- scala - 如何在子查询scala spark中使用聚合函数
- python - 使用 Gunicorn 和 gevent 从 Heroku 上的 Flask 应用程序运行多个线程
- sql - SQL从多个字符串列创建row_number
- sql - 适用于 SQL Server CURSOR STATIC 的 Oracle 12 C 等效项
- javascript - PHP 扫描一个目录,并且对于找到的每个文件,在它自己的 DIV 元素中回显该文件的内容
- spring-cloud - 服务已在 Eureka 注册,但由于 DNS_PROBE_FINISHED_NXDOMAIN 而无法从浏览器访问
- digital-signature - 如果任何人都可以删除PE的数字签名并辞职,如何知道PE是原始的
- java - 如何准确测量 API POST 请求的响应时间
- mysql - 无法加载身份验证插件'caching_sha2_password' - MySql 和 Ruby on Rails
- tomcat - Tomcat 静态缓存“cacheTtl”