我有以下与Google电子表格相关联的应用程序脚本,该脚本正在接受来自Google表单的数据:
np.outer(a,b)
此脚本正在执行的操作是根据PatientID(第V列)将数据(一行)写入此电子表格中的另一张工作表。当我手动运行脚本时,它应能正常工作。但是,当我设置一个触发器来运行此脚本(onSubmit或edit)时,什么也不会发生。我创建了另一个函数,该函数只向日志中写入一条消息,并为该函数设置一个触发器,该触发器就可以工作,因此我认为脚本中有某些东西会导致它失败。任何想法表示赞赏。
答案 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
}