我有一個腳本,可以查看G列的值,如果A列的對應單元格是空的,就給我發一封郵件。
------什么作業------
它對靜態值起作用:它對G列中每個不為空的單元格發送一封電子郵件,而A列中沒有該單元格的值。---- 什么不作業 ----
- 當從另一個標簽獲取A列的值時,它為我認為是每一個G列的單元格(空或不空)發送幾封電子郵件。這樣一來,就好像所有的G和A單元格都有資料,所以我得到了多封不需要的電子郵件。
這是腳本代碼:
const ss =SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet to send emails'/span>)。
const data = sh.getRange('A2:G' sh. getLastRow().getValues()。
data.forEach(r=>/span>{
let overdueValue = r[0] 。
if (overdueValue === ""/span>){
let name = r[6] 。
let message = 'Text ' name;
let subject = 'TEXT.'
MailApp.sendEmail('[email protected]'/span>, subject, message);
}
});
}
而這是測驗表的鏈接:
修復1:獲取G列最后一行的具體內容:
。const gValues = sh. getRange('G1:G').getValues() 。
const gLastRow = gValues.filter(String).length。
或者
修復2。過濾資料
const data = sh.getRange('A2:G'/span> sh. getLastRow().getValues(). filter(r => r[6] )。
注:
- 正如Kris在評論中提到的,有一種特殊情況下,獲取上面的最后一行會失敗(與
getNextDataCell相同)。在列的第一行和最后一行之間有空白行的情況下,這將不能正確地獲得最后一行。如果你有這樣的資料,那么請使用第二種方法,即過濾資料。 - 如果你的G列的資料在第一行和最后一行之間沒有空白單元格,那么任何方法都應該有效。
uj5u.com熱心網友回復:
我檢查了你的測驗表,sh.getLastRow()是1000.
。選項1
如果G列在填充的單元格之間不會出現空單元格,那么你可以這樣做:
如果G列在填充的單元格之間不會出現空單元格,那么你可以這樣做。
const ss =SpreadsheetApp.getActive()。
const sheet = ss.getSheetByName("Sheet to send emails"/span>)。
//獲得G列的第一個單元格。
var gHeader = sheet.getRange(1, 7) 。
//等同于使用CTRL 向下箭頭來尋找最后一個da。
var lastRow = gcell.getNextDataCell(SpreadsheetApp. Direction.DOWN).getRow()。
const data = sheet. getRange(2, 1, lastRow, 7).getValues()。
選項2
在你的代碼中添加另一個條件--像這樣:
data.forEach(r=>/span>{
let overdueValue = r[0] 。
let name = r[6]
//check if the value in col A is blankd and col G is not blank.
if (overdueValue === " && name !== ") {
let message = 'Text ' name;
let subject = 'TEXT.'
MailApp.sendEmail('[email protected]'/span>, subject, message);
}
});
為了加快它的速度,使用一個命名的范圍來限制它要迭代的行數:
const ss = SpreadsheetApp.getActive();
const data = ss.getRangeByName("Your_NamedRange_Here").getValues()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/313427.html
標籤:



