Google表格 - 首次编辑指定列/数据验证后添加新行

时间:2016-05-05 19:45:15

标签: validation google-apps-script triggers google-sheets

我已经编写了下面的脚本,因此Sheets会自动插入一个新行并将公式复制到该新行。

我已经指定我希望只有在对第2列或第4列进行更改时才能运行此函数,但无论列号如何,脚本都会运行,或者e.oldValue是否未定义。

两个问题:

1)我的代码忽略了列号和数据验证有什么问题?

2)如果一个值被赋予一个单元格并被擦除,那么该单元格是否会恢复为未定义或者它的值是否为“”?

以下是表单的链接:https://docs.google.com/spreadsheets/d/1m58J7vg_xfkrxK_9pxPSHAlBYULXbqNIiF8H2-KVBgE/edit#gid=1496977189

代码:

function onEdit(e) {

  var sheet = SpreadsheetApp.getActiveSheet();
  var activeCell = sheet.getActiveCell();
  var activeColumn = activeCell.getColumn();
  var walkoutRange = sheet.getRange(7, 17, 1);
  var walkoutFormula = walkoutRange.getFormulas();
    Logger.log(walkoutFormula);
  var newRange = sheet.getRange((activeCell.getRow() + 1), 17, 1)

  if (sheet.getName() != "Form") {

    if (activeColumn === 2 || 4) {

      if (e.oldValue === undefined) {

        sheet.insertRowAfter(activeCell.getRow());
        newRange.setFormula(walkoutFormula);
      }
    }
  }
};

1 个答案:

答案 0 :(得分:0)

以下行中存在未被捕获的错误:

if (activeColumn === 2 || 4) {

应该是:

if (activeColumn === 2 || activeColumn === 4) {

条件测试:

activeColumn === 2 || 4

始终返回true;

function test() {
  var activeColumn = 9;
  Logger.log('is it true: ' + Boolean(activeColumn === 2 || 4))//returns true

  if (activeColumn === 2 || 4) {
    Logger.log(Boolean(activeColumn === 2 || 4))
  };

};