2013-07-16 72 views
1

我已經創建了一個非常簡單的Apps腳本,它基於通過Google表單提供的答案,製作模板副本(表單答案電子表格中的工作表)以及用輸入的信息填充它。這是代碼的一部分:如何在每次提交Google表單時填寫多個工作表

function fichas() { 
var formato = SpreadsheetApp.getActiveSpreadsheet(); 
var ficha = formato.duplicateActiveSheet(); 
var respuestas = SpreadsheetApp.openById('ID').getSheetByName('Form Responses'); 

var name = respuestas.getRange(**2**, 5); 
var apellido = ficha.getRange(4, 2); 
name.copyTo(apellido); 

var name2 = respuestas.getRange(**2**, 6); 
var apellido2 = ficha.getRange(4, 3); 
name2.copyTo(apellido2); 

黑體數字表示第一個用戶的信息。提交表單時,我設置了一個觸發器來運行腳本。現在,我不知道如何做的是如何移動到下一行以使用下一個用戶的信息(換句話說,我希望每次腳本運行時自動將粗體數字加1)。可能嗎?我對此很陌生,我正在努力學習,但有時候這太難了!

我真的很感謝你的幫助!

豪爾赫

回答

0

您應該使用一個變量,是共同的所有用戶和您增加每個表單提交。有幾種可能的方式來實現這一目標,爲什麼不嘗試script Properties ?它是相當簡單的實現:

ScriptProperties.setProperty('rowValue', 1);// this must happen only once, you could insert it in a small function to "initialize" 

,然後在你的代碼,你可以找回:

先用這樣的語句初始化使用

var rowValue = Number(ScriptProperties.getProperty('rowValue')); 

增量它使用rowValue++並把它寫回存儲......記住,你總是可以在腳本屬性直接編輯此值(腳本編輯器>文件>項目屬性>項目properti es)

ScriptProperties.setProperty('rowValue', rowValue); 

這將是完美的,如果你永遠不會有多個用戶同時發送表單。 在這種情況下,是腳本混合值的風險...

有專門用來處理這種情況的另一個服務:the lock service

商務部對如何實現它一個明確的例子:它會簡單地像這樣:

var lock = LockService.getPublicLock(); 
try { 
    lock.waitLock(10000); 
} catch (e) { 
    Logger.log('Could not obtain lock after 10 seconds.'); 
} 

你必須做的,增加計數器......而當你完成使用

lock.releaseLock(); 

它可能看起來很複雜,但它不是;-)它會在任何可能的情況下完美地工作......只是試試看。

+0

非常感謝您的幫助!正如我之前提到的,我正在學習這樣做,而且我根本沒有編程經驗......老實說,我試圖按照你的建議去做,但是我不清楚如何去做,所以顯然我無法做到這行得通。你可以幫我嗎?我非常感謝你的時間和精力! – user2578210

+0

「將其寫回存儲器」是什麼意思?我可以讓腳本填寫我的模板,但我無法增加後續模板的rowValue。 – user2578210