尝试访问 Google 表格中的图表时,AppScript 抛出电子表格异常错误

问题描述 投票:0回答:1

我正在运行以下代码

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 进行读取或写入)时,我能够读取和写入而不会出现任何错误。

不确定这里发生了什么错误。

任何人都可以帮助我解决我在这里做错的事情吗?

google-apps-script google-visualization google-workspace
1个回答
0
投票

我也遇到过和你一样的问题。我想这可能是一个错误。当时,我使用了以下解决方法。此解决方法来自 RefRef

  1. 创建 Gooels Slide 作为临时文件。
  2. 将图表从电子表格复制到幻灯片。
  3. 从幻灯片中检索图像斑点。
  4. 将图像 blob 放入文档中。
  5. 删除临时文件。

在此解决方法中,电子表格图表通过幻灯片放入文档中。当您的脚本中使用此解决方法时,进行以下修改如何?

修改后的脚本:

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());
      

参考:

© www.soinside.com 2019 - 2024. All rights reserved.