google-apps-script - GAS/Google Sheets在insertRows、insertRowAfter、insertRowsAfter的应用中出错

标签 google-apps-script google-sheets

我尝试了几种方法来编码插入行,但它们反复给出错误的输出。
在电子表格中,当我在单元格 C2 中键入 IF 时,应在 C2 IF 之后插入一个空白行。这发生并且是正确的。但是当我随后在单元格 C3 中键入 IF 时,GAS 解释器在 C3 行插入了一个空行并将 C3 IF 推送到 C4。这不应该发生。它应该在 C3 IF 所在的行之后插入一个空白行,但它没有。当我使用 AND、WHEN 和 OR 时会发生同样的事情。每个都有不同的插入代码。 IF、AND、WHEN 和 OR 的行之间不应有任何空白行。有解决方案吗?
我在以下位置分享了我的简化 Google Sheet 和简化代码(一个最小的可重现示例):
https://docs.google.com/spreadsheets/d/11skN3VLxSqQOqT7NX6tXTUY6kFYivbr9w-Yn2pI4z1s/edit?usp=sharing
这是为便于分析而简化的代码:

function onEdit(e) {
  let c = e.range
  let cvalue = e.value;

  if (cvalue == "IF") {
    c.getSheet().insertRowAfter(c.rowStart);
  }
  if (cvalue == "AND") {
    c.getSheet().insertRows(c.rowStart + 1,1);
  }
  if (cvalue == "WHEN") {
    c.getSheet().insertRowsAfter(c.rowStart, 1);
  }
  if (cvalue == "OR") {
    c.getSheet().insertRowAfter(c.getRowIndex());
  }
}
我还附上了两张图片:第一张是应该发生的事情,另一张是错误的输出,因为 GAS 解释器出现故障:
correct output
wrong output

最佳答案

  • 这是一个网络用户界面错误,应通过菜单“帮助”>“帮助表改进”向 Google 表团队报告。您可以添加指向此答案的链接。

  • 事件顺序:
  • C2 处的选择
  • 用户输入 IF在 C2 中并按 Enter
  • 用户按下输入按钮后在 C3 处选择
  • 脚本激活并在 C2 后插入新行
  • 插入新行后,旧第 3 行现在是第 4 行
  • 选择应该在 C4(它在 C4),但显然,在 Web 用户界面上,所选边框(蓝色边框表示选择)位于新的第 3 行而不是旧的第 3 行,现在是第 4 行。
  • 用户不知道选择在 C4(因为 UI 谎称它在新的 C3)输入了一些东西,但现在,UI 识别出它是谎言,忏悔并在 C4 显示选择。

  • 解决方法:
  • 使用制表符代替输入
  • 创建新行后上下移动选择
  • 使用脚本( .activateAsCurrentCell() )自动选择上一行和新行,使 UI 快速无缝地重新悔改。

  • 解决方法脚本:
    function onEdit(e) {
      const c = e.range
      const cvalue = e.value;
      console.log({rg:c.getA1Notation(),e})
    
      if (cvalue == "IF") {
        c.getSheet().insertRowAfter(c.rowStart);
      }
      if (cvalue == "AND") {
        c.getSheet().insertRows(c.rowStart + 1,1);
      }
      if (cvalue == "WHEN") {
        c.getSheet().insertRowsAfter(c.rowStart, 1);
      }
      if (cvalue == "OR") {
        c.getSheet().insertRowAfter(c.getRowIndex());
      }
      if(/OR|WHEN|AND|IF/g.test(cvalue)){
       c.activateAsCurrentCell();
       SpreadsheetApp.flush();
       c.offset(1,0).activateAsCurrentCell()
      };
    }
    

    关于google-apps-script - GAS/Google Sheets在insertRows、insertRowAfter、insertRowsAfter的应用中出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69642336/

    相关文章:

    php - Google Api Php 客户端 - 电子表格权限错误

    arrays - 遍历 Google 表格单元格中的逗号分隔列表

    javascript - 如何在谷歌脚本中获取非空白单元格的范围

    javascript - 使用对象选择要运行的函数(动态)

    google-sheets - DATE Con​​version - Gregorian to Hijr in Google Sheet 日期转换

    regex - 是否可以编写另一个 ARRAYFORMULA 的 ARRAYFORMULA

    javascript - 如何从 Google 表格中的单元格获取值,以用作 Google 脚本中的数字变量

    javascript - 基于指南标记的多个条件(例如 x<a, x>b)在 Google Apps 脚本中的 setnumberformat()

    google-apps-script - 调试由发布请求触发的 Google Apps 脚本?

    google-apps-script - Google Apps 脚本 IP 地址