【问题标题】:Google Sheets Prevent Formula Target Changing when AppsScript RunsGoogle 表格防止在 AppsScript 运行时更改公式目标
【发布时间】: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


    【解决方案1】:

    不妨试试

    =LEN(INDIRECT("A4"))
    

    参考:

    【讨论】:

    • 这确实可以防止这种行为。知道是否有一种方法可以合并它,并且在向下拖动以填充时也允许自动递增?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多