如何在Google Apps Script中为插入行添加C*D乘积公式?
解决方案
可以直接在DATA_TO_WRITE数组里添加公式,但因插入行的行号是每个工作表的动态值,更可靠的方式是结合插入行号动态生成公式,以下是具体实现:
推荐实现方式(动态生成公式)
无需修改原DATA_TO_WRITE数组,在写入基础数据后,单独针对E列设置对应行的乘积公式:
const sss = SpreadsheetApp.getActive(); const SHEET_TO_GET = ['BOURGET', 'ALPINES MUSEUM DAV', 'BLOIS_MAQUETTE', 'BELVEDERE MUSEUM', 'BELVEDERE MUSEUM']; const DATA_TO_WRITE = [['2D', "MAREIKE", '50', '33.0'], ['PROJECT MANAGEMENT', "LOUISE", '50', '16.5'], ['PROJECT MANAGEMENT', "MAREIKE", '50', '6.0'], ['FABRICATION', "MAREIKE", '50', '6.0'], ['2D', "MAREIKE", '50', '31.5']]; SHEET_TO_GET.forEach((n, i) => { let sh = sss.getSheetByName(n); let col1 = sh.getRange("A1:A" + sh.getLastRow()).getValues().flat(); let nr = col1.indexOf("MATERIAL") + 1; sh.insertRowBefore(nr); // 写入A-D列的基础数据 sh.getRange(nr, 1, 1, DATA_TO_WRITE[i].length ).setValues([DATA_TO_WRITE[i]]); // 给E列设置乘积公式,用当前插入行号nr拼接 sh.getRange(nr, 5).setFormula(`=C${nr}*D${nr}`); // 也可使用PRODUCT函数:=PRODUCT(C${nr},D${nr}) });
关于直接修改DATA_TO_WRITE的说明
如果一定要在数组中预先添加公式,需要提前计算每个工作表的插入行号nr,再生成带对应行号的公式字符串存入数组,但这种方式需要额外遍历两次工作表(先算所有行号,再写入数据),不如动态生成公式简洁高效,不推荐使用。
关键注意点
- 公式中的行号必须与插入行的实际行号
nr完全对应,动态拼接能确保这一点 - 使用
setFormula单独设置公式,比在setValues中混合文本与公式的写法更直观,也能避免类型兼容问题
内容的提问来源于stack exchange,提问作者emilianoSala
相关产品推荐
相关产品推荐

