2017-09-01 2 views
1

In Excel ein Benutzer einen Bereich auswählen und treffen Ctrl +Umschalt +L Filter zu zeigen. Ich versuche, gleiches Verhalten von einem Office.js-Add-In zu erhalten.Excel Office-JS Filterdaten

Am nächsten komme ich dazu, eine Tabelle über den Bereich hinzuzufügen, den ich filtern möchte, und dann einen Filter zur Tabelle hinzuzufügen. Es scheint jedoch einige signifikante Probleme damit zu geben.

Erstens ist das Hinzufügen einer Tabelle auf diese Weise für mehr als 30000 Zeilen sehr langsam und ich verwende häufig sehr viel größere Tabellen. Wenn ich das tue Ctrl + Shift + L über einen Bereich dieser Größe ist es sofort.

Darüber hinaus, wenn ich die Tabelle hinzufügen, stylized Office.js den Bereich. Ich möchte kein neues Styling für den Bereich, für den ich nur einen Filter hinzufügen möchte.

Meine aktuellen Code sieht wie folgt aus:

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

Antwort

0

Derzeit ExcelApi unterstützt nur auf einem Table Objekt Filterung.

Was Sie hier suchen, wäre die Unterstützung zum Filtern einer Range. Ich würde empfehlen, die UserVoice und diesen Vorschlag zu besuchen.