是否有可靠的 Google Apps 脚本函数/算法能够将嵌入图像从表格传输到文档?

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

我一直在使用 Google Apps 脚本中的一个函数,尝试从工作表传输图像和数据(两者都来自服务器),然后将格式化的数据和图像传输到 Google 文档。现在,我的数据已经格式化并且运行良好,但是在研究了 Google Apps 脚本中的函数之后,我不完全确定这是否可行。

免责声明:我已经看过 2020 年关于使用 OverGridImage 进行类似操作的帖子,但希望几年后能有修复!!

我以为我能做的是

function sendToCell() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const images = sheet.getImages(); 
  const doc = DocumentApp.create("Cell Images");
  const body = doc.getBody();
  
  if (images.length === 0) {
    SpreadsheetApp.getUi().alert("cell images not found");
    return;
  }

  images.forEach(image => {
    const blob = image.getBlob();
    const position = image.getAnchorCell().getA1Notation(); 
    
    body.appendParagraph(`Image from cell: ${position}`);
    body.appendImage(blob);
  });
  }

这并没有像我想象的那样工作,这可以通过 Apps 脚本实现吗?

google-sheets google-apps-script google-docs
1个回答
0
投票

修改要点:

  • 类 OverGridImage 没有
    getBlob
    的方法。 Ref 由此看来,错误发生在
    const blob = image.getBlob();
  • 不幸的是,在当前阶段,无法直接从网格图像中检索斑点。 Google 问题跟踪器已报告了这一情况。 Ref 因此,为了实现这一目标,我创建了 DocsServiceApp 作为 Google Apps 脚本库。 Ref 该库通过将电子表格解析为 XLSX 来检索图像作为 blob。

当你的脚本中使用这个库时,它会变成如下所示。

安装库

您可以在这里查看如何安装DocsServiceApp。

启用驱动器API

请在高级 Google 服务中启用 Drive API。

修改脚本

function sendToCell() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const images = DocsServiceApp.openBySpreadsheetId(ss.getId()).getSheetByName(sheet.getSheetName()).getImages();
  if (images.length === 0) {
    SpreadsheetApp.getUi().alert("cell images not found");
    return;
  }
  const doc = DocumentApp.create("Cell Images");
  const body = doc.getBody();
  images.forEach(({ range, image }) => {
    if (!image.innerCell) {
      const blob = image.blob;
      const position = range.a1Notation;
      body.appendParagraph(`Image from cell: ${position}`);
      body.appendImage(blob);
    }
  });
}

运行此脚本时,DocsServiceApp 会检索单元格上的图像,并将检索到的图像放入创建的 Google 文档中。

注:

  • 从您的显示脚本中,此修改后的脚本仅检索单元格上的图像。如果您想在单元格中和单元格上方都包含图像,请删除
    if (!image.innerCell) {
    }

参考:

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