【发布时间】:2017-06-21 17:37:59
【问题描述】:
在 Google 表格中,我有一个脚本用于为每个提交的 Google 表单创建一个新表格。它应该根据最后一列 G 列(不是表单提交列)创建一个名称为新表。然后它从最后一行和标题行中获取信息并将其复制到创建的工作表的前两行。它还向单元格添加公式以将信息放入列(转置)并根据创建的工作表对其进行格式化。
现在它正在创建工作表并复制公式和格式,但没有给它正确的名称或提取最后一行信息。
请帮忙! ~查尔斯
我复制了下面的代码:
function onFormSubmit() {
// onFormSubmit
// get submitted data
var ss = SpreadsheetApp.openById(
'...');
var sheet = ss.getSheetByName("Responses");
var headings = sheet.getRange(1,1,1,
sheet.getLastColumn()).getValues();
var lastRow = sheet.getRange(sheet.getLastRow(),1,1,
sheet.getLastColumn()).getValues();
var studentUsername = lastRow[0][6];
// check if username has sheet
if(ss.getSheetByName(studentUsername)){
var userSheet = ss.getSheetByName(studentUsername);
// if not make
} else {
var userSheet = ss.insertSheet(studentUsername);
userSheet.getRange(1,1,1,
headings[0].length).setValues(headings);
}
// copy submitted data to user's sheet
userSheet.appendRow([lastRow]);
userSheet.appendRow(['=CONCATENATE(B6," ",B5)']);
userSheet.appendRow(['=TRANSPOSE(B1:2)']);
userSheet.hideRows(1,2);
userSheet.setColumnWidth(1, 500);
userSheet.setColumnWidth(2, 500);
var FormatSheet = ss.getSheetByName("Format");
var FormatRange = FormatSheet.getRange("a3:b28");
FormatRange.copyFormatToRange(userSheet,1,3,3,28);
}
【问题讨论】:
-
我想你最好用 id 打开这个。
var ss = SpreadsheetApp.getActiveSpreadsheet();会不会有时您收到表单提交而电子表格不活动? -
我想你可以在这里使用 appendRow:
userSheet.getRange(userSheet.getLastRow()+1,1,1, lastRow[0].length).setValues(lastRow); -
我觉得这个
userSheet.getRange(userSheet.getLastRow()+1,1,1, lastRow[0].length).setValues(lastRow);应该是这个userSheet.getRange(userSheet.getLastRow()+1,1,1, lastRow.length).setValues(lastRow); -
是的,我没有考虑什么时候不会打开工作表。你有什么建议?我还是编码新手,所以我很感激帮助。我会尝试你提到的调整。
-
使用 ID 打开一切仍然可以正常工作。我认为您不能使用任何 UI(SpreadsheetApp.getUi()),但电子表格仍然可以在服务器上打开并执行除创建对话框、提示和警报之外的所有操作..等。
标签: google-apps-script google-sheets