我使用以下在Google Sheet中運行的onSubmit(e)腳本來訪問Google Form提交的鍵對值。然后將它們放在一個HTML串列中并通過電子郵件發送。到目前為止,情況還不錯。每次表單提交后,我都會收到一封電子郵件通知,其中的問題和回復都列在行中。
問題:配對的順序是隨機的,并且隨著每次提交而改變。我希望它與表單中的問題順序相同,從上到下。
下面是基本的作業腳本(除去我的細節):
function onFormSubmit(e) {
var values = e.namedValues;
var sendFrom = ''/span>;
var ccEmail = ''/span>;
var subject = '';
var htmlBody = '<ul> ';
for (Key in values) {
var label = Key;
var data = values[Key] 。
htmlBody = '<li>' label " 。" data '</li>'。
};
htmlBody = '</ul>';
MailApp.sendEmail(sendFrom, subject, htmlBody, {
htmlBody: htmlBody,
cc: ccEmail。
name: 'Automated Email'。
noReply: true。
});
}
以下是表格中的實際問題順序(前5個問題):
- 類
- 班級
- 教師
- 學生編號
- 姓名
- 姓氏
- 家庭名稱 等。
下面是一個通知郵件的例子,問題的順序是隨機的:
我猜測 namedValues 物件是異步創建的還是什么?是否有辦法鎖定它以匹配表單上的順序,或者先訪問表單上的問題順序,然后再映射到該順序?顯然,我們不希望在這里硬編碼密鑰,因為一旦在表單上進行編輯,它就會被破壞......
。恐怕有點超出我的腳本水平。感謝任何幫助!
這個問題是別人在兩年前發布的,但是那個帖子上沒有答案。
uj5u.com熱心網友回復:
使用e.values陣列而不是e.namedValues物件。在陣列中,數值的出現順序與它們在電子表格中的存盤順序相同。要獲得欄位名,請使用 SpreadsheetApp.getActive().getRange('Form Responses 1!A1:1').getValues()[0]。
請參閱事件物件幫助頁面。
uj5u.com熱心網友回復:
感謝doubleunary提供的解決方案。下面是作業代碼:
function onFormSubmit(e) {
//只按原始順序訪問這些值。
var values = e.values;
var vlen = values.length;
//從回應表中獲取標題(即問題)
var fields = SpreadsheetApp.getActive()。 getRange('sheetName!A2:K2').getValues()[0] 。
var i;
var htmlBody = '<ul> ';
//loop through headers values to build HTML list。
for (i=0; i<vlen;i ) {
var label = fields[i];
var data = values[i];
htmlBody = '<li>' label " 。" data '</li>'。
};
htmlBody = '</ul> ';
var recipientsTO = "someoneelse1@xyz" "," "someoneelse2@xyz"。
MailApp.sendEmail( {
to:"me@xyz"。
bcc:收件人TO。
subject: "語言部RIC"。
htmlBody: htmlBody
})
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/319354.html
標籤:
