Google Sheets防止在运行AppsScript时更改公式目标



我在谷歌工作表上附加了一个应用程序脚本。该功能类似于基本数据输入-当我在A1(onEdit()(中输入值时,在A4处添加一个新单元格(列单元格下移(,并将A1中的值移动到A4。

当新数据输入A1时,列数据继续向下增长,内容从A4开始,最新的条目在顶部。

function onEdit(e) {
var range = e.range;
if (range.getRow() == 1.0) {
var targetRange = e.range.offset(3, 0);
targetRange.insertCells(SpreadsheetApp.Dimension.ROWS);
range.moveTo(targetRange);
}
}

此外,在B列中,我有一个公式,应该报告a列中相邻字符串的长度。因此,B4处的单元格将使用以下公式报告A4处字符串的长度:

=LEN($A$4)

问题是,即使公式中有$,每次运行我的AppsScript(当我将数据输入A1时(,公式都会发生变化。所以=LEN($A$4)变成=LEN($A$5)变成=LEN($A$6)等等……当我继续输入数据时,没有新的单元格

如何防止这种情况发生

我确实有一个解决办法,那就是也在AppsScript中创建公式,但我仍然想知道这种行为是否可以预防。解决方法:

function onEdit(e) {
var range = e.range;
if (range.getRow() == 1.0 && ((range.getColumn() - 1) % 3 == 0)) {
if (range.getValue() !== "") {
var targetRange = e.range.offset(3, 0);
var nextCol = targetRange.offset(0, 1);
targetRange.insertCells(SpreadsheetApp.Dimension.ROWS);
nextCol.insertCells(SpreadsheetApp.Dimension.ROWS);
range.moveTo(targetRange);
nextCol.setFormulaR1C1("=LEN(R[0]C[-1])");
}
}
}

也许可以试试

=LEN(INDIRECT("A4"))

参考:

  • 间接

最新更新