Google Script如何为超链接图片单元格绑定自定义函数
能不能给公式生成的单元格图片绑定脚本?
不能。Google Sheets当前仅支持给置于单元格上方的浮动插入图片直接绑定Apps Script函数,你用=HYPERLINK()嵌套IMAGE()生成的是单元格内的公式渲染图片,既无法直接绑定点击事件,也不支持触发自定义函数。
两种实现需求的方案
方案1:替换为浮动图片绑定脚本(推荐)
你可以调整search()函数的逻辑,不用公式生成单元格图片,改为在对应位置插入浮动图片,再绑定see_file()函数,add_script_to_cell的实现逻辑如下:
function add_script_to_cell(sheet, targetCellA1Notation, imageUrl, bindFunctionName = "see_file") { // 先清除目标单元格原有内容 sheet.getRange(targetCellA1Notation).clearContent(); // 插入浮动图片到目标单元格位置 const insertedImage = sheet.insertImage(imageUrl, sheet.getRange(targetCellA1Notation).getColumn(), sheet.getRange(targetCellA1Notation).getRow() ); // 给图片绑定指定的脚本函数 insertedImage.assignScript(bindFunctionName); }
你可以修改原来的search()函数循环部分调用这个方法即可:
// 原来的for循环替换为如下逻辑 for(i=0; i < lenght; i++){ // 先写入A到BS列的业务数据 search.getRange(`A${i+1}:BS${i+1}`).setValues([nameResults[i]]); // 在BT列对应单元格插入浮动图片并绑定see_file函数 add_script_to_cell(search, `BT${i+1}`, "http://example.com/myimage.png"); }
方案2:保留单元格公式图片,用选择事件触发
如果必须保留单元格内的公式图片,可以通过全局的onSelectionChange事件触发器,当用户选中对应图片所在单元格时自动触发see_file()函数,实现逻辑如下:
// 全局选择事件触发器,无需手动绑定 function onSelectionChange(e) { const activeRange = e.range; const activeSheet = activeRange.getSheet(); // 判断当前选中的是recherche表的BT列,且单元格内容包含指定图片公式 if(activeSheet.getName() === "recherche" && activeRange.getColumn() === 72 /* BT列是第72列 */) { const cellFormula = activeRange.getFormula(); if(cellFormula.includes("IMAGE") && cellFormula.includes("http://example.com/myimage.png")) { // 触发目标函数 see_file(); } } }
注意事项
- 浮动图片的大小可以通过
setWidth()和setHeight()方法调整到和单元格尺寸匹配,不会影响表格布局 onSelectionChange事件仅在用户主动选中单元格时触发,不需要额外授权即可运行
内容的提问来源于stack exchange,提问作者user15887962
相关产品推荐
相关产品推荐

