我創建了一個考勤系統,使用基本腳本從考勤表中復制資料(標記考勤并將其粘貼到回應表(表單回應 1)。提交回應有兩種方法。1)使用“提交”運行 submitData 功能的按鈕,該功能僅適用于個人電腦/筆記本電腦,不適用于谷歌表格移動應用程式。2. 對于 google sheet 移動應用,創建了一個帶有 onEdit 觸發器的下拉選單。當用戶在單元格 E1 的下拉串列中選擇選項時,onEdit 運行相同的腳本(或與選項 1 中的“提交”按鈕相同的 submitData 函式。現在使用“提交”按鈕的 submitData 函式的成功率為 100 % 但 onEdit 觸發器有時會在兩者之間停止。(您可以在作業表的“表單回應 1”選項卡的第 85 行中看到不完整的回應。
知道為什么會發生這種情況以及如何糾正它嗎?
鏈接到電子表格 - https://docs.google.com/spreadsheets/d/1YoAE4lT50oLxZLpa92h1zuSQIu2N2WtBr5Y1MuHmdzM/edit#gid=1611147373
僅供參考 - 我正在從另一張表中提取學生姓名和其他詳細資訊。
復制粘貼資料的腳本
function submitData(){
//declare variable and set the reference at active google sheet
var myGoogleSheet = SpreadsheetApp.getActiveSpreadsheet();
var shMarkAttendance = myGoogleSheet.getSheetByName("Mark_attendance");
var dataSheet = myGoogleSheet.getSheetByName("Form responses 1");
var blankRow = dataSheet.getLastRow() 1 ; //Next blank row
//to create the instance of user interface environment to use the alert features
var ui = SpreadsheetApp.getUi();
if(shMarkAttendance.getRange("A8:D9").getValue() != "**Please press SUBMIT to mark the attendance**") {
return; // to exit
}
//code to update data in Form responses 1
if(shMarkAttendance.getRange("A8:D9").getValue() == "**Please press SUBMIT to mark the attendance**") {
dataSheet.showSheet()
dataSheet.getRange(blankRow, 1). setValue(shMarkAttendance.getRange("D1").getValue()); //timestamp
dataSheet.getRange(blankRow, 2). setValue(shMarkAttendance.getRange("C2:D2").getValue()) // center
dataSheet.getRange(blankRow, 3). setValue(shMarkAttendance.getRange("C3:D3").getValue()); // Batch
dataSheet.getRange(blankRow, 4). setValue(shMarkAttendance.getRange("C4:D4").getValue()); // Session date
dataSheet.getRange(blankRow, 5). setValue(shMarkAttendance.getRange("I5").getValue()); // Session start time
dataSheet.getRange(blankRow, 6). setValue(shMarkAttendance.getRange("F2:G2").getValue()); // Other coaches present
dataSheet.getRange(blankRow, 7). setValue(shMarkAttendance.getRange("B6:D6").getValue()); // Your Name
dataSheet.getRange(blankRow, 8). setValue(shMarkAttendance.getRange("J5").getValue()); //Duration
dataSheet.getRange(blankRow, 9). setValue(shMarkAttendance.getRange("J9").getValue()); // Present
dataSheet.getRange(blankRow, 10). setValue(shMarkAttendance.getRange("K9").getValue()); // Absent
dataSheet.getRange(blankRow, 11). setValue(shMarkAttendance.getRange("L9").getValue()); // Late
dataSheet.getRange(blankRow, 12). setValue(shMarkAttendance.getRange("F4:G4").getValue()); // Type of session
dataSheet.getRange(blankRow, 13). setValue(shMarkAttendance.getRange("G3").getValue()); // without Hi5 jerseys
dataSheet.getRange(blankRow, 14). setValue(shMarkAttendance.getRange("B7:D7").getValue()); //Any notes or observations
dataSheet.getRange(blankRow, 15). setValue(shMarkAttendance.getRange("F6:G6").getValue()); //Session plan followed
dataSheet.getRange(blankRow, 16). setValue(shMarkAttendance.getRange("G7").getValue()); //Weekly plan
//to clear the mark attendance form
shMarkAttendance.getRange("C3:D3").clearContent(); //Batch
shMarkAttendance.getRange("C4:D4").clearContent(); // session date
shMarkAttendance.getRange("B5:D5").clearContent(); //Session start time
shMarkAttendance.getRange("F2:G2").clearContent(); //Other coaches present
shMarkAttendance.getRange("B6:D6").clearContent(); //Your name
shMarkAttendance.getRange("F4:G4").clearContent(); // Type of session
shMarkAttendance.getRange("F5:G5").clearContent(); // Duration
shMarkAttendance.getRange("G3").clearContent(); // Without hi5 jersey
shMarkAttendance.getRange("B7:D7").clearContent(); //Notes/observations
shMarkAttendance.getRange("F6:G6").clearContent(); // session plan followed
shMarkAttendance.getRange("G7").clearContent(); // Weekly plan
shMarkAttendance.getRange("E1").clearContent(); // Submit button
shMarkAttendance.getRange('E10:G60').activate();
shMarkAttendance.getActiveRangeList().check();
shMarkAttendance.getActiveRangeList().uncheck();
dataSheet.hideSheet();
}
}
onEdit trigger to run the submitData function
function onEdit(e) {
if (e.range.getA1Notation() == 'E1') {
if (/^\w $/.test(e.value)) {
eval(e.value)();
e.range.clear();
}
}
}
uj5u.com熱心網友回復:
試試這個(從//code to update data in Form responses 1),它會加快速度并防止任何失敗
您需要啟用服務 Google Sheets API(請參閱腳本編輯器的左側
//code to update data in Form responses 1
if (shMarkAttendance.getRange("A8:D9").getValue() == "**Please press SUBMIT to mark the attendance**") {
//dataSheet.showSheet()
const ssId = SpreadsheetApp.getActiveSpreadsheet().getId();
const source = shMarkAttendance.getSheetName();
const rng = ["D1", "C2", "C3", "C4", "I5", "F2", "B6", "J5", "J9", "K9", "L9", "F4", "G3", "B7", "F6", "G7"].map(e => `'${source}'!${e}`);
const values = Sheets.Spreadsheets.Values.batchGet(ssId, { ranges: rng })
var data = []
values.valueRanges.forEach(e => data.push(e.values ? e.values.flat().toString() : ""))
dataSheet.appendRow(data)
//to clear the mark attendance form
shMarkAttendance.getRangeList(["C3", "C4", "B5", "F2", "B6", "F4", "F5", "G3", "B7", "F6", "G7", "E1"]).clearContent()
shMarkAttendance.getRange('E10:G60').check();
shMarkAttendance.getRange('E10:G60').uncheck();
//dataSheet.hideSheet();
}
但是,onEdit 與 batchGet 不兼容
更改腳本如下
function onEdit(e) {
if (e.range.getA1Notation() == 'E1') {
if (/^\w $/.test(e.value)) {
eval(e.value)();
e.range.clear();
}
}
}
function submitData() {
//declare variable and set the reference at active google sheet
var myGoogleSheet = SpreadsheetApp.getActiveSpreadsheet();
var shMarkAttendance = myGoogleSheet.getSheetByName("Mark_attendance");
var dataSheet = myGoogleSheet.getSheetByName("Form responses 1");
//code to update data in Form responses 1
if (shMarkAttendance.getRange("A8:D9").getValue() == "**Please press SUBMIT to mark the attendance**") {
//dataSheet.showSheet()
const cells = ["D1", "C2", "C3", "C4", "I5", "F2", "B6", "J5", "J9", "K9", "L9", "F4", "G3", "B7", "F6", "G7"]
var data = [];
for (var cell of cells) data.push(shMarkAttendance.getRange(cell).getValue());
dataSheet.appendRow(data)
//to clear the mark attendance form
shMarkAttendance.getRangeList(["C3", "C4", "B5", "F2", "B6", "F4", "F5", "G3", "B7", "F6", "G7", "E1"]).clearContent()
shMarkAttendance.getRange('E10:G60').check();
shMarkAttendance.getRange('E10:G60').uncheck();
//dataSheet.hideSheet();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/452744.html
