Office js Excel Office JS筛选数据

Office js Excel Office JS筛选数据,office-js,Office Js,在Excel中,用户可以选择一个范围并按Ctrl+Shift+L以显示过滤器。我试图从Office.js加载项中获得等效的行为 最接近的方法是在我要筛选的范围内添加一个表,然后在表中添加一个筛选器。然而,这似乎有几个重大问题 首先,以这种方式为30000多行添加表的速度非常慢,我经常使用比这大得多的表。如果我在这个大小的范围内按Ctrl+Shift+L,它是瞬时的 此外,当我添加表时,Office.js会对范围进行样式化。我不想要任何新的样式的范围,我只是想增加一个过滤器 我当前的代码如下所示:

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

最接近的方法是在我要筛选的范围内添加一个表,然后在表中添加一个筛选器。然而,这似乎有几个重大问题

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

此外,当我添加表时,Office.js会对范围进行样式化。我不想要任何新的样式的范围,我只是想增加一个过滤器

我当前的代码如下所示:

等待Excel.run(异步ctx=>{
const table=await getOrCreateDataTable(ctx,“CostData”,新的ExcelRange(this.stateService.headerRow));//见下文
const validationColumn:Excel.TableColumn=table.columns.getItemOrNullObject(“验证”);
validationColumn.filter.applyCustomFilter(`*${searchString}*`)
等待ctx.sync();
});
export const getOrCreateDataTable=async(ctx:Excel.RequestContext,tableName:string,headerRow:ExcelRange):Promise=>{
let table:Excel.table=ctx.workbook.tables.getItemOrNullObject(tableName)
等待ctx.sync();
如果(!table.isNullObject)
log(`Table:${tableName}found`)
否则{
常数表=等待获取表(ctx,头错误表)
常量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
等待ctx.sync();
}
返回表;
}

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


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

您现在可以从Excel Javascript API 1.9开始为范围添加过滤器:

下面是一个应用自定义筛选器的示例,该筛选器将查找具有子字符串“test”的单元格:

使用以下工具移除过滤器:

sheet.autoFilter.remove()

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

或在脚本实验室中:

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);