2017-09-01 167 views
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; 
} 

回答

0

目前ExcelApi僅支持Table對象上過濾。

你在這裏找的是支持過濾Range。我強烈建議訪問UserVoice和這個建議。