office-js - Excel Office JS筛选器数据

标签 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;
}

最佳答案

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

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

关于office-js - Excel Office JS筛选器数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46002962/

相关文章:

excel - Office VSTO 加载项与使用 Office JS API 的 Office 加载项

javascript - 在 Word 桌面客户端中,是否有正确的方法从 Javascript Api for Office 保存文档?

excel - 使用office.js设置值时如何阻止Excel自动格式化

javascript - Excel-JS - 重新计算不起作用

javascript - 使用 JavaScript 从 Outlook Web App 获取附件

office365 - Office-ui-fabric-core 某些图标未显示

angularjs - Outlook如何在输入字段末尾添加 'x'?

office-js - Mac 上的 Outlook Addin API body.getAsync 缺少某些样式

javascript - Office.context.mailbox.displayNewMessageForm 在移动设备中不起作用