Javascript 触发onFormSubmit时未运行完整脚本,但将使用onEdit()手动运行 功能电池检查(e){ var范围=e范围; var row=range.getRow(); var col=range.getColumn() var sheet=range.getSheet(); Logger.log(“行为“+行+”,列为“+列+”,工作表为“+工作表”); var表、sheetName、colToCapitalize; var sheetName,colToCapitalize; colToCapitalize=2; sheetName=“FormResponses1”; if(sheet.getName()!==sheetName | | e.range.rowStart

Javascript 触发onFormSubmit时未运行完整脚本,但将使用onEdit()手动运行 功能电池检查(e){ var范围=e范围; var row=range.getRow(); var col=range.getColumn() var sheet=range.getSheet(); Logger.log(“行为“+行+”,列为“+列+”,工作表为“+工作表”); var表、sheetName、colToCapitalize; var sheetName,colToCapitalize; colToCapitalize=2; sheetName=“FormResponses1”; if(sheet.getName()!==sheetName | | e.range.rowStart,javascript,google-apps-script,google-sheets,triggers,gs-installable-triggers,Javascript,Google Apps Script,Google Sheets,Triggers,Gs Installable Triggers,我想要的结果是,当从google表单向工作表“FormResponses1”添加新行数据时,上述脚本将运行。我已经创建了谷歌表单,当用户提交表单时,新数据会添加到表单“FormResponses1”中 如果我手动向单元格中添加新值,例如,如果我在表格“FormResponses1”的单元格“B2”中写入“dll 463”,则上述代码运行良好,并执行我所需的操作 我使用脚本编辑器视图工具栏中的编辑-当前项目的触发器,为上面显示的函数OneEdit设置了一个触发器“来自电子表格-表单提交” 触发器

我想要的结果是,当从google表单向工作表“FormResponses1”添加新行数据时,上述脚本将运行。我已经创建了谷歌表单,当用户提交表单时,新数据会添加到表单“FormResponses1”中

如果我手动向单元格中添加新值,例如,如果我在表格“FormResponses1”的单元格“B2”中写入“dll 463”,则上述代码运行良好,并执行我所需的操作

我使用脚本编辑器视图工具栏中的编辑-当前项目的触发器,为上面显示的函数OneEdit设置了一个触发器“来自电子表格-表单提交”

触发器似乎确实触发了,如果我在从表单提交新响应后查看日志,我可以看到日志显示通过上面代码中的Logger.log行编辑的行和列

我在上面的代码中添加了更多的Logger.log行,以查看脚本在被“From spreadsheet-On form submit”触发器触发时运行的距离,但在行和列编辑日志之后不会显示其他日志

让我觉得更奇怪的是,我可以让触发器工作并在昨天运行代码。尽管如此,它只是在当前脚本末尾的setFormula行中编写,从那时起,我将大写列值和替换公式添加到脚本中

我试过: -删除并添加新触发器。 -创建新版本 -删除表单代表 -将函数从onEdit()更改为onFormSubmit() -将脚本复制到新的电子表格脚本编辑器中,取消电子表格的链接并添加一个新的电子表格(具有相同的工作表名称和数据),然后删除旧的电子表格。

您遇到的问题(除了您编写的代码也有点混乱)是,当事件由“正在编辑”或“正在提交”触发时,它们的属性是不同的,因此它们不会具有相同的属性,您可以应用与代码中相同的逻辑

这是a的样子,这是a的样子

我知道。我以以下方式修改了您的代码:

在主函数中,我检查触发的原因,如果是编辑或提交事件,然后根据事件以及两者的条件都为真,我调用
onEditChange
onSubmitChange
函数

function BatteryInspection(e) {
  var range = e.range;
  var row = range.getRow();
  var col = range.getColumn()
  var sheet = range.getSheet();
  Logger.log("The row is " + row + " and column is " + col + " the sheet is " + sheet);

  var sheet, sheetName, colToCapitalize;

  var sheetName, colToCapitalize;
  colToCapitalize = 2;
  sheetName = "FormResponses1";
  if (sheet.getName() !== sheetName || e.range.rowStart < 2 || e.range.columnStart !== colToCapitalize || typeof e.value == "object") return;
  e.range.setValue(e.value.toUpperCase());

  sheet.getRange(row, 10).setFormula("=SUBSTITUTE(B" + row + ",\" \",\"\")");

  var cellcopy = sheet.getRange(row, 10);
  var cellvalues = cellcopy.getValues();

  sheet.getRange(row, 2).setValues(cellvalues);
  cellcopy.clearContent();

  sheet.getRange(row, 8).setFormula("=VLOOKUP(B" + row + ",LookUpTable!A2:C1001,2,0)");
  sheet.getRange(row, 9).setFormula("=VLOOKUP(B" + row + ",LookUpTable!A2:C1001,3,0)");
}
在名称所示的
setFormulas
函数中,我只设置了您之前在主函数
BatteryInspection
中设置的公式

// Call when there is an edit event 
function onEditChange(evt, sheet, row){
  // Uppercase the value where the triggered occured
  evt.range.setValue(evt.value.toUpperCase());
  setFormulas(sheet, row);
}

// Call when there is an submit event 
function onSubmitChange(evt, sheet, row){
  // Uppercase the value just in the value of the second col
  sheet.getRange(row, 2).setValue(evt.values[1].toUpperCase());
  setFormulas(sheet, row);
}
现在,整个代码如下所示:

// Function for setting the formulas
// Call whether an edit or submit event happens
function setFormulas(sheet, row){
  sheet.getRange(row, 10).setFormula("=SUBSTITUTE(B" + row + ",\" \",\"\")");
  var cellcopy = sheet.getRange(row, 10);
  var cellvalues = cellcopy.getValues();
  sheet.getRange(row, 2).setValues(cellvalues);
  cellcopy.clearContent();
  sheet.getRange(row, 8).setFormula("=VLOOKUP(B" + row + ",LookUpTable!A2:C1001,2,0)");
  sheet.getRange(row, 9).setFormula("=VLOOKUP(B" + row + ",LookUpTable!A2:C1001,3,0)");
}
功能电池检查(e){
var范围=e范围;
var row=range.getRow();
var col=range.getColumn();
var sheet=range.getSheet();
var colToCapitalize=2;
var sheetName=“FormResponses1”;
//让我们看看它是表单还是编辑对象,检查namedValues属性
如果(!e.namedValues){
//编辑事件
//检查编辑事件的正确条件
if(sheet.getName()!==sheetName | | |行<2 | | |列!==colToCapitalize | | typeof e.value==“object”)返回;
else onEditChange(e、表格、行);
}否则{
//提交事件
//检查提交事件的正确条件
if(sheet.getName()!==sheetName | | row<2 | typeof e.values!=“object”)返回;
其他提交变更(e、表、行);
}
}
//存在编辑事件时调用
功能onEditChange(evt、工作表、行){
//大写发生触发事件的值
evt.range.setValue(evt.value.toUpperCase());
设置公式(表格、行);
}
//发生提交事件时调用
SubmitChange功能(evt、工作表、行){
//大写第二列值中的值
sheet.getRange(第2行).setValue(evt.values[1].toUpperCase());
设置公式(表格、行);
}
//用于设置公式的函数
//调用是否发生编辑或提交事件
函数集公式(表格、行){
sheet.getRange(第10行).setFormula(“=替换(B”+第10行+”,\“\”,\“\”);
var cellcopy=sheet.getRange(第10行);
var cellvalues=cellcopy.getValues();
sheet.getRange(第2行).setValues(cellvalues);
cellcopy.clearContent();
sheet.getRange(第8行).setFormula(“=VLOOKUP(B“+row+”,LookUpTable!A2:C1001,2,0)”);
sheet.getRange(第9行).setFormula(“=VLOOKUP(B“+row+”,LookUpTable!A2:C1001,3,0)”);
}
文件 有关详细信息,您还可以检查:


  • 欢迎光临。违反直觉的是,您可能同时拥有onEdit和onFormSubmit的触发器。您提供的代码很有用,但它也是一条红鲱鱼,因为您没有解释您试图解决的问题以及您在这样做时遇到的困难。请你编辑一下你的问题,解释一下你的情况和你想要达到的结果。嗨@Tedinoz,我已经编辑了我的问题,希望它能让我
    // Function for setting the formulas
    // Call whether an edit or submit event happens
    function setFormulas(sheet, row){
      sheet.getRange(row, 10).setFormula("=SUBSTITUTE(B" + row + ",\" \",\"\")");
      var cellcopy = sheet.getRange(row, 10);
      var cellvalues = cellcopy.getValues();
      sheet.getRange(row, 2).setValues(cellvalues);
      cellcopy.clearContent();
      sheet.getRange(row, 8).setFormula("=VLOOKUP(B" + row + ",LookUpTable!A2:C1001,2,0)");
      sheet.getRange(row, 9).setFormula("=VLOOKUP(B" + row + ",LookUpTable!A2:C1001,3,0)");
    }
    
    function BatteryInspection(e) {
      var range = e.range;
      var row = range.getRow();
      var col = range.getColumn();
      var sheet = range.getSheet();
      var colToCapitalize = 2;
      var sheetName = "FormResponses1";
      // Let's see if it is a form or edit object, checking the namedValues properties
      if(!e.namedValues){
        // Edit event
        // Check the right conditions for an edit event
        if (sheet.getName() !== sheetName || row < 2 || col !== colToCapitalize || typeof e.value == "object") return;
        else onEditChange(e, sheet, row);
      } else {
        // Submit Event
         // Check the right conditions for a submit event
        if (sheet.getName() !== sheetName || row < 2 | typeof e.values != "object") return;
        else onSubmitChange(e, sheet, row);
      }
    }
    
    // Call when there is an edit event 
    function onEditChange(evt, sheet, row){
      // Uppercase the value where the triggered occured
      evt.range.setValue(evt.value.toUpperCase());
      setFormulas(sheet, row);
    }
    
    // Call when there is an submit event 
    function onSubmitChange(evt, sheet, row){
      // Uppercase the value just in the value of the second col
      sheet.getRange(row, 2).setValue(evt.values[1].toUpperCase());
      setFormulas(sheet, row);
    }
    
    // Function for setting the formulas
    // Call whether an edit or submit event happens
    function setFormulas(sheet, row){
      sheet.getRange(row, 10).setFormula("=SUBSTITUTE(B" + row + ",\" \",\"\")");
      var cellcopy = sheet.getRange(row, 10);
      var cellvalues = cellcopy.getValues();
      sheet.getRange(row, 2).setValues(cellvalues);
      cellcopy.clearContent();
      sheet.getRange(row, 8).setFormula("=VLOOKUP(B" + row + ",LookUpTable!A2:C1001,2,0)");
      sheet.getRange(row, 9).setFormula("=VLOOKUP(B" + row + ",LookUpTable!A2:C1001,3,0)");
    }