我在撰寫腳本方面還是相當新的,并且正在嘗試撰寫一個腳本,該腳本在 L 列中的日期后一天洗掉一行。資料在 A133 到 L117 的范圍內。我從幾個不同的 [來源] [1] 獲得了下面的代碼,但它有幾個問題。第一個是我在第 3 行收到錯誤訊息“無法讀取 Null 的屬性 'getRange',即使我已經描述了我希望它從中提取資料的陣列。
第二個問題是下面的代碼 - 我不確定它是否正確,如果能幫助它滿足我當前的需求,我將不勝感激。這是代碼。
function DeleteOldEntries() {
var sheet = SpreadsheetApp.getActive().getSheetByName("Sheet 1");
var values = sheet.getRange(2,1,5,12);
var currentDate = new Date();//today
for (i=lastrow;i>=3;i--) {
var tempDate = values[i-1][2];// arrays are 0 indexed so row1 = values[0] and col3 = [2]
if ((tempDate!=NaN) && (tempDate <= currentDate))
{
sheet.deleteRow(i);
}//closes if
}//closes for loop
}//closes function
任何幫助將不勝感激。
uj5u.com熱心網友回復:
對于您的第一個問題:
第一個是我在第 3 行收到錯誤訊息“無法讀取 Null 的屬性 'getRange',即使我已經描述了我希望它從中提取資料的陣列。
此錯誤表示您的sheet
變數不正確。
這可能意味著您的作業表名稱不正確,或者沒有活動的電子表格。如果您在未附加到表格檔案的腳本檔案中運行此操作,則需要使用SpreadsheetApp.openById()
或SpreadsheetApp.openByUrl()
代替SpreadsheetApp.getActive()
.
附帶說明一下,您也沒有檢索 中的任何值values
,而只是宣告了一個范圍。
// var values = sheet.getRange(2,1,5,12);
var values = sheet.getRange(2,1,5,12).getValues();
對于您的第二個問題:
比較日期并不是那么簡單。
洗掉所有非從今天開始的行的可能解決方案是宣告currentDate
為一個字串,其格式類似于您在日期列中使用的格式。例如,如果您的作業表日期看起來像 ( May-06 2022
):
const values = sheet.getRange(2,1,5,12).getDisplayValues();
const currentDate = Utilities.formatDate(new Date(), `YOUR_TIMEZONE`, `MMM-dd YYY`)
然后,您可以使用您撰寫的 for 回圈洗掉作業表中日期與當前日期不匹配的所有行:
for (let i = lastrow; i > 2; i--) {
if (values[i-1][2] !== currentDate) {
sheet.deleteRow(i)
}
}
如果您要洗掉特別是1 天前的日期,則必須使用日期比較,這可以通過幾種方式完成。
這是一個解決方案:
const currentDate = new Date();
for (let i = lastrow; i > 2; i--) {
if (currentDate.getDate()-1 === values[i-1][2].getDate()) {
sheet.deleteRow(i)
}
}
解決方案
日期作為字串方法:
function DeleteOldEntries() {
const sheet = SpreadsheetApp.getActive().getSheetByName("Sheet 1");
const values = sheet.getRange(2, 1, sheet.getLastRow(), sheet.getLastColumn()).getDisplayValues();
const currentDate = Utilities.formatDate(new Date(), "YOUR_TIMEZONE", "m/d/yyyy");
for (let i = values.length-1; i >= 0; i--) {
if (values[i][11] !== currentDate) {
sheet.deleteRow(i 2)
}
}
}
日期比較:(嚴格一天前)
function DeleteOldEntries() {
const sheet = SpreadsheetApp.getActive().getSheetByName("Sheet 1");
const values = sheet.getRange(2, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues();
const currentDate = new Date();
for (let i = values.length; i >= 0; i--) {
if (currentDate.getDate()-1 === values[i][11].getDate()) {
sheet.deleteRow(i 2);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/470802.html