问题描述
我在 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
设置为指定的脚本。
我不知道您的确切用例,因此您可能需要修改脚本以更好地满足您的需求。
参考文献
- IMAGE function (Docs Editor Help)
- Sheet.insertImage(url,column,row,offsetX,offsetY) (Google Apps Script reference)
- Class OverGridImage (Google Apps Script reference)
- Sheet.createTextFinder(findText) (Google Apps Script reference)
- Class TextFinder (Google Apps Script reference)
- Class Range (Google Apps Script reference)