【发布时间】:2021-05-20 03:59:50
【问题描述】:
我有一个附加到 Google 表格的 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])");
}
}
}
【问题讨论】:
标签: google-apps-script google-sheets