我有一个SpreadSheet模板,其中包含一个ComboChart,一个系列类型列,另一种类型行。
当我尝试使用Google Apps脚本导出图表时,导出的图像没有显示列(显示为一行)。
基本上,我打开工作表,特别是更改范围内的值,更新图表,然后将图表捕获为图像。
我的Google Apps脚本功能是这样:
var hardcodedData = {
data: [['Muy Bajo', 0.1, 20],
['Bajo', 0.2, 32],
['Medio Bajo', 0.15, 51],
['Medio', 0.05, 42],
['Medio Alto', 0.07, 30],
['Alto', 0.23, 15],
['Muy Alto', 0.2, 11]],
fileId : 'id-of-spreadsheet-template'
}
function chartBuilder() {
var hdd = hardcodedData.data;
var sp = SpreadsheetApp.openById(hardcodedData.fileId);
var sh = sp.getSheets()[0];
sh.getRange('C2:D8').clearContent();
var clasific = [];
var ndvi = [];
var has = [];
for (var i = 0; i < hdd.length; i++) {
ndvi .push([hdd[i][1]]);
has .push([hdd[i][2]]);
}
sh.getRange(2, 3, 7, 1).setValues(ndvi);
sh.getRange(2, 4, 7, 1).setValues(has);
SpreadsheetApp.flush();
var chart = sh.getCharts()[0];
sh.updateChart(chart);
SpreadsheetApp.flush();
chart = sh.getCharts()[0];
var myimage = chart.getAs('image/gif');
//fill document------------------------------------------
var doc = DocumentApp.openById('id-of-document')
doc.getBody().clear();
var body = doc.getBody();
body.appendParagraph("");
body.insertImage(0, myimage)
}
是否可以像打开电子表格模板一样正确地打开和导出图表图像?
对不起,因为上下文不好,我没有发布图像的声誉。
答案 0 :(得分:0)
function saveImage() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet1');//Sheet where your chart is
var charts=sh.getCharts();
var blob=charts[0].getAs('image/png');//just have one
var folder=DriveApp.getFolderById('FolderId');//folder Id
folder.createFile(blob).setName('Image Name');//Image name
}
答案 1 :(得分:0)
我遇到了类似的问题,它似乎好像Chart.getAs(contentType)方法忽略了为EmbeddedChart对象设置的某些样式和选项。
这不是一个完美的解决方案,但是我已经通过Slides Apps Script服务找到了一种解决方法,尽管它需要设置空白的“代理演示文稿”以通过图表。
Slide.insertSheetsChartAsImage(chart)将给您图表正确显示为幻灯片演示文稿中的图像,然后您可以从那里使用该图像。
function chartBuilder() {
// ...
var chart = sh.getCharts()[0];
sh.updateChart(chart);
SpreadsheetApp.flush();
chart = sh.getCharts()[0];
// Insert sheets chart into slide as an embedded image
var proxySaveSlide = SlidesApp.openById("my-blank-sheets-presentation").getSlides()[0];
var chartImage = proxySaveSlide.insertSheetsChartAsImage(chart);
// Get image from slides
var myimage = chartImage.getAs('image/png');
//fill document------------------------------------------
var doc = DocumentApp.openById('id-of-document');
doc.getBody().clear();
var body = doc.getBody();
body.appendParagraph("");
body.insertImage(0, myimage);
// Delete image in presentation slide
chartImage.remove();
}
希望这会有所帮助!