我正在运行以下代码
var reportSheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1HWg9ip6iC7wnw9e80IpM6ISKslMbtO591SLoKHTQGms/edit");
var reportStudentGraph = reportSheet.getSheetByName("student_usage_graph");
var reportDoc = DocumentApp.openByUrl("https://docs.google.com/document/d/1RGqWBsUH8vzfDYMf16hIjPJ6fG33BCVQJll_e9fA07k/edit")
var body = reportDoc.getBody();
//Get the Student Related Graphs
var student_usage_graphs = reportStudentGraph.getCharts();
Logger.log(student_usage_graphs.length)
//Start Writing into the Document
body.appendParagraph("Academic Delivery and Learning Outcomes Report").setHeading(DocumentApp.ParagraphHeading.TITLE)
var graph_table = body.appendTable([["",""]]);
graph_table.setBorderColor('#ffffff'); // White for no border
graph_table.getCell(0,0).appendImage(student_usage_graphs[0]);
element = graph_table.getCell(0,0).findElement(DocumentApp.ElementType.INLINE_IMAGE).getElement().asInlineImage();
element.setHeight(320*element.getHeight()/element.getWidth()).setWidth(320);//ensuring the chart is sized to the table
上面的代码运行良好,直到我在表中附加图像时访问学生使用情况图的行
graph_table.getCell(0,0).appendImage(student_usage_graphs[0]);
在上面的行中,我收到以下错误。
Exception: Service Spreadsheets failed while accessing document with id 1HWg9ip6iC7wnw9e80IpM6ISKslMbtO591SLoKHTQGms.
这意味着在这一行之前访问工作表没有问题,只有当我访问图表时才会出现错误。
我尝试将图表制作为Blob作为替代,当我将图表导出为Blob时,这再次引发了相同的错误。
当我注释掉我突出显示的行时,我可以访问电子表格并从工作表中获取/写入其他数据,无论代码中尝试访问电子表格中的图形的位置,我都会收到上述错误。
但是当以下行运行时
Logger.log(student_usage_graphs.length)
我得到 1.0 作为输出,这意味着它正在检测到工作表中存在一个图表,但是当我访问时
student_usage_graphs[0]
这是我收到提到的错误的地方。
当我在工作表 reportStudentGraph 上尝试其他操作(例如使用 getValue 和 setValue 进行读取或写入)时,我能够读取和写入而不会出现任何错误。
不确定这里发生了什么错误。
任何人都可以帮助我解决我在这里做错的事情吗?
我也遇到过和你一样的问题。我想这可能是一个错误。当时,我使用了以下解决方法。此解决方法来自 Ref 和 Ref。
在此解决方法中,电子表格图表通过幻灯片放入文档中。当您的脚本中使用此解决方法时,进行以下修改如何?
function myFunction() {
var reportSheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1HWg9ip6iC7wnw9e80IpM6ISKslMbtO591SLoKHTQGms/edit");
var reportStudentGraph = reportSheet.getSheetByName("student_usage_graph");
var reportDoc = DocumentApp.openByUrl("https://docs.google.com/document/d/1RGqWBsUH8vzfDYMf16hIjPJ6fG33BCVQJll_e9fA07k/edit");
var body = reportDoc.getBody();
var student_usage_graphs = reportStudentGraph.getCharts();
Logger.log(student_usage_graphs.length)
body.appendParagraph("Academic Delivery and Learning Outcomes Report").setHeading(DocumentApp.ParagraphHeading.TITLE);
var graph_table = body.appendTable([["", ""]]);
graph_table.setBorderColor('#ffffff');
// --- I modified the below script.
var temp = SlidesApp.create("temp");
var image = temp.getSlides()[0].insertSheetsChart(student_usage_graphs[0]);
temp.saveAndClose();
var chart = image.asImage().getBlob();
graph_table.getCell(0, 0).appendImage(chart);
DriveApp.getFileById(temp.getId()).setTrashed(true);
// ---
element = graph_table.getCell(0, 0).findElement(DocumentApp.ElementType.INLINE_IMAGE).getElement().asInlineImage();
element.setHeight(320 * element.getHeight() / element.getWidth()).setWidth(320);
}
当我使用组合图测试您的显示脚本时,我确认了同样的问题。而且,当我使用相同的图表测试这个修改后的脚本时,我确认没有发生错误并且图表已正确放入文档中。
我想下面的修改或许可以用。
来自
var image = temp.getSlides()[0].insertSheetsChart(student_usage_graphs[0]);
temp.saveAndClose();
var chart = image.asImage().getBlob();
致
var chart = temp.getSlides()[0].insertSheetsChart(student_usage_graphs[0]).asImage().getBlob();
如果您使用Drive API,还可以使用以下修改。如果您使用 Drive API,请在高级 Google 服务中启用 Drive API v3。
来自
DriveApp.getFileById(temp.getId()).setTrashed(true);
致
Drive.Files.remove(temp.getId());