Как рисовать диаграммы, не отображая данные на листе?

Я пытаюсь отобразить диаграммы в таблице Google с помощью скрипта приложения Google.

Мне кажется, что единственный способ передать данные в диаграмму - это отобразить эти данные на листе и передать диапазон данных в диаграмму. Как таковой:

var chart = SpreadsheetApp.getActiveSheet().newChart().asPieChart()
    .addRange(range)
    .build();

SpreadsheetApp.getActiveSheet().insertChart(chart);

Где диапазон - это диапазон на листе, содержащий данные диаграммы.

Мой вопрос: есть ли способ отобразить диаграмму без необходимости отображать необработанные данные как таковые?


person Muhammad Gelbana    schedule 07.12.2017    source источник
comment
Хакерское решение и зависит от того, зачем вам нужны скрытые данные, но вы можете использовать диапазон данных со второго листа, а затем скрыть лист?   -  person Sam Scholefield    schedule 07.12.2017


Ответы (1)


Как насчет этих обходных путей? Я не мог найти, как создавать диаграммы без диапазона электронных таблиц для EmbeddedChartBuilder. Поэтому я подумал о двух других способах обхода.

Обходной путь 1

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

var id = "### spreadsheet id ###"; // There is data in this spreadsheet.
var name = "### sheet name ###";
var datarange = "### data range ###";
var range = SpreadsheetApp.openById(id).getSheetByName(name).getRange(datarange);
var chart = SpreadsheetApp.getActiveSheet().newChart().asPieChart()
  .addRange(range)
  .build();
SpreadsheetApp.getActiveSheet().insertChart(chart);

Обходной путь 2

В этом случае, чтобы не отображать данные для диаграмм, он считывает данные с помощью newDataTable(). Вы можете добавить свои данные в newDataTable().

Созданная диаграмма импортируется в электронную таблицу в виде изображения. Образец диаграммы взят здесь.

var data = Charts.newDataTable()
    .addColumn(Charts.ColumnType.STRING, 'Month')
    .addColumn(Charts.ColumnType.NUMBER, 'In Store')
    .addColumn(Charts.ColumnType.NUMBER, 'Online')
    .addRow(['January', 10, 1])
    .addRow(['February', 12, 1])
    .addRow(['March', 20, 2])
    .addRow(['April', 25, 3])
    .addRow(['May', 30, 4])
    .build();

var chart = Charts.newAreaChart()
    .setDataTable(data)
    .setStacked()
    .setRange(0, 40)
    .setTitle('Sales per Month')
    .build().getBlob();

SpreadsheetApp.getActiveSheet().insertImage(chart, 1, 1);

Использованная литература :

Если они вам не пригодятся, извините.

person Tanaike    schedule 07.12.2017