我有一个 Excel 中的车辆预订表,其中 A 列为日期范围。目前,当打开 Excel 文档以删除旧数据时,我使用宏来删除早于 Today() 的任何行。由于安全问题,我们很快将无法再使用宏,因此我正在寻找 Office 脚本替代方案来选择早于今天的行,然后删除所选行。
我的脚本知识有限,因此我之前搜索过 VBA 代码来执行任务并根据我的需要进行了调整。我是 Office 脚本新手,无法找到可以满足我要求的脚本。
function main(workbook: ExcelScript.Workbook) {
// Get the active cell and worksheet.
let selectedSheet = workbook.getActiveWorksheet();
const dateCol:string = "Date"
// Get the first table (ListObject in VBA)
let table = selectedSheet.getTables()[0];
table.getAutoFilter().clearCriteria();
// get today
const today = formatDate(new Date());
console.log(today)
// Apply custom filter on table table column "Date"
table.getColumnByName(dateCol).getFilter().applyCustomFilter(`<${today}`);
const visRng = table.getRangeBetweenHeaderAndTotal().getSpecialCells(ExcelScript.SpecialCellType.visible);
if (visRng) {
const visAreas = visRng.getAreas().reverse();
let visRngRefs: string[] = [];
visAreas.forEach(x => {
visRngRefs.push(x.getAddress());
})
// remove rows
visRngRefs.forEach(x => {
selectedSheet.getRange(x).getEntireRow().delete(ExcelScript.DeleteShiftDirection.up);
})
}
table.getAutoFilter().clearCriteria();
}
// get the string of today, yyyy/MM/dd
function formatDate(date: Date): string {
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, '0'); // Months are zero-indexed
const day = date.getDate().toString().padStart(2, '0');
return `${year}/${month}/${day}`;
}
注意:测试日期为2024年10月2日。