You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 22:43:16