[英]Spliting date cell value that was submitted via Google Forms into a Google Sheet
[英]Adding the submitted value to an existing cell value in google sheet
在我的谷歌表中,我有兩個標簽(付費和訂單)
用戶將這些輸入提交到付費選項卡:
B欄中的賬單編號和C欄中的支付金額
在訂單選項卡中,我在 F 列中有 header 賬單,在 G 列中有現有金額
我需要將已支付選項卡中新提交的賬單編號與訂單選項卡中的賬單列進行比較,每當我們匹配時,將已支付選項卡中新提交的已支付金額添加到訂單標簽中賬單列中匹配賬單編號旁邊的現有金額
在我的谷歌工作表腳本編輯器中,我嘗試了以下 gs 代碼:
function doGet() {
return HtmlService.createTemplateFromFile('Form.html');
}
function doPost (e) {
var lock = LockService.getScriptLock();
lock.tryLock(10 * 1000);
try {
var doc = SpreadsheetApp.getActiveSpreadsheet();
var sheet = doc.getSheetByName("Paid");
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
var nextRow = sheet.getLastRow() + 1
var newRow = headers.map(function(header) {
return header === 'Timestamp' ? new Date() : e.parameter[header]
})
sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])
var bill = newRow[1];
var paidAmount = newRow[2];
var sh = doc.getSheetByName("Orders");
var bills = sh.getRange(2, 6, sh.getLastRow()-1, 1).getValues();
if (bills.flat().indexOf(bill) != -1) {
var existingAmount = sh.getRange(bills.flat().indexOf(bill)+2, 7).getValue();
var total = +existingAmount + +paidAmount
sh.getRange(bills.flat().indexOf(bill)+2, 7).setValue(total);
return HtmlService.createTemplateFromFile('Confirmation.html');
}
}
catch (e) {
return ContentService
.createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
.setMimeType(ContentService.MimeType.JSON)
}
finally { lock.releaseLock() }
}
表格.html
<!DOCTYPE html>
<head>
<base target="_top">
</head>
<body>
<form action="ScriptURL" method="POST">
<select name="Bill #" required>
<option value="" disabled selected>Select ..</option>
<option value="">1</option>
<option value="">2</option>
</select>
<input type="number" placeholder="Paid" name="Paid Amount" required>
<button type="submit">Submit</button>
</form>
</body>
</html>
數據已成功提交,但設置的值不起作用,並且腳本返回以下腳本已完成但未返回任何內容。
任何幫助,我將不勝感激。 提前致謝
我想提出以下修改后的腳本。 但在運行修改后的腳本之前,請確認您的電子表格設置以測試修改后的腳本。
Paid
表的第一行設置如下。
Timestamp
、 Bill
和Paid Amount
。Orders
表中為Bill
的編號(“F”列)設置1
和2
。 這樣,您修改后的 HTML 就可以進行測試了。Execute the app as: Me
and Who has access to the app: Anyone, even anonymous
進行測試。 當 header 行和現有的Bill
值不存在時,無法測試修改后的腳本。 請注意這一點。
createTemplateFromFile
。option
標簽沒有價值。Bill
放入header時,不能使用Bill #
的名稱。Bill
和Paid Amount
的值作為數字時, var bill = newRow[1];
和var paidAmount = newRow[2];
是字符串類型。 這樣, bills.flat().indexOf(bill) != -1
總是false
。 所以 if 語句中的腳本沒有運行。var total = +existingAmount + +paidAmount
可以修改為var total = existingAmount +paidAmount
。Bill
的值在工作表Orders
中不匹配時,將返回錯誤。當以上幾點反映到您的腳本時,它變成如下。
Form.html
<html>
<head>
<base target="_top">
</head>
<body>
<form action="https://script.google.com/macros/s/###/exec" method="POST">
<select name="Bill" required>
<option value="" disabled selected>Select ..</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
<input type="number" placeholder="Paid" name="Paid Amount" required>
<button type="submit">Submit</button>
</form>
</body>
</html>
Code.gs
function doGet() {
return HtmlService.createHtmlOutputFromFile('Form.html');
}
function doPost (e) {
var lock = LockService.getScriptLock();
lock.tryLock(10 * 1000);
try {
var doc = SpreadsheetApp.getActiveSpreadsheet();
var sheet = doc.getSheetByName("Paid");
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
var nextRow = sheet.getLastRow() + 1
var newRow = headers.map(function(header) {
return header === 'Timestamp' ? new Date() : e.parameter[header]
})
sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])
var bill = Number(newRow[1]);
var paidAmount = Number(newRow[2]);
var sh = doc.getSheetByName("Orders");
var bills = sh.getRange(2, 6, sh.getLastRow()-1, 1).getValues();
if (bills.flat().indexOf(bill) != -1) {
var existingAmount = sh.getRange(bills.flat().indexOf(bill)+2, 7).getValue();
var total = existingAmount + paidAmount;
sh.getRange(bills.flat().indexOf(bill)+2, 7).setValue(total);
return HtmlService.createHtmlOutputFromFile('Confirmation.html');
}
return ContentService.createTextOutput("Value was not changed.");
} catch (e) {
return ContentService
.createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
.setMimeType(ContentService.MimeType.JSON);
} finally {
lock.releaseLock();
}
}
Confirmation.html
不存在時,會發生錯誤。 請注意這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.