我為自己撰寫了 Google Sheets 的代碼,只要滿足條件,它就會自動向我發送電子郵件。我已經設法完成了這項作業,但僅當我手動編輯作業表時 - 我需要它在作業表自身更改時自動觸發。
我的作業表為我的客戶管理我的訂閱,只要第一列上的單元格轉到數字 3 - 該行被標記為“即將發生” - 并理想地向我發送電子郵件。(只要該專案的有效期不到 2 周,數字 3 就會自動出現)。
如果您認為您可以發現我沒有正確設定的地方,請告訴我:) 謝謝!
在 Google Apps Script 中,我嘗試設定觸發器(但無法自動設定)
Choose which function to run
sendMailEdit
Which runs at deployment
Head
Select event source
From spreadsheet
Select event type
On edit (also tried On change)
這是我的代碼:
function sendMailEdit(e){
if (e.range.columnStart != 1 || e.value !=3) return;
const rData = e.source.getSheetByName('SUBSCRIPTIONS').getRange(e.range.rowStart,1,1,14).getValues();
let mis = rData[0][1];
let dat = new Date(rData[0][2]).toLocaleDateString("en-US");
let cos = rData[0][3];
let aut = rData[0][4];
let typ = rData[0][5];
let des = rData[0][6];
let pro = rData[0][7];
let not = rData[0][8];
let cnu = rData[0][9];
let cna = rData[0][10];
let sta = rData[0][13];
let now = new Date().toLocaleString("en-US");
let msg = ":: AUTOMATED EMAIL FROM - NP PROJECTS SHEET 2021 / SUBSCRIPIONS PAGE :: " "\n" "\n" sta " SUBSCRIPTION FOR: " "\n" dat " (" mis " days missing)" "\n" "Cost: " cos "$" "\n" "Is autopay active: " aut "\n" "\n" "CLIENT: " cna " (" cnu ")" "\n" "\n" "Product: " typ "\n" "\n" "Descprition: " des "\n" "\n" "Provider: " pro "\n" "\n" "Notes: " not "\n" "\n" "\n" "(This email was triggered at:" now ")";
Logger.log(msg);
GmailApp.sendEmail("[email protected]", "IMPENDING SUBSCRIPTION (automail)", msg)
}
uj5u.com熱心網友回復:
為什么不做onEdit():
function onEdit(e){
const col = e.range.getColumn()
const sheetName = e.source.getActiveSheet().getName()
// skip if not col 1 or "My Target Sheet" is the sheet name
if( col != 1 || sheetName != "My Target Sheet") return
// here you can get the data and send the Email
// you may need to call a function sendEmail(){} as I am not sure whether you can trigger an email send in the onEdit(e) function
}
但是,如果您的作業表中的單元格包含一個公式,那么這將不起作用,因為沒有人實際編輯過該作業表,即沒有發生任何事件。如果是這種情況,那么我建議您創建一個每天(或每小時)運行的時間觸發器并檢查是否有任何行在 a 列中有 3
function report3s(){
const rows = SpreadsheetApp.getActive().getSheetByName("Sheet1").getDataRange().getValues()
rows.forEach( row => {
const col_a_value = row[0]
if( col_a_value != 3 ) return
// do something here
})
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/339969.html
