为什么表格中没有弹出此错误消息?

Why is this error message not popping up in Sheets?

我有一个 运行 编辑的脚本,它的触发器是可安装的。当它是 运行 时,它将一行复制到另一个文件中。如果由于某种原因没有通过,我希望弹出一条错误消息,以便用户知道它需要额外注意。

现在,我在执行日志中看到的错误表明它正在尝试编辑目标 sheet 中的受保护范围。我按如下方式添加了 try...catch,但没有弹出任何内容。

function myfunction(e) {
  try {
    const startRow = 2;
    const targetColumn = 11;
    const ws = "Data"

    //get modified row and column
    const row = e.range.getRow();
    const col = e.range.getColumn();
    const s = e.source.getActiveSheet();
    const cellValue = s.getActiveCell().getValue();
    const salesPapeline = e.source.getActiveSheet().getRange(row, 1).getValue();
    const branch = e.source.getActiveSheet().getRange(row, 13).getValue();

    if (e.source.getActiveSheet().getName() === ws && col === 2 && row >= startRow) {
      const timeStamp = new Date();

      //This checks if the Job/Lead is to be transferred to Branch 2
      if (salesPapeline == "4. Convert" && cellValue == "2. Branch 2"
        && e.source.getActiveSheet().getRange(row, 12).getValue() == "TRANSFERRED") {
        const jobTagValue = e.source.getActiveSheet().getRange(row, 11).getValue();

        let rowData = e.source.getActiveSheet().getRange(row, 1, 1, 12).getValues();
        let newItems = [];
        let jobTag = rowData[0][10];
        let name = rowData[0][3];
        let company = rowData[0][4];
        let clientNotes = rowData[0][7];
        let startDate = rowData[0][9];
        newItems.push(jobTag, '3. Current needs', '', name, '', company, clientNotes, '', '', '', '', '', startDate)
        e.source.getActiveSheet().getRange(row, 12).setValue('TRANSFERRED');
        e.source.getActiveSheet().getRange(row, 13).setValue('2. Branch 2');

        const salesSheet = SpreadsheetApp.openById(BRANCH2_FILE_ID);
        const destSheet = salesSheet.getSheetByName('[MGT-use] Recruiting Funnel');

        if (newItems.length > 0) {
          const destRng = destSheet.getRange(destSheet.getLastRow() + 1, 1, 1, 13);
          destRng.setValues([newItems]);
        } else {
          return;
        }
      }
    }
  } catch (e1) {
    SpreadsheetApp.getUi().alert(e1.message);
  }
}

这是触发器设置的屏幕截图:

触发器 onEdit() 以静默方式处理错误。您只能在执行部分看到错误消息(和日志):

为了调试,您可以使用 spreadsheet.toast() 工具代替(或与 console.log() 一起使用:

这会检查写入的范围是否为空白

我还在其中放置了一些调试标志,以备我们需要进一步进入该过程时使用。但我真的没有发现它有什么问题,只是您可以更好地利用事件对象并减少执行时间。

function myfunction(e) {
  e.source.toast('entry');
  try {
    const sh = e.range.getSheet();
    if (sh.getName() == "Data" && e.range.columnStart == 2 && e.range.rowStart >= 2) {
      e.source.toast('Flag1');
      const r = sh.getRange(e.range.rowStart, 1, 1, 12).getValues().flat();
      if (r[0] == "4. Convert" && e.value == "2. Branch 2" && r[11] == "TRANSFERRED") {
        e.source.toast('Flag2');
        let newItems = [];
        newItems.push(r[11], '3. Current needs', '', r[3], '', r[4], r[7], '', '', '', '', '', r[9]);
        sh.getRange(e.range.rowStart, 12).setValue('TRANSFERRED');
        sh.getRange(e.range.rowStart, 13).setValue('2. Branch 2');
        const ssh = SpreadsheetApp.openById(BRANCH2_FILE_ID);
        const dsh = ssh.getSheetByName('[MGT-use] Recruiting Funnel');
        if (newItems.length > 0) {
          e.source.toast('Flag3');
          const wr = dsh.getLastRow() + 1
          const drg = dsh.getRange(wr, 1, 1, 13);
          drg.setValues([newItems]);
          SpreadsheetApp.flush();
          if(drg.isBlank()) {
            SpreadsheetApp.getUi().alert("It did not go through");//warns you if the row that you just wrote to is blank.
          }
        } 
      }
    }
  } catch (e) {
    console.log(e.message);
  }
}

如果您想在 table 中分享一些数据,我不介意查看它。您可能还需要解释 sheet 的工作原理。

Note: I do not follow links to other google accounts.