我正在尝试识别Google表单的目标表。我可以使用以下方式获取电子表格:
function getDataSheet(){
var form = FormApp.getActiveForm();
var id = form.getDestinationId();
var ss = SpreadsheetApp.openById(id);
var sheet = ""; // how do I get the sheet that the data will go to?
}
问题是如何获取表单结果所用的表单?我猜它是[0],但这不是保证。
答案 0 :(得分:0)
目前,没有“内置”方式来获取表单目标的工作表标签。
如果电子表格的用户没有更改给定的默认工作表名称,那么您可以遍历所有工作表,获取工作表名称,并检查包含文本的名称:“表单响应”。
给出的第一个默认名称是:
表格回应1
然后,如果添加更多目的地,则最后的数字会增加。
如果用户更改了名称,那么很明显,您可以不使用该策略。如果您可以在创建新目标后立即获取工作表选项卡名称,则将工作表选项卡ID存储在文档属性中,以确保您具有可用信息。如果目标工作表选项卡名称发生更改,则表单选项卡ID优于具有工作表选项卡目标名称,您仍然可以通过从文档属性中查找ID,然后使用ID来查找正确的工作表选项卡。获取表格标签。
如果电子表格有多个表格回复X表格,并且您想要添加最后一个目的地,则需要将该数字放在最后,并找出最高数字。
应该有办法获取目标表格标签。我不知道是否有功能请求。
答案 1 :(得分:0)
这就是我正在做的解决方法。它会尝试找到数据表,并且应该适用于大多数表格。它不是很有效,但应该有希望获得大多数形式。
function getDestinationSheet(ss){
if(!ss){
var form = FormApp.getActiveForm();
var id = form.getDestinationId();
ss = SpreadsheetApp.openById(id);
}
var possibleDS = [];
var allSheetNames =[];
var dsName = {};
var locale = ss.getSpreadsheetLocale();
var text = "Timestamp";
if(locale != "en_US"){
text = LanguageApp.translate(text, "en_US", locale);
}
var sheets = ss.getSheets();
for(i in sheets){
var s = sheets[i];
var sName = s.getName();
allSheetNames.push(sName);
var a1 = s.getRange("A1").getValue();
if (a1 == text){ possibleDS.push(sName) }
}
var l = possibleDS.length;
switch (l){
case 0:
dsName.name = "Error";
dsName.error = "No matches found";
dsName.sheets = allSheetNames;
break;
case 1:
dsName.name = possibleDS[0];
dsName.error = "Sucess";
break;
default:
dsName.name = "Error";
dsName.error = "Unable to determine destination sheet using timestamp";
dsName.sheets = possibleDS;
break;
}
return dsName;
}
答案 2 :(得分:0)
var form = FormApp.getActiveForm;
var formId = form.getId();
var sheets = ss.getSheets();
for(i=0;i<sheets.length;i++){
var sheetFormURL = sheets[i].getFormUrl();
if(sheetFormURL){
if(sheetFormURL.indexOf(formId)!=-1){var sheet = sheets[i];break;}
}}
if(typeof sheet !== 'undefined'){
//do what you need to do in the sheet
}