FormulaCamp
Пройдено
14. Office Scripts и Power Automate · ExcelScript API · 20 мин

3. ExcelScript: таблицы и диаграммы

Урок 3 из 6
    Теория урока

    Скрипты надёжнее работают с умными таблицами, чем с адресами: таблица растёт вместе с данными, а столбцы ищутся по имени.

    • sheet.addTable("A1:D20", true) — превратить диапазон в таблицу (true — есть строка заголовков); table.setName("Продажи");
    • workbook.getTable("Продажи") — найти таблицу по имени; sheet.getTables() — все таблицы листа;
    • table.getColumnByName("Сумма").getRangeBetweenHeaderAndTotal() — данные столбца без заголовка и итогов;
    • table.addRow(-1, ["12.05.2026", "Астана", 54000]) — добавить строку в конец; table.getRowCount() — число строк данных;
    • table.setShowTotals(true) — строка итогов; table.getSort().apply([{ key: 2, ascending: false }]) — сортировка по третьему столбцу (отсчёт с 0);
    • table.getColumnByName("Город").getFilter().applyValuesFilter(["Алматы"]) — фильтр по значениям.

    Диаграмма строится методом листа addChart(тип, данные); типы перечислены в ExcelScript.ChartType: columnClustered (гистограмма), line, pie, barClustered.

    function main(workbook: ExcelScript.Workbook) {
      const sheet = workbook.getWorksheet("Продажи");
      const table = sheet.addTable(sheet.getUsedRange(), true);
      table.setName("Продажи");
      table.setShowTotals(true);
      table.getSort().apply([{ key: 2, ascending: false }]);
    
      const chart = sheet.addChart(ExcelScript.ChartType.columnClustered, table.getRange());
      chart.getTitle().setText("Продажи по городам");
      chart.setPosition("G2");
      console.log("Строк в таблице: " + table.getRowCount());
    }

    Скрипт выполняется синхронно: не нужно ни await, ни context.sync(), как в надстройках на Office.js. console.log печатает в панель вывода редактора скриптов.

    Повторный запуск: второй вызов addTable на тех же ячейках завершится ошибкой — таблица уже есть. Поэтому скрипты, которые запускаются регулярно, сначала ищут таблицу через workbook.getTable("Продажи") и создают её, только если результат пустой (undefined).

    Тренажёр не выполняет макросы и скрипты. Код из урока запускайте в настольном Excel (VBA) или в Excel для Интернета (Office Scripts). Здесь вы учитесь читать код и проверяете себя формулами и тестом.

    Проверьте себя

    1. Какой вызов вернёт значения столбца «Сумма» без заголовка и строки итогов?
    2. Что сделает table.addRow(-1, ["Астана", 54000]) ?
    3. Какую строку вставить, чтобы построить гистограмму по диапазону A1:B7?
    4. Скрипт запускают каждый день, и на второй день он падает на строке sheet.addTable("A1:D50", true). Почему?
    5. Нужен ли await workbook.sync() в Office Scripts?
    6. table.getSort().apply([{ key: 2, ascending: false }]) — по какому столбцу таблицы и как сортируем?