Добавление диаграммы в Google Sheets с помощью Google Script - PullRequest
1 голос
/ 04 февраля 2020

Я пытаюсь добавить диаграмму в лист на Google Sheets, но Google Script говорит: «Не удается найти метод insertChart (Charts.Chart). (Строка 39, файл« Код »)». Но я использую метод, который написан в документации. Что я делаю не так?

function doGet()
{
    var app = SpreadsheetApp;
    var ss = app.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    //
    var artistsArray;
    var dataArtists;
    //
    artists = {};
    dataArtists = Charts.newDataTable()
      .addColumn(Charts.ColumnType.STRING, 'Artists')
      .addColumn(Charts.ColumnType.NUMBER, 'Count');
    //  
    for (var line = 2 ; line <= ss.getDataRange().getNumRows() ; line++)
    {
      value = sheet.getRange(line, 3).getValue();
      if (isNaN(artists[value]))
        artists[value] = 1;
      else
        artists[value]++;
    }
    //
    for(var key in artists)
    {
      console.log(key, artists[key])
      dataArtists.addRow([key, artists[key]]);
    }
    dataArtists.build()
    //
    var artistsChart = Charts.newBarChart()
      .setDataTable(dataArtists)
      .setTitle('Number of Tracks per Artist')
      .setXAxisTitle('Number of  Tracks')
      .setYAxisTitle('Artists')
      .setDimensions(600, 500)
      .build();
      //
    sheet.insertChart(artistsChart);
}

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Вы создаете объект Chart , используя сервисные функции Charts. Чтобы использовать insertChart() функцию , вам необходим объект EmbeddedChart из службы электронных таблиц. Чтобы создать встроенную диаграмму, используйте функцию newChart() , а для ее редактирования используйте EmbeddedChartBuilder и EmbeddedBarChartBuilder (как вам требуется гистограмма) * функции 1014 *.

Приведенный ниже код является переводом вашего текущего кода, вам необходимо установить диапазон данных с помощью функции addRange, в данном случае это ячейки "B4: C17":

function createChart() {
  var app = SpreadsheetApp;
  var ss = app.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  var artistsChart = sheet.newChart().asBarChart()
  .addRange(sheet.getRange("B4:C17"))
  .setTitle('Number of Tracks per Artist')
  .setXAxisTitle('Number of  Tracks')
  .setYAxisTitle('Artists')
  .setPosition(4, 7, 0, 0)
  .build();

  sheet.insertChart(artistsChart);
}

Обратите внимание, что вы должны изменить имя вашей функции, потому что имя функции doGet используется для Web Apps .

1 голос
/ 04 февраля 2020

Проблема

Метод insertChart(Charts.Chart) "не найден". Сообщения об ошибках в Google Apps Script могут быть довольно запутанными, но, как только они объяснены, им становится немного легче следовать - на самом деле ошибка говорит о том, что ее нельзя вызвать на экземпляре Chart. Если вы снова посмотрите на документы, то увидите, что они принимают экземпляр EmbeddedChart, и именно это вызывает проблему.

Решение

Вместо этого для построения диаграммы с использованием сервиса Charts используйте метод newChart() - он дает экземпляр EmbeddedChartBuilder, который вы можете настроить так, как вам нравится, вызвать build() на нем и передать полученный EmbeddedChart в insertChart.

Ссылки

  1. newChart() метод ref
  2. EmbeddedChartBuilder класс ref
  3. EmbeddedChart класс ref

Примечания

Если бы я знал это с самого начала, это было бы сэкономил мне много времени отладки - как общее практическое правило, если вы видите сообщение об ошибке с сообщением «не удается найти метод», вы пытаетесь передать аргумент тип / экземпляр экземпляра класса , чем требуется (например, прохождение undefined)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...