2016-03-08 28 views
2

我试图找出一个谷歌的形式在目标页中的目的地表。我可以使用以下电子表格:是否有可能得到应用脚本

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

我发现这个问题,涉及到什么,我试图做的:https://code.google.com/p/google-apps-script-issues/issues/detail?id=5448&q =构成%20destination%20sheet&colspec =颗星%20Opened%20ID%20Type%20Status%20Summary%20Component%20Owner –

回答

0

目前,没有“内置”的方式来获得目标表的工作表标签。

如果电子表格的用户没有更改给定的默认表单名称,则可以遍历所有表单,获取表单名称,然后检查包含文本名称的“Form Responses”。给定

第一默认名称是:

表格回应1

然后,如果加入更多的目的地,在端部的数量增加。

如果用户更改名称,那么显然,您可以使用而不是使用该策略。如果您可以在创建新目标后立即获取工作表选项卡名称,则将工作表选项卡ID存储在文档属性中,以确保您具有可用的信息。如果目标工作表选项卡名称被更改,您仍然可以通过从文档属性中查找ID来找到正确的工作表选项卡,然后使用ID到获取工作表选项卡。

如果电子表格有多个表格回应X片,和你想获得最后的目的地添加,你将需要下车最后的数字,并找出最高的数字是什么。

应该有一种方式来获得目标表标签。我不知道是否有功能要求。

+0

我现在的问题是,这个功能是一个国际性的附加的一部分,表单回复1只适用于英语的默认。我想知道是否有办法找出目的地表单。就像时间戳记在单元格A1中一样。 –

+0

好点。我可能想要检查多个单元格。我会检查A2:A4并确保所有3个单元格中都有一个时间戳记,以确保。如果数据以A2或A3结尾,那么您需要继续这样做,并希望获得最好的结果。如果你想100%确定,你可能需要添加一个工作表选项卡,然后存储工作表选项卡ID,然后从代码中编写响应,而不是自动执行该操作。但是,如果你这样做,那么如果很多用户同时提交,就会遇到数据写入错误行的问题,或者根本没有写入数据。 –

+0

您可以从单元格A2获取时间戳,然后将该时间戳与表单中的第一个时间戳进行比较。当然,这假定表单提交已经完成。如果没有提交表单,那么您需要提交代码回复,然后进行测试。 –

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; 
} 
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 
} 
相关问题