使用应用脚本将图表直接导入幻灯片 修改点:发件人:收件人:

问题描述

我一直在尝试编写代码,以允许我使用“按名称获取工作表”方法将所有图表导入特定的Google工作表中。

此后,我用工作表图表替换了特定的形状,但是我不断收到一个错误消息,说“对象不是Shape类型。(第22行)”。 我在页面元素上遇到了相同的错误,并已解决,但现在又遇到了另一个错误,因此我不确定如何继续前进。

请在下面找到文档链接代码片段: 幻灯片链接https://docs.google.com/presentation/d/1CyUkJ7S4eq00MRol3RzcdyAG1m6ovUFBK0H9fxfu-28/edit#slide=id.g8519fa7182_0_355 表格链接https://docs.google.com/spreadsheets/d/1tPc0KU2uYuN4rO32tW-s6lql_IW57kbDUdSR8ZSkVXY/edit#gid=0 代码

function importViewFreqCharts() {
  var dataSpreadsheetUrl = "https://docs.google.com/spreadsheets/d/1tPc0KU2uYuN4rO32tW-s6lql_IW57kbDUdSR8ZSkVXY/edit#gid=0"; //make sure this includes the '/edit at the end
  var ss = SpreadsheetApp.openByUrl(dataSpreadsheetUrl);
  var deck = SlidesApp.getActivePresentation();
  var deckTitle = SlidesApp.getActivePresentation().getName();
  var sheet = ss.getSheetByName(deckTitle);
  var charts = sheet.getCharts();
  var slides = deck.getSlides();
  var pieChartSlide = slides[0];
  var pieChart = charts[0];
  var pieChartText1 = sheet.getRange('G7').getValue();
  var pieChartText2 = sheet.getRange('G8').getValue();
  var pageElements = pieChartSlide.getPageElements();
    
  pageElements.forEach(function(pageElement){
   if(pageElement.getPageElementType() == "SHAPE"){
     
   if(pageElement.asShape().getShapeType() !== "UNSUPPORTED"){
     if(pageElement.asShape().getShapeType() == "RECTANGLE"){
     pageElement.asShape().replaceWithSheetsChart(pieChart);}
     
     if(pageElement.asShape().getShapeType() == "TEXT_Box"){
     pageElement.asShape().getText().replaceAllText('{{Sample text 1}}',pieChartText1);
     pageElement.asShape().getText().replaceAllText('{{Sample text 2}}',pieChartText2);
     }}}});
     }

解决方法

修改点:

  • 我认为在您的脚本中,运行pageElement.asShape().replaceWithSheetsChart(pieChart)时,pageElement变成SHEETS_CHART。这样,在if(pageElement.asShape().getShapeType() == "TEXT_BOX"){处发生错误。我认为您遇到问题的原因是这样的。

为了避免出现此问题,如何进行以下修改?

发件人:

if(pageElement.asShape().getShapeType() !== "UNSUPPORTED"){
  if(pageElement.asShape().getShapeType() == "RECTANGLE"){
  pageElement.asShape().replaceWithSheetsChart(pieChart);}
  
  if(pageElement.asShape().getShapeType() == "TEXT_BOX"){
  pageElement.asShape().getText().replaceAllText('{{Sample text 1}}',pieChartText1);
  pageElement.asShape().getText().replaceAllText('{{Sample text 2}}',pieChartText2);
  }}}});

收件人:

pageElements.forEach(function(pageElement){
  if(pageElement.getPageElementType() == "SHAPE"){
    if(pageElement.asShape().getShapeType() !== "UNSUPPORTED"){
      if (pageElement.asShape().getShapeType() == "RECTANGLE"){
        pageElement.asShape().replaceWithSheetsChart(pieChart);
      } else if(pageElement.asShape().getShapeType() == "TEXT_BOX"){
        pageElement.asShape().getText().replaceAllText('{{Sample text 1}}',pieChartText1);
        pageElement.asShape().getText().replaceAllText('{{Sample text 2}}',pieChartText2);
      }
    }
  }
});

pageElements.forEach(function(pageElement){
  if(pageElement.getPageElementType() == "SHAPE"){
    if(pageElement.asShape().getShapeType() !== "UNSUPPORTED"){
      if (pageElement.asShape().getShapeType() == "RECTANGLE"){
        pageElement.asShape().replaceWithSheetsChart(pieChart);
      }
      if(pageElement.getPageElementType() == "SHAPE" && pageElement.asShape().getShapeType() == "TEXT_BOX"){
        pageElement.asShape().getText().replaceAllText('{{Sample text 1}}',pieChartText2);
      }
    }
  }
});

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...