Partager via


Exemples de table

Ces exemples présentent des interactions courantes avec les tableaux Excel.

Créer une table triée

Cet exemple crée une table à partir de la plage utilisée de la feuille de calcul actuelle, puis la trie en fonction de la première colonne.

function main(workbook: ExcelScript.Workbook) {
  // Get the current worksheet.
  const selectedSheet = workbook.getActiveWorksheet();

  // Create a table with the used cells.
  const usedRange = selectedSheet.getUsedRange();
  const newTable = selectedSheet.addTable(usedRange, true);

  // Sort the table using the first column.
  newTable.getSort().apply([{ key: 0, ascending: true }]);
}

Filtrer une table

Cet exemple filtre une table existante à l’aide des valeurs de l’une des colonnes.

function main(workbook: ExcelScript.Workbook) {
  // Get the table in the workbook named "StationTable".
  const table = workbook.getTable("StationTable");

  // Get the "Station" table column for the filter.
  const stationColumn = table.getColumnByName("Station");

  // Apply a filter to the table that will only show rows 
  // with a value of "Station-1" in the "Station" column.
  stationColumn.getFilter().applyValuesFilter(["Station-1"]);
}

Filtrer une valeur

L’exemple précédent filtre une table en fonction d’une liste de valeurs incluses. Pour exclure une valeur particulière de la table, vous devez fournir la liste de toutes les autres valeurs de la colonne. Cet exemple utilise une fonction columnToSet pour convertir une colonne en un ensemble de valeurs uniques. La valeur exclue (« Station-1 ») est alors supprimée pour ce jeu.

function main(workbook: ExcelScript.Workbook) {
  // Get the table in the workbook named "StationTable".
  const table = workbook.getTable("StationTable");

  // Get the "Station" table column for the filter.
  const stationColumn = table.getColumnByName("Station");

  // Get a list of unique values in the station column.
  const stationSet = columnToSet(stationColumn);

  // Apply a filter to the table that will only show rows
  // that don't have a value of "Station-1" in the "Station" column. 
  stationColumn.getFilter().applyValuesFilter(stationSet.filter((value) => {
      return value !== "Station-1";
  }));
}

/**
 * Convert a column into a set so it only contains unique values.
 */
function columnToSet(column: ExcelScript.TableColumn): string[] {
    const range = column.getRangeBetweenHeaderAndTotal().getValues() as string[][];
    const columnSet: string[] = [];
    range.forEach((value) => {
        if (!columnSet.includes(value[0])) {
            columnSet.push(value[0]);
        }
    });

    return columnSet;
}

Supprimer les filtres de la colonne du tableau

Cet exemple supprime les filtres d’une colonne de table, en fonction de l’emplacement de la cellule active. Le script détecte si la cellule fait partie d’un tableau, détermine la colonne de table et efface les filtres qui y sont appliqués.

Téléchargez table-with-filter.xlsx pour un classeur prêt à l’emploi. Ajoutez le script suivant pour essayer l’exemple vous-même !

function main(workbook: ExcelScript.Workbook) {
  // Get the active cell.
  const cell = workbook.getActiveCell();

  // Get the tables associated with that cell.
  // Since tables can't overlap, this will be one table at most.
  const currentTable = cell.getTables()[0];

  // If there's no table on the selection, end the script.
  if (!currentTable) {
    console.log("The selection is not in a table.");
    return;
  }

  // Get the table header above the current cell by referencing its column.
  const entireColumn = cell.getEntireColumn();
  const intersect = entireColumn.getIntersection(currentTable.getRange());
  const headerCellValue = intersect.getCell(0, 0).getValue() as string;

  // Get the TableColumn object matching that header.
  const tableColumn = currentTable.getColumnByName(headerCellValue);

  // Clear the filters on that table column.
  tableColumn.getFilter().clear();
}

Avant d’effacer le filtre de colonne (notez la cellule active)

Cellule active avant l’effacement du filtre de colonne.

Après l’effacement du filtre de colonne

Cellule active après l’effacement du filtre de colonne.

Conseil

Si vous souhaitez en savoir plus sur la façon d’enregistrer le filtre avant de l’effacer (et de le réappliquer ultérieurement), consultez Déplacer des lignes entre des tables en enregistrant des filtres, un exemple plus avancé.

Référencer dynamiquement des valeurs de table

Ce script utilise la syntaxe « @COLUMN_NAME » pour définir des formules dans une colonne de table. Les noms de colonnes de la table peuvent être modifiés sans modifier ce script.

function main(workbook: ExcelScript.Workbook) {
  // Get the current worksheet.
  const table = workbook.getTable("Profits");

  // Get the column names for columns 2 and 3.
  // Note that these are 1-based indices.
  const nameOfColumn2 = table.getColumn(2).getName();
  const nameOfColumn3 = table.getColumn(3).getName();

  // Set the formula of the fourth column to be the product of the values found
  // in that row's second and third columns.
  const combinedColumn = table.getColumn(4).getRangeBetweenHeaderAndTotal();
  combinedColumn.setFormula(`=[@[${nameOfColumn2}]]*[@[${nameOfColumn3}]]`);
}

Avant le script

Month Price Unités vendues Total
Jan 45 5
Fév 45 3
Mars 45 6

Après le script

Month Price Unités vendues Total
Jan 45 5 225
Fév 45 3 135
Mars 45 6 270