Google Sheets脚本需求:按单元格值替换单元格上方图片
我修改了Tanaike的脚本,想改成从当前Sheet取可替换的图片,代码如下:
function onEdit(e) { var editedRange = e.range.getA1Notation().toString(); console.log(SpreadsheetApp.getActiveSpreadsheet().toast(editedRange)) if (editedRange == "A1") { replacetTheImage(); } } function replacetTheImage() { var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("A1"); var valueoftheA1 = ss.getValue(); if(valueoftheA1 > 399){ // console.log(SpreadsheetApp.getActiveSpreadsheet().toast("I was here 1")) var images = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getImages(); var blob = DriveApp.getFileByID("1ArSLT7rCypMWeTpTrddwyvxh3sMmwjSh").getBlob(); // was 1bIz3v9UDp-qq8qWfM-CK_OxWl9m7d7qY images[0].replace(blob); } SpreadsheetApp.flush(); }
从脚本编辑器运行replacetTheImage()时,收到错误:
1:35:09 PM Error TypeError: DriveApp.getFileByID is not a function replacetTheImage @ Code.gs:31
在A1单元格输入100或400时,Sheet右下角会弹出显示A1的提示框。
我最初添加Blob的代码是这样的:
function TanikeGDimageOverCells() { const imageFileId = "0BxWwc9tEdCGOTHEtc3hLYl9vNGc"; const blob = DriveApp.getFileById(imageFileId).getBlob(); SpreadsheetApp.getActiveSheet().insertImage(blob, 1, 10); }
问题解决及修正代码
1. 先修复拼写错误
你遇到的TypeError是因为方法名拼写错误:正确的写法是DriveApp.getFileById(小写d),不是getFileByID。
2. 实现从当前Sheet取图并替换的完整代码
以下代码直接从Cell2/Cell4提取图片,替换Cell3上方的目标图片:
function onEdit(e) { const editedRange = e.range.getA1Notation(); // 仅编辑A1时触发逻辑 if (editedRange === "A1") { updateImageAboveCell3(); } } function updateImageAboveCell3() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); const cell1Value = sheet.getRange("A1").getValue(); const cell3 = sheet.getRange("A2"); // Cell3对应的A1标记是A2 let targetBlob = null; // 根据Cell1值选择对应图片 if (cell1Value === 200) { const cell2Images = sheet.getRange("B1").getImages(); targetBlob = cell2Images.length > 0 ? cell2Images[0].getBlob() : null; } else if (cell1Value === 600) { const cell4Images = sheet.getRange("B2").getImages(); targetBlob = cell4Images.length > 0 ? cell4Images[0].getBlob() : null; } if (!targetBlob) return; // 定位Cell3上方的图片 const allImages = sheet.getImages(); const cell3Top = cell3.getTop(); let targetImage = allImages.find(img => { // 判断图片是否在Cell3上方且水平位置匹配 return img.getTop() < cell3Top && img.getLeft() >= cell3.getLeft() && img.getLeft() <= cell3.getLeft() + cell3.getWidth(); }); if (targetImage) { targetImage.replace(targetBlob); } else { // 没有目标图片则插入到Cell3上方 sheet.insertImage(targetBlob, cell3.getColumn(), cell3.getRow()); } SpreadsheetApp.flush(); }
代码说明
- 仅当编辑A1单元格时触发图片更新
- 通过
getRange().getImages()直接提取当前Sheet内单元格的图片Blob - 通过位置判断找到Cell3上方的目标图片,精准替换
- 若Cell3上方无图片,自动插入对应图片
注意事项
- 确保Cell2(B1)和Cell4(B2)已插入对应图片
- 若Sheet内有多个图片,可根据实际需求调整位置判断逻辑
内容的提问来源于stack exchange,提问作者nxf
相关产品推荐
相关产品推荐

