代码之家  ›  专栏  ›  技术社区  ›  Daniil

如何使用Apps Script从Google表格复制单元格中的图像?

  •  0
  • Daniil  · 技术社区  · 2 年前

    我面临着一个问题,我不知道如何与直接插入谷歌表格单元格中的图像进行交互。按照惯例,我会将剪贴板中的屏幕截图粘贴到单元格中。

    function main(){
      const ss = SpreadsheetApp.getActiveSpreadsheet();
      const sheet = ss.getSheetByName("mysheet");
     const data = sheet.getDataRange().getDisplayValues();
    
      const folder_id = "FOLDER_ID";
      const folder = DriveApp.getFolderById(folder_id);
    
      const doc = DocumentApp.create("KPI report");
      const id = doc.getId();
    
      const file = DriveApp.getFileById(id);
      file.moveTo(folder);
    
      const body = doc.getBody();
      body.appendTable(data);
    }
    

    我的任务是将整个表格复制到谷歌文档中。我正在使用这段代码,它可以工作,但它忽略了其中有图像的单元格。

    这个 .getValue() 对包含图像的单元格执行的方法返回: CellImage .

    我如何与这些图像交互并将其复制到我的谷歌文档中?

    .getImages() 返回一个空数组

    .getValue() 返回字符串“CellImage”

    .getFormula() 不返回任何内容

    https://stackoverflow.com/search?q=user%3A7108653+CellImage

    我试图在这里寻找解决方案,但它们对我不起作用。我直接从剪贴板将图片粘贴到单元格中,这张图片没有任何网址或公式。我想了解如何与它交互,以便我可以将其复制到谷歌文档中。

    0 回复  |  直到 2 年前
        1
  •  1
  •   Wicket    2 年前

    没有简单的方法可以通过使用复制粘贴将添加到Google表格电子表格中的图像添加到另一种类型的文档中或另存为Google Drive中的文件。

    使用Google Apps脚本,可以通过以下方式获取这些图像 SpreadsheetApp.Sheet.getImages() 请参阅 * 。此方法将返回类OverGridImage的数组。不幸的是,这个类没有检索blob的方法。您可以尝试使用 SpreadsheetApp.OverGridImage.getUrl() 但是,在使用复制粘贴添加图像的情况下,此方法很可能会返回null。

    但是,可以通过将工作表导出为HTML,然后将此HTML文件转换为Google文档格式来获取图像。早些时候,我发现了Tanaike写的一篇博客文章 Converting Google Spreadsheet to HTML Table using Google Apps Script 解释要遵循的步骤,并包括要使用的脚本。

    如果你发现Tainake解释的过程和脚本太复杂或太难,可以考虑将图像复制到谷歌幻灯片演示文稿或谷歌文档中,而不是复制到电子表格中。从这些应用程序处理这些图像可能更容易。

    Google表格中的图片

    可以使用多种方法添加Google Sheet中的图像。根据使用的方法,可以使用Google Apps脚本对这些图像执行一些任务。

    可用于处理图像的方法属于 Class CellImage 和 Class OverGridImage .

    如果您不确定,可能需要检查您的SpreasheetApp。表格和相关电子表格。检查它们是否能容纳图像。

    值得注意的是,Class CellImage有getContentUrl(),而Class OverGridImage不可用,使用Google Sheets web应用程序可以通过单击图像选项(右上角)将OverGridImage转换为CellImage,然后 将图像放入所选单元格 .

    OverGridImage contextual menu

    不幸的是,getContentUrl()方法抛出错误

    function myFunction() {
      const range = SpreadsheetApp.getCurrentCell();
      const value = range.getValue();
      Logger.log(range.getSheet().getName())
      Logger.log(range.getA1Notation())
      Logger.log(value);
      Logger.log(value.getContentUrl())
    }
    

    日志(不包括时间戳列)

    注意事项 执行已开始
    资讯 表一
    资讯 A1
    资讯 CellImage
    错误 异常:在获取对象SpreadsheetApp的方法或属性getContentUrl时发生意外错误。CellImage。
    myFunction@Untitled.gs:7

    相关的