Служба графиков работает путем рендеринга изображения диаграммы на сервере. Если вы хотите вставить диаграмму, созданную таким образом, в электронную таблицу, вам нужно будет использовать метод Sheet.insertImage()
.
Вот рабочий пример:
function insertChart() {
var sheet = SpreadsheetApp.getActiveSheet();
var sampleData = Charts.newDataTable()
.addColumn(Charts.ColumnType.STRING, "Year")
.addColumn(Charts.ColumnType.NUMBER, "Sales")
.addColumn(Charts.ColumnType.NUMBER, "Expenses")
.addRow(["2004", 1000, 400])
.addRow(["2005", 1170, 460])
.addRow(["2006", 660, 1120])
.addRow(["2007", 1030, 540])
.addRow(["2008", 800, 600])
.addRow(["2009", 943, 678])
.addRow(["2010", 1020, 550])
.addRow(["2011", 910, 700])
.addRow(["2012", 1230, 840])
.build();
var chart = Charts.newColumnChart()
.setTitle('Sales & Expenses')
.setXAxisTitle('Year')
.setYAxisTitle('Amount (USD)')
.setDimensions(600, 500)
.setDataTable(sampleData)
.build();
// Insert the sheet image into cell A1.
sheet.insertImage(chart.getBlob(), 1, 1);
}
Учитывая ваш комментарий выше, похоже, что вы явно не хотите использовать EmbeddedChart
.
Один из недостатков этого подхода заключается в том, что при обновлении базовых данных вам необходимо повторно выполнить функцию скрипта приложений, чтобы сгенерировать обновленную диаграмму.
EmbeddedChart
позволяет Диаграмма для динамического обновления при изменении базовых данных на листе. Это также немного проще с точки зрения реализации:
function insertEmbeddedChart() {
var sheet = SpreadsheetApp.getActiveSheet();
// Assuming a sheet with only a grid of cells that matches
// the data manually specified above.
var dataRange = sheet.getDataRange();
var chartBuilder = sheet.newChart().asColumnChart();
var chart = chartBuilder.addRange(dataRange)
.setTitle('Sales and Expenses')
.setXAxisTitle('Year')
.setYAxisTitle('Amount (USD)')
.setNumHeaders(1)
.setPosition(1, (sheet.getLastColumn()+1), 0, 0)
.build();
sheet.insertChart(chart);
}