Diаgrammide joonistamine Google App Scriptiga

// Когда открываешь таблицу — появляется меню для выбора диаграммы

function onOpen(e) {
  addMenu(); 
}

// Добавляет меню “Diagrammid” с кнопками для построения графиков

function addMenu() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Diagrammid') // Меню "Диаграммы"
    .addItem('Tulpdiagramm', 'BarChart')      // Кнопка: Столбчатая диаграмма
    .addItem('Joondiagramm', 'LineChart')     // Кнопка: Линейная диаграмма
    .addItem('Sektordiagramm', 'PieChart')    // Кнопка: Круговая диаграмма
    .addToUi(); 
}

// Строит столбчатую диаграмму
function BarChart() {
  AddChart('Tulp'); // Tulp = столбцы
}

// Строит линейную диаграмму
function LineChart() {
  AddChart('Joon'); // Joon = линия
}

// Строит круговую диаграмму
function PieChart() {
  AddChart('Sektor'); // Sektor = круг
}

// Эта функция делает всю работу по созданию диаграммы

function AddChart(type) {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); // Берём текущую таблицу
  var sheet = ss.getSheetByName('SALES'); // Ищем лист с названием "SALES"
  
  // Если лист не найден — показываем сообщение и выходим
  if (!sheet) {
    SpreadsheetApp.getUi().alert("Лист 'SALES' не найден!");
    return;
  }

  var lastRow = sheet.getLastRow(); // Последняя строка с данными
  
  // Если данных меньше двух строк — нечего строить
  if (lastRow < 2) {
    SpreadsheetApp.getUi().alert("Недостаточно данных для диаграммы.");
    return;
  }

  // Удаляем все старые диаграммы, чтобы не мешались
  var charts = sheet.getCharts();
  charts.forEach(chart => sheet.removeChart(chart));

  // Берём таблицу с заголовками и данными (A и B столбцы)
  var dataRange = sheet.getRange("A1:B" + lastRow);

  // Готовим новый график
  var builder = sheet.newChart()
    .addRange(dataRange) // указываем диапазон данных
    .setOption('title', 'Диаграмма продаж') // заголовок графика
    .setPosition(2, 4, 0, 0); // где разместить график

  // Если выбрана линия
  if (type === 'Joon') {
    builder.setChartType(Charts.ChartType.LINE)
           .setOption('hAxis.title', 'Продавец') // горизонтальная ось
           .setOption('vAxis.title', 'Доллары США'); // вертикальная ось
  }
  // Если выбраны столбцы
  else if (type === 'Tulp') {
    builder.setChartType(Charts.ChartType.BAR)
           .setOption('vAxis.title', 'Продавец') // вертикальная ось
           .setOption('hAxis.title', 'Доллары США'); // горизонтальная ось
  }
  // Если выбран круг
  else if (type === 'Sektor') {
    builder.setChartType(Charts.ChartType.PIE)
           .setOption('is3D', true); // объёмная круговая диаграмма
  }

  // Добавляем диаграмму на лист
  sheet.insertChart(builder.build());
}

Код на удаление диограмм

function KustutaDiagramm() {
  // Получаем открытую таблицу (ту, в которой мы сейчас находимся)
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  
  // Пытаемся найти лист с названием "SALES"
  var sheet = ss.getSheetByName('SALES');
  
  // Если такого листа нет — выводим сообщение и прекращаем выполнение
  if (!sheet) {
    SpreadsheetApp.getUi().alert("Lehte nimega 'SALES' ei leitud!"); // "Лист с именем 'SALES' не найден!"
    return;
  }

  // Получаем все диаграммы, которые есть на листе
  var charts = sheet.getCharts();

  // Если диаграмм вообще нет — сообщаем об этом и выходим
  if (charts.length === 0) {
    SpreadsheetApp.getUi().alert("Diagramme pole, mida kustutada."); // "Нет диаграмм, нечего удалять."
    return;
  }

  // Проходим по всем найденным диаграммам и удаляем каждую
  charts.forEach(chart => sheet.removeChart(chart));

  // Сообщаем пользователю, что все диаграммы успешно удалены
  SpreadsheetApp.getUi().alert("Kõik diagrammid on edukalt kustutatud."); // "Все диаграммы успешно удалены."
}

Откуда бролась идея и информация