1
在Excel,用戶可以選擇一個範圍和命中Ctrl鍵 + 移 + 大號顯示過濾器。我試圖從Office.js加載項獲取等同的行爲。Excel辦公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;
}