我正在處理此
我正在使用以下代碼,但遇到了錯誤。
我得到的錯誤之一是
“ReferenceError:未定義行”
我正在修改本教程中的代碼
function processEdit(e) {
var sheet = SpreadsheetApp.getActive();
var rows = sheet.getRangeByName("EmailChanges").getValues();
var headerRow = rows.shift();
var editedRow = e.range.getRow();
var template = HtmlService.createTemplateFromFile("Template");
template.headerRow = headerRow;
template.editedRow = editedRow;
var html = template.evaluate().getContent();
if(row>=3 && row<=1339 && col>6 && col==7 && editedSheet.getName()=="Change Requests"){
//Send email
var message = "The Column G Cell " editedCell.getA1Notation() " was modified from '" e.oldvalue "' to '" e.value "'";
MailApp.sendEmail({
to: "[email protected]",
subject: "Change",message,
name:'GSD BI',
htmlBody: html
});
}
}
Html 代碼是
Please see the highlighted row below for information about the Changes.
<hr>
<br>
<table cellpadding='5'>
<tr>
<th bgcolor='#eaeaea'><?= headerRow[0] ?></th>
<th bgcolor='#eaeaea'><?= headerRow[1] ?></th>
<th bgcolor='#eaeaea'><?= headerRow[2] ?></th>
</tr>
<? var rowIndex = 3; ?>
<? for(var i = 0; i < rows.length; i ) { ?>
<? var background = rowIndex === editedRow ? "#e06666" : "#ffffff"; ?>
<tr>
<td bgcolor='<?= background ?>'><?= rows[i][0] ?></td>
<td bgcolor='<?= background ?>'><?= rows[i][1] ?></td>
<td bgcolor='<?= background ?>'><?= rows[i][2] ?></td>
</tr>
<? rowIndex = rowIndex 1; ?>
<? } ?>
</table>
uj5u.com熱心網友回復:
我相信你的目標如下。
- 當手動編輯“G”列時,您希望通過可安裝的 OnEdit 觸發器運行腳本。
- 運行腳本時,您希望檢索已編輯的行并創建
message它們并將其作為電子郵件發送。
修改點:
- 在您的腳本中,
rows未定義。這就是您的問題的原因"ReferenceError: rows is not defined"。而且,col沒有宣告。 - 當我看到您的示例電子表格時,命名范圍的名稱是
EmailChange. 但是,您使用的是 nameEmailChanges。 e.oldvalue總是回傳undefined。屬性名稱是oldValue。- 在你的模板中,
rows沒有放。 - 從您顯示的預期目標來看,
message不包含在模板中。 messageofMailApp.sendEmail(message)沒有 的屬性message。
當這些點反映在你的腳本中時,它變成如下。
修改后的腳本:
谷歌應用腳??本:Code.gs
function processEdit(e) {
var { source, range, value, oldValue } = e;
var sheet = range.getSheet();
var editedRow = range.rowStart;
if (editedRow >= 3 && editedRow <= 1339 && range.columnStart == 7 && sheet.getSheetName() == "Change Requests") {
var message = "The Column G Cell " range.getA1Notation() " was modified from '" oldValue "' to '" value "'";
var namedRange = source.getRangeByName("EmailChange");
var rows = namedRange.getValues();
var headerRow = rows[0];
var template = HtmlService.createTemplateFromFile("Template");
var idx = editedRow - namedRange.getRow();
template.message = message;
template.rows = [rows[idx]];
template.headerRow = headerRow;
template.editedRow = editedRow;
var html = template.evaluate().getContent();
MailApp.sendEmail({
to: "[email protected]",
subject: "Change",
name: 'GSD BI',
htmlBody: html
});
}
}
HTML:Template.html
<p><?!= message ?></p>
<p>Please see the highlighted row below for information about the Changes.</p>
<hr>
<br>
<table cellpadding='5'>
<tr>
<th bgcolor='#eaeaea'><?= headerRow[0] ?></th>
<th bgcolor='#eaeaea'><?= headerRow[1] ?></th>
<th bgcolor='#eaeaea'><?= headerRow[2] ?></th>
</tr>
<? var rowIndex = 3; ?>
<? for(var i = 0; i < rows.length; i ) { ?>
<? var background = rowIndex === editedRow ? "#e06666" : "#ffffff"; ?>
<tr>
<td bgcolor='<?= background ?>'><?= rows[i][0] ?></td>
<td bgcolor='<?= background ?>'><?= rows[i][1] ?></td>
<td bgcolor='<?= background ?>'><?= rows[i][2] ?></td>
</tr>
<? rowIndex = rowIndex 1; ?>
<? } ?>
</table>
筆記:
在您的腳本中,
oldValue使用了。在這種情況下,請通過直接手動輸入值來編輯單元格。當您復制并粘貼該值時,oldValue不回傳。請注意這一點。此修改后的腳本適用于您的示例電子表格。如果您的實際電子表格不同,請再次檢查命名范圍的名稱。
在此腳本中,從您的顯示腳本中,它假定您的腳本由安裝的 OnEdit 觸發器運行。如果直接用腳本編輯器運行腳本,會因為沒有事件物件而出錯。請注意這一點。
參考:
- 類 MailApp 的 sendEmail(message)
- 可安裝觸發器
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/473291.html
標籤:谷歌应用脚本
