使用Google Apps Script向Google Sheet插入图片遇像素超限问题求助
解决Google Apps Script插入图片到Google Sheet时的像素超限问题
问题出在图片的总像素数超过了Google Sheet的限制(100万像素)——哪怕文件体积只有400KB,只要分辨率太高(比如4000×3000就有1200万像素),就会触发这个错误。你需要在插入图片前自动压缩分辨率,保持宽高比同时把总像素控制在100万以内。
以下是修改后的完整代码,新增了图片尺寸调整的逻辑,同时修正了原代码里的Logger语法错误:
function insertImagesToSheet() { // 替换为你的目标工作表名称 var sheetName = "你的工作表名称"; var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName); if (!sheet) { Logger.log("Sheet '" + sheetName + "' not found."); return; } var cellAddresses = ["A5", "A16", "A27", "A38", "A49", "A60", "A71", "A82", "A93", "A104", "A115", "A126", "A137", "A148", "A159"]; var folderName = "SSTest"; var folder = DriveApp.getFoldersByName(folderName).next(); var imageFiles = folder.getFiles(); // 获取排序后的图片名称 var sortedImageNames = []; while (imageFiles.hasNext()) { var imageFile = imageFiles.next(); sortedImageNames.push(imageFile.getName()); } sortedImageNames.sort(); // 上传排序后的图片 for (var i = 0; i < sortedImageNames.length && i < cellAddresses.length; i++) { var imageName = sortedImageNames[i]; var imageFile = folder.getFilesByName(imageName).next(); var blob = imageFile.getBlob(); // 新增:调整图片尺寸,确保总像素不超过100万 blob = resizeImage(blob); var cell = sheet.getRange(cellAddresses[i]); var image = sheet.insertImage(blob, cell.getColumn(), cell.getRow()); } Logger.log("Uploaded and sorted images in '" + sheetName + "'."); } // 调整图片尺寸的辅助函数 function resizeImage(blob, maxPixels = 1000000) { var img = Utilities.newBlob(blob.getBytes(), blob.getContentType()).getAs('image/png'); var width = img.getWidth(); var height = img.getHeight(); var totalPixels = width * height; // 如果像素数已经符合要求,直接返回原Blob if (totalPixels <= maxPixels) return blob; // 计算缩放比例,保持宽高比 var scaleFactor = Math.sqrt(maxPixels / totalPixels); var newWidth = Math.floor(width * scaleFactor); var newHeight = Math.floor(height * scaleFactor); // 调整尺寸后返回新的Blob return img.setWidth(newWidth).setHeight(newHeight).getBlob(); }
关键改动说明:
- 新增
resizeImage辅助函数:自动计算缩放比例,保持图片宽高比,将总像素压缩到100万以内 - 在插入图片前调用该函数处理Blob,避免触发像素超限错误
- 修正了原代码中Logger语句的字符串拼接错误(原代码里的
"是转义错误,替换成正常的单引号拼接)
内容的提问来源于stack exchange,提问作者Aman
相关产品推荐
相关产品推荐

