Excel Office JS筛选器数据

问题描述 投票:3回答:2

在Excel中,用户可以选择一个范围,然后按Ctrl + Shift + L以显示过滤器。我试图从Office.js加载项中获得等效的行为。

我最接近的是在我要过滤的范围内添加一个表,然后向该表添加过滤器。但是,这似乎有几个重大问题。

[首先,以这种方式为30000+行添加表非常缓慢,我经常使用比该表大得多的表。如果我在该大小的范围内执行Ctrl + Shift + L,则它是瞬时的。

此外,当我添加表时,Office.js风格化了范围。我不希望该范围有任何新样式,我只想添加一个过滤器。

我当前的代码如下:

await Excel.run(async ctx => {
    const table = await getOrCreateDataTable(ctx, "CostData", new ExcelRange(this.stateService.headerRow)); //see below
    const validationColumn: Excel.TableColumn = table.columns.getItemOrNullObject("Validation");
    validationColumn.filter.applyCustomFilter(`*${searchString}*`)
    await ctx.sync();
});

export const getOrCreateDataTable = async(ctx: Excel.RequestContext, tableName: string, headerRow: ExcelRange): Promise < Excel.Table > => {

    let table: Excel.Table = ctx.workbook.tables.getItemOrNullObject(tableName)
    await ctx.sync();
    if (!table.isNullObject)
        console.log(`Table: ${tableName} found`)
    else {
        const sheet = await getSheet(ctx, headerRow.sheet)
        const headerRange = sheet.getRange(headerRow.getRange()).getEntireRow().getUsedRange()
        const usedRange: Excel.Range = sheet.getUsedRange()
        const tableRange = headerRange.getBoundingRect(usedRange.getLastCell())
        table = ctx.workbook.tables.add(tableRange, true)
        table.name = tableName
        await ctx.sync();

    }
    return table;
}
office-js
2个回答
0
投票

当前ExcelApi仅支持对Table对象进行过滤。

您在这里寻找的将是支持过滤Range。我强烈建议您访问UserVoice和此建议。


0
投票

您现在可以自Excel Javascript API 1.9起将过滤器添加到范围:https://docs.microsoft.com/en-us/office/dev/add-ins/reference/requirement-sets/excel-api-1-9-requirement-set

这里是一个应用自定义过滤器的示例,该过滤器将查找带有子字符串“ test”的单元格:

Excel.run((ctx) => {
    var sheet = ctx.workbook.worksheets.getActiveWorksheet();
    var range = sheet.getUsedRange();
    var columnIndex = 3; //zero based index
    var condition = { criterion1: "=*test*", filterOn: Excel.FilterOn.custom }        

    sheet.autoFilter.apply(range, columnIndex, condition);

    return ctx.sync();
}).catch(errorHandlerFunction);

删除过滤器:

sheet.autoFilter.remove();

在此处查找更多详细信息:

https://docs.microsoft.com/en-us/office/dev/add-ins/excel/excel-add-ins-worksheets#filter-data

或在脚本实验室中:https://www.microsoft.com/en-us/garage/profiles/script-lab/

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