Google应用程序脚本触发器未将数据写入同一电子表格中的其他工作表

时间:2018-09-12 15:43:07

标签: google-apps-script

我有以下与Google电子表格相关联的应用程序脚本,该脚本正在接受来自Google表单的数据:

np.outer(a,b)

此脚本正在执行的操作是根据PatientID(第V列)将数据(一行)写入此电子表格中的另一张工作表。当我手动运行脚本时,它应能正常工作。但是,当我设置一个触发器来运行此脚本(onSubmit或edit)时,什么也不会发生。我创建了另一个函数,该函数只向日志中写入一条消息,并为该函数设置一个触发器,该触发器就可以工作,因此我认为脚本中有某些东西会导致它失败。任何想法表示赞赏。

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。在评论更改的每一行时,我都试图修复它。希望这一点已经足够清楚了,如果您有任何疑问,请发表评论,我会尽力澄清。

function writePatientData() {
  var spreadsheet = SpreadsheetApp.getActive(); //no need for id if the script is on the same spreadsheet
  //var sheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
  //setActiveSheet will not work from a trigger like on-form-submit (what if no-one has the sheet open, or multiple have)
  var sheet = spreadsheet.getSheets()[0]; //if you want the first sheet, just get it, no need to "activate"

  var numRows = sheet.getLastRow();

  var last_row = sheet.getSheetValues(numRows, 1, 1, 23)[0]; //added [0] since it is just one row

  //var lastPatientID = sheet.getRange(numRows,3).getValue(); //you already have this in memory
  var lastPatientID = last_row[2]; //arrays are zero based, that's why 2 instead of 3
  //btw, you mention column V, but this is actually C

  //var patientSheet = SpreadsheetApp.getActive().getSheetByName(lastPatientID);
  //you already have the spreadsheet, no need to get it again
  var patientSheet = spreadsheet.getSheetByName(lastPatientID);
  //var activePatientSheet = spreadsheet.getSheetByName(lastPatientID); //this is the exact same as above, why?
  patientSheet.appendRow(last_row); //appendRow is just simpler than getRange(getLastRow).setValues
}