2016-09-13 49 views
4

我正在通過應用腳本使用Google表單。我想確定當前正在提交的表單是處於編輯模式還是新的響應?我如何在onSubmit事件中檢查這一點。Google表單應用腳本:如何檢查當前提交的內容是編輯回覆還是新回覆

如果是,該用戶正在編輯以前提交的響應,而不是我想將電子表格中的值更改爲「是」。

下面

是我的代碼片段:

function testExcel2() { 

    var email = "email"; 
    var s = SpreadsheetApp.openById("id"); 
    var sheet = s.getSheets()[0]; 
    var headers = sheet.getRange(1,1,1,sheet.getLastColumn() - 1).getValues()[0]; 
    var datarow = sheet.getRange(sheet.getLastRow(),1,1,sheet.getLastColumn() - 1).getValues()[0]; 
    var message = ""; 

    for(var i in headers) 
    { 
    message += "" + headers[i] + " : " + datarow[i] + "\n\n"; 
    } 

    MailApp.sendEmail(email, "Submitted Data Test", message); 

    var af = FormApp.getActiveForm(); 
    //af.setCustomClosedFormMessage("The form is currently processing a submission, please refresh the page."); 
    af.setConfirmationMessage('Thanks for responding!') 
    //af.setAcceptingResponses(false); 
    var rowKey = "o" + sheet.getLastRow(); 
    var editCell = sheet.getRange(rowKey).setValue('no'); 

} 
+1

我不知道任何完美的方式來確定,*從表格*,是否提交是一個編輯或新的迴應。我花了很多時間試圖想出一些東西。我希望有一種方法。我將響應ID保存到電子表格中,並在電子表格中查找表單提交的響應ID。因此,我知道確定它是否爲編輯的唯一方法是在Form外部創建一組數據。在比較舊/新時間戳之前,編輯的時間戳會在表單數據中更新。所以你不能這樣想。 –

+1

此外,編輯的響應似乎放在數據的末尾,所以您無法比較當前的表單提交是否在數據的末尾。無論是新的響應還是編輯的響應,它總是在數據的末尾。它似乎是按時間戳排序的。我認爲這是Google Forms中的一個主要缺陷。我可能會將第二組數據保存到文本文件中,並將其用作新舊數據的比較。 –

+0

@SandyGood。我只是做了一個測試。在我的測試中,編輯響應時未對響應進行排序,因此編輯的響應保持其位置。 –

回答

3

的谷歌Form表單提交事件沒有一個領域,可以幫助瞭解是否響應是一個新的響應,或者如果它是一個響應的編輯。正如桑迪通過問題評論所述,Form Servicer的類和方法,以及響應值都包含了一些可以幫助解決的問題。

另一方面,Google表格提交事件有一個範圍字段,可以提供幫助。界的谷歌電子表格下面的腳本記錄的響應行:

function onFormSubmit(e){ 
    var response = e.range; 
    Logger.log(response.getRow()); 
} 

以上可以用來保持更新的列來保存修訂計數器。如果相應的單元格是空白的,那麼響應是一個新的響應,反之它是一個響應編輯。

以下腳本將綁定到接收表單響應的電子表格。它需要一個表單提交可安裝的觸發器。其他適應它的說明包含在腳本註釋中。

/* 
* 
* Global Variables 
* 
*/ 

/* 
* Sheet name used as destination of the form responses 
*/ 
var sheetName = 'Form Responses'; 

/* 
* Name of the column to be used to hold the response revision counter 
* It should match exactly the header of the related column, 
* otherwise it will do nothing. 
*/ 
var revisionsColumn = 'Rev'; 

/* 
* Responses starting row 
*/ 
var startRow = 2; 

function setRevisionCounts(e){ 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName); 
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); 
    var revisionsIndex = headers[0].indexOf(revisionsColumn); 
    var data = sheet.getDataRange().getValues(); 
    var response = e.range; 
    var rowIndex = response.getRow()-1; 
    var rev = data[rowIndex][revisionsIndex]+1; 
    sheet.getRange(rowIndex+1, revisionsIndex+1).setValue(rev); 
} 
+0

我目前正在嘗試你的解決方案,我會更新任何進度 –

+1

它的工作,它現在正在更新我的電子表格計數器列 –

0

這不是一個真正的答案,而是一個'擡起頭來'。我發現如果你重新提交(編輯)一個表單,那些沒有改變的數據會被重新發送。

這是爲什麼?假設你有一個分支,例如你喜歡蘋果還是香蕉?如果你喜歡蘋果,那麼下一個問題可能是你的車的顏色是什麼?如果你喜歡香蕉,我們可以說'紅',下一個問題可能是你多大了?假設35.

所以你選擇蘋果和紅色並提交表格。 然後你編輯你的回覆,而不是選擇香蕉和35.

當表格重新提交時,新數據仍然說汽車=紅色和(如預期的)年齡= 35。

我期望/希望現在汽車=零和年齡= 35,但事實並非如此。 Car =紅色依然出現在目標工作表的更新行中。

我希望這對你有用,也許有人會建議解決。

相關問題