2016-03-08 54 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 
} 
相關問題