2017-09-01 7 views
1

ユーザーは、範囲を選択し、フィルタを表示するはCtrl +Shiftキー + Lを打つことができます。私はOffice.jsアドインから同等の動作を取得しようとしています。エクセルオフィスJSフィルタデータ

最も近いのは、フィルタリングしたい範囲にテーブルを追加してから、テーブルにフィルタを追加することです。しかし、それには重大な問題がいくつかあるようです。

最初に、この方法でテーブルを30000+個の行に追加するのは非常に遅く、それよりもはるかに大きなテーブルを頻繁に使用しています。私が行う場合Ctrl + シフト + 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とこの提案を訪問することをお勧めします。

関連する問題