粘贴数据时不会触发onEdit 发件人:收件人:

问题描述

使用onEdit触发器在云端硬盘中创建一个文件夹。在字段中键入数据时有效,但在粘贴数据时不会触发。已更新,其中包含建议的更改,但仍不会触发粘贴数据。

function createSpreadsheetEditTrigger() {
  const ss = SpreadsheetApp.openById('1IzR2ceVKG8sstDHMx-N6NCuzzUHGyAOHHsykT7r-xcg');
  ScriptApp.newTrigger('addFolder')
      .forSpreadsheet(ss)
      .onEdit()
      .create();
}

function addFolder(e) {
  // helps with verifying where data was entered
  // in the sheet
  const myNewColumn = e.range.getColumn()
  const myNewRow = e.range.getRow()
  const value = e.range.getValues().flat().join("");
  
  if (myNewColumn == 1 && myNewRow > 2 && value.includes(",")) { 
    // capture first and last name entered
    const firstName = e.value.split(",")[1]
    const lastName = e.value.split(",")[0]
  
    // identify the folder where
    // new student folders will exist
    const folder = DriveApp.getFolderById('1l_dYf74ITGiUzu10t72XCig2HWL_Q0PH') 
    
    // create student's new folder
    const newFolder = folder.createFolder(`${lastName},${firstName} - Evidence`)
    const newFolderId = newFolder.getId()
    const specificNewFolder = DriveApp.getFolderById(newFolderId)
  
    // add subfolders to student folder
    const ela = newFolder.createFolder("ELA")
    const math = newFolder.createFolder("Math")
    const behavior = newFolder.createFolder("Behavior")
  
    // create form
    const form = FormApp.create(`${lastName},${firstName} Feedback Form`);
    form.setTitle(`${lastName},${firstName}`)
      .setDescription('Progress on Goal Feedback Form')
  

解决方法

复制和粘贴值时,事件对象不包含value。我认为这是您遇到问题的原因。因此,为了既可以手动输入值,又可以复制和粘贴值,请进行以下修改?

发件人:

if (myNewColumn == 1 && myNewRow > 2 && e.value.includes(",")) {

收件人:

const value = e.range.getValues().flat().join("");  // Added
if (myNewColumn == 1 && myNewRow > 2 && value.includes(",")) {  // Modified
,

仅当单个单元格被编辑且不为空时,才包括编辑事件对象的属性value

考虑到上述情况,您应该改进代码以使用e.range.getValues()而不是e.value。