【问题标题】:Get range of google spreadsheet into an image using google script使用谷歌脚本将谷歌电子表格的范围变成图像
【发布时间】:2019-10-10 16:53:07
【问题描述】:

我正在构建一个搜索工具,通过它可以使用谷歌脚本将谷歌范围转换为图像。我试图将该数据范围粘贴到谷歌幻灯片,然后从那里获得缩略图及其网址。我正在搜索任何其他直接为我提供谷歌表格选定范围的图像网址的工具。

谢谢

【问题讨论】:

标签: google-apps-script


【解决方案1】:

这是一个非常有趣的问题。

我不确定这样做的原因,但这里有一个答案:

这会在您的工作表顶部创建一个自定义菜单,上面写着:

自定义函数 => 将范围导出到图像文件

当你点击它时:

  • 将您选择的任何内容转换为工作表中的表格
  • 保存
  • 从中生成图像
  • 将图像保存到驱动器
  • 显示带有已保存图像链接的弹出窗口。

代码已准备好处理要导出的多个范围,但现在它只导出选定的范围。

function onOpen(e) {
  //Create custom menu to export range to Slides.
  SpreadsheetApp.getUi()
      .createMenu('Custom Functions')
      .addItem('Export Range to Image Files', 'SelectedRangeToImage')
      .addToUi();
}


function SelectedRangeToImage() {
  var slide = RangeToSlides();
  var slideId = slide.getId();
  var images  = [];
  for (var x=0; x<slide.getSlides().length;x++) {
    var image = SlidesToImage(slide.getName()+x, slideId, slide.getSlides()[x].getObjectId());
    images.push(image);
  }

  //Show interface with links to all images
  var ui = SpreadsheetApp.getUi();
  var html = HtmlService.createHtmlOutput();
  html.append("<p>Your images:</p>");
  html.append("<ul>");
  for (var i=0; i<images.length; i++) {
    html.append("<li><a href='"+images[i].getUrl()+"'>"+images[i].getName()+"</a></li>");
  }
  html.append("</ul>");
  html.append("<input type='button' value='Close' onclick='google.script.host.close()' />");
  ui.showModalDialog(html, "Exporting results:");
}

function RangeToSlides() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = ss.getActiveRange();

  var rangeValues = range.getDisplayValues();
  var rangeHorizontalAlignments = range.getHorizontalAlignments()
  var rangeBackgrounds = range.getBackgrounds();
  var rangeFontWeights = range.getFontWeights();


  var sl = SlidesApp.create("ExportToImage"+new Date());
  var slide = sl.getSlides()[0];

  //Create table with size of the range
  var table = slide.insertTable(rangeValues.length, rangeValues[0].length);
  for (var x=0; x<rangeValues.length; x++) {
    for (var y=0; y<rangeValues[x].length; y++) {
      var cell = table.getCell(x,y);
      cell.getText().setText(rangeValues[x][y]); //Set text
      cell.getFill().setSolidFill(rangeBackgrounds[x][y]); //Set background
      cell.getText().getTextStyle().setBold(rangeFontWeights[x][y]=="bold"?true:false); //Set text formatting
      var alignment;
      switch(rangeHorizontalAlignments[x][y]) {
        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); //Set text alignment
    }
  }
  sl.saveAndClose();
  return sl;  
}

function SlidesToImage(name, presentationId, slideId) {
  var url = "https://slides.googleapis.com/v1/presentations/"+presentationId+"/pages/"+slideId+"/thumbnail";
  var options = {
    headers: {
      Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
    }
  };
  var response = UrlFetchApp.fetch(url, options);
  var responseJson = JSON.parse(response.getContentText());
  var imageurl = responseJson.contentUrl;
  var imageResponse = UrlFetchApp.fetch(imageurl, options);
  var blob = imageResponse.getBlob();
  blob.setName(name);
  var resultingFile = DriveApp.createFile(blob);
  return resultingFile;
}

希望这会有所帮助!

参考资料:

  1. https://stackoverflow.com/a/51391196/11869748
  2. How to download Google Slides as images?
  3. https://developers.google.com/slides/reference/rest/v1/presentations.pages/getThumbnail

【讨论】:

  • 感谢您的帮助@ZektorH,我正在尝试完全相同的过程。
  • @AbhijeetPandit 提醒接受对您有帮助的答案,以便其他用户可以找到它们。
  • 它对我不起作用.. 或者我做错了.. 例外:对象 (SLIDES_API1674193731_0) 没有文本。以及其他错误。自定义功能菜单和脚本可以开始执行。但上述错误。
  • @ihightower 我建议您打开一个新问题并提供:您尝试导出的电子表格示例、您正在使用的脚本、此答案的链接、特定(和完整)错误您收到的消息。
  • 您想知道为什么 - 教育 - 老师可以轻松地在电子表格中构建表格,但需要在幻灯片中作为背景,让学生在上面工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 2018-06-03
  • 1970-01-01
  • 2013-11-13
相关资源
最近更新 更多