我是編碼新手,特別是使用谷歌腳本。我有一個包含檔案和檔案 ID 的電子表格,當過期時,截止日期變為紅色,并像交通燈系統一樣完成。
但是,我需要為作業設定的是當 L 列中的值 = 1(基于行中的紅色和其他值為真)時發送的自動電子郵件,如果值為 0 我希望腳本越過它并向下移動穿過柱子。
我曾嘗試使用 do、while 和 for 等閱讀和測驗代碼,但我無法讓它作業。
所以我的設定是低效和基本的,我敢肯定,但它有效,只是很慢 - 請參閱下面的代碼。
當它達到 1 時,它然后使用激活單元格和偏移量從相應行中的單元格中獲取值并打包電子郵件并發送。然后腳本向下移動并檢查下一個單元格,但是因為我使用了 activate 并呼叫了多個函式,所以在列中回圈需要很長時間。
列是L,使用的范圍是L2:L60
如果有人能指出我對此最好的方法的正確方向,我將不勝感激。
function Findfirstcell()
{
SpreadsheetApp.getActive().getRange('l2').activate();
GetLvalue();
}
function GetLvalue()
{
var st= SpreadsheetApp.getActive().getActiveSheet().getActiveCell().getValue();
if (st < 1)
Movetonext();
else
Createemail();
}
function Createemail()
{
var ss= SpreadsheetApp.getActive()
var x = ss.getActiveSheet()
const s= x.getActiveCell();
var y= s.offset(0,-5);
var v= y.getValue();
var t= s.offset(0,-10);
var z= s.offset(0,-11);
var p= t.getValue();
var w= z.getValue();
var emailAddress = v '@gmail.com'
var message = p " is overdue - Document ID " w
var subject = w " is Overdue"
MailApp.sendEmail(emailAddress, subject, message);
var w= s.offset(0,-3);
w.setValue('Sent')
var end= s.offset(1,0);
end.activate();
GetLvalue();
}
function Movetonext()
{
var ss= SpreadsheetApp.getActive();
var s= ss.getActiveSheet().getActiveCell();
var end= s.offset(1,0);
end.activate();
var v= s.getValue();
if (v < 0)
ss.getRange('a1').activate();
else
GetLvalue();
}
我已經嘗試了其他幾種方法但沒有成功,一個在下面,它在第一行(這可能是因為值為 1)執行它,但它不會繼續向下列。我假設條件失敗,觸發函式 createemail 并且沒有什么可以回圈它
function Findfirstcell()
{
var ss= SpreadsheetApp.getActiveSheet().getActiveCell('l2').activate;
// Or
var ss= SpreadsheetApp.getActiveSheet().getRange('l2:l60');
for(ss<0; ss>0; ss ){createemail();}
}
function createemail()
{
var st= SpreadsheetApp.getActive().getCurrentCell();
var y= st.offset(0,-5);
var v= y.getValue();
var t= st.offset(0,-10);
var z= st.offset(0,-11);
var p= t.getValue();
var w= z.getValue();
var emailAddress = v '@gmail.com'
var message = p " is overdue - Document ID " w
var subject = w " is Overdue"
MailApp.sendEmail(emailAddress, subject, message);
}
任何指導將不勝感激
uj5u.com熱心網友回復:
我相信你的目標如下。
- 您想檢查“L”列的值是否為
0或1。 - 當值為 is
1而列“I”的值不是時Sent,您希望使用列“A”、“B”和“G”的值發送電子郵件。 - 發送電子郵件時,您希望將 的值放入
Sent“I”列。 - 您希望降低腳本的流程成本。
在這種情況下,以下流程如何?
- 從活動作業表中檢索值。
- 檢查“I”和“L”列的值并發送電子郵件并回傳范圍串列。
- 發送電子郵件時,“已發送”的值被放入“I”列。
當這個流程反映到 Google Apps 腳本時,它變成如下。
示例腳本:
function myFunction() {
// 1. Retrieve values from the active sheet.
const sheet = SpreadsheetApp.getActiveSheet();
const [, ...values] = sheet.getDataRange().getValues();
// 2. Check the value of column "I" and "L" and send the email and return the range list.
const rangeList = values.reduce((ar, [a, b, , , , , g, , i, , , l], r) => {
if (l > 0 && i != "Sent") {
var emailAddress = g '@gmail.com';
var message = b " is overdue - Document ID " a;
var subject = a " is Overdue";
MailApp.sendEmail(emailAddress, subject, message);
ar.push(`i${r 2}`);
}
return ar;
}, []);
// 3. When the email is sent, the value of "Sent" is put to the column "I".
if (rangeList.length > 0) sheet.getRangeList(rangeList).setValue("Sent");
}
參考:
- 降低()
- getRangeList(a1Notations)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/338167.html
