Excel Office JS过滤数据

jav*_*kie 5 office-js

在 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;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*eur 0

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

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