如何返回图像作为谷歌工作表自定义函数的输出?

问题描述

我在 Google 表格中有一个自定义函数。如何返回图像而不是普通数据(例如数字)作为此自定义函数输出

事实上,我将从 image-charts.com 站点读取这张图片,这意味着 image-charts.com 为我们创建了这张图片并给了我们它的网址,我实际上希望能够使用这张图片这是在 Google 表格单元格中创建的。

google sheet 自定义函数可以支持图片作为函数的返回值吗?

提前致谢

解决方法

更新

找到了您真正想要的答案。有 IMAGE (see reference),一个将 URL 作为图像添加到单元格中的函数(不知道它存在)。所以你可以这样做:

=IMAGE(GETCHARTURL(...))

原来的解决方法

您不能在单元格中添加图像。您也不能显示作为公式结果的图像。 最好的您可以做的是使用一个按钮调用 Google Apps 脚本函数,该函数使用 Sheet.insertImage (reference) 在单元格顶部添加图像。

我制作了这个小脚本,它会自动将图像添加到具有值 img+ 后跟图像网址(例如 img+https://example.com/image.png)的单元格顶部:

const IMAGE_HEIGHT = 100 // Image height in pixels
function sameRange(a,b) {
  return a.getGridId() === b.getGridId()
    && a.getA1Notation() === b.getA1Notation()
}
function addImages() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet()
  const toChange = sheet
    .createTextFinder(/^img\+https?:\/\//.source)
    .useRegularExpression(true)
    .findAll()

  // Remove old image(s)
  for (let img of sheet.getImages()) {
    const range = img.getAnchorCell()
    if (toChange.some(r => sameRange(r,range))) {
      img.remove()
    }
  }

  // Create new ones
  for (let range of toChange) {
    const url = range.getValue().toString().split(/\+(.*)$/,2)[1]
    const image = range.getSheet()
      .insertImage(url,range.getColumn(),range.getRow(),0)
    
    image.setAltTextTitle("Chart")

    const w = image.getWidth()
    const h = image.getHeight()
    image.setWidth(IMAGE_HEIGHT*w/h) // Keep aspect ratio
    image.setHeight(IMAGE_HEIGHT)
  }
}

然后只需创建一个新按钮(带有文本的绘图)并将 addImages 设置为指定的脚本。

我不知道您的确切用例,因此您可能需要修改脚本以更好地满足您的需求。

参考文献