7

我想建立一種自動系統來更新錦標賽的一些比賽結果。我有一個自動化的電子表格,所有結果都顯示出來,但是需要我更新所有結果,所以我想知道是否可以製作表格以便更容易地更新它們。使用表單更新Google Spreadsheet上的現有數據?

在表格中我將輸入司機的名字和他在比賽中贏得的積分數。冠軍賽每個月有4場比賽,所以是的,我的問題是如果你們知道使用表格更新現有數據(存儲在電子表格中)的方法。可以說,在第一場比賽中,車手'X'贏得了10分。我會在表單中插入這些數據,然後從電子表格中調用它來顯示它,這是正確的。問題出現在我想更新第二場比賽結果等等。如果駕駛員'X'在第二場比賽中獲得12分,是否有辦法更新該駕駛員的前10分並改爲22分?或者我可以將第二個比賽結果自動添加到第一個比賽結果?我的意思是,如果我在表單上插入第二個比賽結果,它可以查找驅動程序的「X」條目並將其添加到之前的條目中。不知道是否有可能。

也許我可以用另一種方式做。任何幫助都感激不盡! 謝謝。

回答

4

也許我錯過了你的問題,但我並不真正瞭解哈羅德的答案...... 這是一個代碼,嚴格執行你所要求的,它計算輸入表格中的4個數字的總累計值,在電子表格中顯示它。

我所謂的4個問題「比賽號碼1」,「比賽號碼2」 ......而結果來第2行,所以你可以設置標題。

我刪除了任何非數字字符,因此您可以更自由地鍵入回覆,只保留數字。

form hereSS here在Sheet1原始結果和Sheet2中計數)

劇本要在電子表格,並通過onFormSubmit觸發器觸發。

function onFormSubmit(e) { 
    var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2'); 
    var responses = [] 
    responses[0] = Number(e.namedValues['race number 1'].toString().replace(/\D/g,'')); 
    responses[1] = Number(e.namedValues['race number 2'].toString().replace(/\D/g,'')); 
    responses[2] = Number(e.namedValues['race number 3'].toString().replace(/\D/g,'')); 
    responses[3] = Number(e.namedValues['race number 4'].toString().replace(/\D/g,'')); 
    var totals = sh.getRange(2,1,1,responses.length).getValues(); 
    for(var n in responses){ 
    totals[0][n]+=responses[n]; 
    } 
    sh.getRange(2,1,1,responses.length).setValues(totals); 
} 

編輯:我改變了代碼,讓您可以輕鬆地改變響應數...範圍會自動更新。


編輯2:接受使用空迴應的版本的「如果」條件的結果:

function onFormSubmit(e) { 
    var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2'); 
    var responses = [] 
    responses[0] = Number((e.namedValues['race number 1']==null ? 0 :e.namedValues['race number 1']).toString().replace(/\D/g,'')); 
    responses[1] = Number((e.namedValues['race number 2']==null ? 0 :e.namedValues['race number 2']).toString().replace(/\D/g,'')); 
    responses[2] = Number((e.namedValues['race number 3']==null ? 0 :e.namedValues['race number 3']).toString().replace(/\D/g,'')); 
    responses[3] = Number((e.namedValues['race number 4']==null ? 0 :e.namedValues['race number 4']).toString().replace(/\D/g,'')); 
    var totals = sh.getRange(2,1,1,responses.length).getValues(); 
    for(var n in responses){ 
    totals[0][n]+=responses[n]; 
    } 
    sh.getRange(2,1,1,responses.length).setValues(totals); 
} 
+0

非常感謝您的幫助!非常感激!這正是我正在尋找的,但仍然不是我真正想要的。你給我的腳本加上了四個比賽的結果,但爲了這樣做,我需要一次插入4個結果。我的意思是,如果每次插入一個結果會更加有用,因爲我必須每週更新一次結果(每個月4場比賽)。 –

+0

隨時用更多的細節來描述,以便我更好地理解:-) –

+0

還有一件事。如果我有13個驅動程序,可以選擇我想在表單中插入的驅動程序結果,或者我需要爲每個驅動程序插入4個表單問題?這就是爲什麼我說如果可以使用表單原因編輯電子表格的內容,如果可能的話,我會在第一週爲driver1,2和3插入race1結果,然後在race2中插入race1結果,但只更新之前的結果一個或添加它們。無法按時編輯第一個答案,對此抱歉。再次謝謝Serge! :D –

5

我相信你可以找到你想要的一切here
這是一個表單url,當你回答這個表單時,你將獲得存儲數據的電子表格的url。存儲的信息之一是修改您的響應的網址,如果您按照鏈接重新打開表單並因此更新電子表格。執行此技巧的代碼位於電子表格的第二個工作表中。
這是一個谷歌應用程序腳本代碼,需要在表單中關聯,並通過onFormSubmit觸發器觸發。

+0

謝謝哈羅德的回答!這就是爲什麼我和我不期待,我的意思是,這不是我正在尋找的原因,因爲我可以編輯結果,但我必須手動更新所有結果(爲每個驅動程序添加每個驅動程序的點冠軍賽)。 –

+0

嗨哈羅德。我認爲你的解決方案几乎是我需要將表單中的記錄與表單關聯起來。但是,當我在工作表中單擊表單鏈接時,編輯一些內容,然後按提交,解決方案會創建一條新記錄。我更喜歡的是一個解決方案,其中每條記錄都有一個鏈接到表單並編輯表單來更新記錄。那可能嗎? –

+0

@christopher嗨,我相信它正是它應該做的,但不知何故它不再工作了我會解決下週我本週旅行 – Harold

相關問題