Office 脚本删除早于今天的行

问题描述 投票:0回答:1

我有一个 Excel 中的车辆预订表,其中 A 列为日期范围。目前,当打开 Excel 文档以删除旧数据时,我使用宏来删除早于 Today() 的任何行。由于安全问题,我们很快将无法再使用宏,因此我正在寻找 Office 脚本替代方案来选择早于今天的行,然后删除所选行。

我的脚本知识有限,因此我之前搜索过 VBA 代码来执行任务并根据我的需要进行了调整。我是 Office 脚本新手,无法找到可以满足我要求的脚本。

excel office365 delete-row office-scripts
1个回答
0
投票
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日。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.