是否可以从应用脚本

时间:2016-03-08 15:38:13

标签: google-apps-script

我正在尝试识别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],但这不是保证。

3 个答案:

答案 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
}