Get as Image генерирует неправильное изображение - Google App Script - PullRequest
0 голосов
/ 27 мая 2020

Моя цель - создать документы Google, используя информацию из таблицы Google с помощью скрипта приложения Google.

Я могу создать радиолокационную диаграмму из данных в таблицах Google. Радиолокационная диаграмма выглядит так:

Радиолокационная диаграмма выглядит хорошо

Проблема: когда я получаю диаграмму как изображение и вставляю ее в документ Google. Все выглядит не так. См. Изображение и код.

радарная диаграмма не так хороша

Мой код:

var chart = sheet.newChart()
   .setChartType(Charts.ChartType.RADAR)
   .setPosition(8,2,0,0)
   .setNumHeaders(1)
   .setOption('title', title)
   .addRange(sheet.getRange("A1:G1"))
   .addRange(sheet.getRange("A2:G2"))
   .setMergeStrategy(Charts.ChartMergeStrategy.MERGE_ROWS)
   .setTransposeRowsAndColumns(true)
   .setOption('vAxes',{0: {viewWindow: {min: 0, max: 100}}})
   .setOption('series', {0: {lineWidth: 4, color: '#FFA500'}})
   .build();

sheet.insertChart(chart);
var image = sheet.getCharts()[0].getBlob().getAs('image/png');

Самым последним похожим постом, который я нашел, был этот: Автоматизация создания радарных диаграмм в Google Do c с использованием скрипта Google Apps

Но ответа там не было. Надеюсь, кто-то может помочь.

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

var chart = sheet.newChart()
   .setChartType(Charts.ChartType.RADAR)
   .setPosition(8,2,0,0)
   .setNumHeaders(1)
   .setOption('title', title)
   .addRange(sheet.getRange("A1:G1"))
   .addRange(sheet.getRange("A2:G2"))
   .setMergeStrategy(Charts.ChartMergeStrategy.MERGE_ROWS)
   .setTransposeRowsAndColumns(true)
   .setOption('vAxes',{0: {viewWindow: {min: 0, max: 100}}})
   .setOption('series', {0: {lineWidth: 4, color: '#FFA500'}})
   .build();

sheet.insertChart(chart);

// workaround by Tanaike   
const slides = SlidesApp.create("temp");
const image = slides.getSlides()[0].insertSheetsChartAsImage(chart).getAs("image/png");
DriveApp.getFileById(slides.getId()).setTrashed(true);

var item = doc.getBody().findText("<text-to-replace>");
var r = item.getElement();
r.asText().setText("");
var img = r.getParent().asParagraph().insertInlineImage(0, image);

1 Ответ

0 голосов
/ 27 мая 2020

Как насчет этого ответа?

Проблема и решение:

Я думаю, что это может быть ошибка. В этом случае, как обходной путь, я использую Google Slides, которые могут напрямую размещать диаграмму, созданную с помощью Google Spreadsheet. Когда большой двоичный объект извлекается из диаграммы, помещенной в Google Slides, этот большой двоичный объект совпадает с chrat в таблице Google.

Измененный сценарий:

При изменении вашего сценария измените его как

От:
var image = sheet.getCharts()[0].getBlob().getAs('image/png');
Кому:
const slides = SlidesApp.create("temp");
const imageBlob = slides.getSlides()[0].insertSheetsChartAsImage(chart).getAs("image/png");
DriveApp.getFileById(slides.getId()).setTrashed(true);
DriveApp.createFile(imageBlob);
  • Когда imageBlob создается с DriveApp.createFile(imageBlob) в качестве файла, может быть получен следующий результат:

Результат:

Когда image и imageBlob созданы как файл, получаются левое и правое изображения соответственно.

enter image description here

Ссылка:

...