如何使用Apps脚本将Google表格内容粘贴到Google幻灯片中?

时间:2018-07-17 21:50:51

标签: google-apps-script google-sheets google-slides-api google-slides

我现在搜索了三天,无法找到将Google表格范围放入幻灯片的方法。

var range = SpreadsheetApp.getActive().getActiveSheet().getRange('A1:B3');

var slidesPage = SlidesApp.openById(presentationId).getSlides()[0];

slidesPage.insertTable(range);

似乎只能从另一张幻灯片中复制表格并将其粘贴到页面中。为什么无法将电子表格中的范围粘贴到幻灯片中?至少可以手动进行。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

不幸的是,电子表格的范围还不能直接放到Slide表中(至少现在)。那么如何解决呢?该示例脚本的流程如下。

  1. 从电子表格中检索值。
  2. 通过检索到的值的行和列为幻灯片创建表。
  3. 将值放入创建的表中。

示例脚本:

var values = SpreadsheetApp.getActive().getActiveSheet().getRange('A1:B3').getValues();
var slidesPage = SlidesApp.openById(presentationId).getSlides()[0];
var table = slidesPage.insertTable(rows, columns);
var rows = values.length;
var columns = values[0].length;
for (var r = 0; r < rows; r++) {
  for (var c = 0; c < columns; c++) {
    table.getCell(r, c).getText().setText(values[r][c]);
  }
}

注意:

  • 使用此脚本时,请准备presentationId

参考文献:

如果这不是您想要的,对不起。

编辑:

在此修改后的脚本中,添加了以下几点。

  • 使用getDisplayValues()检索电子表格的值。这样,可以复制格式。
    • 我认为似乎将Spreadsheet手动复制到Slide的情况也可能相同。
  • 复制单元格背景。
  • 复制单元格的字体粗细。
  • 复制单元格的对齐方式。

修改后的脚本:

var range = SpreadsheetApp.getActive().getActiveSheet().getRange('A1:B3');
var values = range.getDisplayValues();
var horizontalAlignments = range.getHorizontalAlignments()
var backgrounds = range.getBackgrounds();
var fontWeights = range.getFontWeights();
var slidesPage = SlidesApp.openById(presentationId).getSlides()[0];
var rows = values.length;
var columns = values[0].length;
var table = slidesPage.insertTable(rows, columns);
for (var r = 0; r < rows; r++) {
  for (var c = 0; c < columns; c++) {
    var cell = table.getCell(r, c);
    cell.getText().setText(values[r][c]);
    cell.getFill().setSolidFill(backgrounds[r][c]);
    cell.getText().getTextStyle().setBold(fontWeights[r][c] == "bold" ? true : false);
    var alignment;
    switch(horizontalAlignments[r][c]) {
      case "general-left":
        alignment = SlidesApp.ParagraphAlignment.START;
        break;
      case "general-right":
        alignment = SlidesApp.ParagraphAlignment.END;
        break;
      case "center":
        alignment = SlidesApp.ParagraphAlignment.CENTER;
        break;
    }
    cell.getText().getParagraphStyle().setParagraphAlignment(alignment);
  }
}

参考文献: