Как создать диаграмму с несколькими диапазонами в скрипте приложений Google для электронных таблиц Google - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть скрипт приложений Google, который развертывает переменное число листов в электронной таблице, к которой он прикреплен, с целью сбора данных из API, который работает просто отлично.

Тем не менее, я хочу визуализировать эти данные в виде графиков, и, поскольку они предназначены для самоуничижения, и поскольку существует переменное число этих листов данных, я хочу создать ряд диаграмм, представляющих различные части данные, и в этих диаграммах есть диапазон (ряд или ось y) для каждого листа данных, поэтому он варьируется в зависимости от инициализации или настройки.

Короче говоря, и чтобы сделать его менее запутанным, я просто хочу знать, как создать диаграмму и добавить диапазоны для каждого графика. Я мог бы перебрать список, например, но проблема в том, что я получаю такие ошибки, как: "TypeError: Не удалось найти модификацию функции в объекте EmbeddedChartBuilder. (Строка 97, файл" Код ") Отклонить "

Также обратите внимание, что я пытаюсь извлечь данные из других листов, поэтому я использую нотацию sheetName !.

Вот конкретная функция, над которой я работаю, обратите внимание, что я использую значения-заполнители просто для того, чтобы сейчас что-то заработало.

// TODO
function createCharts(){
  var sheet = getSheet('Graphs');
  var winrateChart = sheet.newChart().setChartType(Charts.ChartType.LINE).setPosition(2, 1, 0, 0);
  // for every user, add appropriate range to chart 
  winrateChart = winrateChart.modify().addRange('username1!A1:B2');
  winrateChart = winrateChart.modify().addRange('username2!A1:B2');
  sheet.updateChart(winrateChart);
  winrateChart = winrateChart.build()
  sheet.insertChart(winrateChart);
}

1 Ответ

0 голосов
/ 27 апреля 2018

Я выяснил, в чем заключались проблемы, в основном, путем экспериментов, я все еще придерживаюсь мнения, что в документации нет ясности и хороших примеров. Но вот мое понимание.

Прежде всего, есть три класса для решения этой проблемы: Sheet, EmbeddedChart и EmbeddedChartBuilder.

EmbeddedChartBuilder - это то, что возвращается Sheet.newChart (), используя метод .build (), вы получаете класс EmbeddedChart, который можно использовать в качестве параметра для Sheet.insertChart (). Кроме того, в результате экспериментов кажется, что вы должны вставить диаграмму с помощью Sheet.insertChart (EmbeddedChart), прежде чем сможете использовать EmbeddedChart.modify (), которая, в свою очередь, возвращает EmbeddedChartBuilder, который можно использовать для связывания любого числа методов, таких как добавление диапазона. И, конечно же, вам все равно придется использовать .build () для возврата EmbeddedChart из EmbeddedChartBuilder, а затем Sheet.updateChart (EmbeddedChart).

Последней проблемой была ошибка, которую я допустил, я вызывал .addRange (), используя строку в качестве параметра, однако addRange требует объект Range.

В любом случае, вот некоторый код, демонстрирующий пример использования, вы можете связать столько модификаторов (), сколько хотите, например, в цикле, который перебирает листы.

Примечание: getSheet - это пользовательская функция, которая делает то, что вы ожидаете.

function createCharts(){
  var sheet = getSheet('Graphs');
  var chart = sheet.newChart().setChartType(Charts.ChartType.LINE).setPosition(2,1,0,0).build(); // build returns an EmbeddedChart object 
  Logger.log(chart);
  sheet.insertChart(chart);
  chart = chart.modify().addRange(getSheet('someSheetName').getRange('B1:B999')).build();
  Logger.log(chart);
  sheet.updateChart(chart);
}

РЕДАКТИРОВАТЬ: вот вся работающая функция, бесполезная вне этого конкретного кода, однако вы можете увидеть логику, стоящую за ней, я попытаюсь сделать ее универсально полезной, перебирая листы или что-то в этом роде.

function createChart(range, x, y, title, width, height){
  // range: string; x: int; y: int; title: string; width: int; height; int
  // Creates a chart with data from all usernames for a given range at x row, y column, with a title, a width and height
  var sheet = getSheet('Graphs');
  // chart setup
  var chart = sheet.newChart()
  .setChartType(Charts.ChartType.LINE)
  .setPosition(x,y,0,0)
  .setNumHeaders(1)
  .setOption('title', title)
  .setOption('width', width)
  .setOption('height', height)
  .build();
  sheet.insertChart(chart);
  // for every username, add corresponding data into chart
  for(var i = 0; i < fortniteUsernames.length; i++){
    var username = fortniteUsernames[i];
    chart = chart.modify().addRange(getSheet(username).getRange(range)).build();
    sheet.updateChart(chart);    
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...