【问题标题】:onEdit not triggering when pasting data粘贴数据时不会触发onEdit
【发布时间】:2020-08-20 22:26:01
【问题描述】:

使用 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')
  

【问题讨论】:

  • 代码不完整
  • 谢谢,我添加了一个更完整的问题。
  • 缺少addFolder 函数声明的结束},可能还缺少其他东西。

标签: javascript google-apps-script google-drive-api


【解决方案1】:

复制粘贴值时,事件对象不包含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

【讨论】:

  • 非常感谢您的支持。我已经实现了更改,但它仍然不会在粘贴时触发。我应该手动运行触发器吗?
  • @Carlos LaGrange 感谢您的回复。我带来的不便表示歉意。不幸的是,来自I have implemented the changes, but it still does not trigger on paste.,我无法复制您的情况。那么您能否提供详细信息,包括您当前的脚本和复制问题的流程?借此,我想确认一下。如果您能合作解决您的问题,我很高兴。顺便说一句,我无法理解你想从Should I just run the trigger manually? 做什么。也可以问一下具体情况吗?
  • 我真的很感激你的好意。我已经链接到上面的代码和工作表。如您所见,当我在 A3 中手动键入全名时,代码运行良好,但是当我将名称复制并粘贴到 A4 中时,代码无法运行。
【解决方案2】:

编辑事件对象的属性value仅在编辑单个单元格且不为空时包含。

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

【讨论】:

  • 谢谢!我确实更改了代码,但它仍然不会在粘贴时触发...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多