修复Google Sheets脚本错误:Utilities.newBlob参数不匹配
修复批量转换HTML到表格富文本的代码错误
错误原因
报错的核心问题是你用getValues()获取了整列的二维数组,但Utilities.newBlob()要求第一个参数是字符串,不是数组。单单元格场景下getValue()返回字符串所以可行,批量取整列时返回的是二维数组,直接传入就会触发参数不匹配的异常。
修复后的代码
function convertHTMLToRichText() { var ss = SpreadsheetApp.openById("18AvwS9scxVxix7CgPhr2UGjH7qts21j8xv47xInY-hw"); var targetSheet = ss.getSheets()[5]; // 要写入富文本的目标工作表 var dataSheet = ss.getSheetByName('test'); var lastRow = dataSheet.getLastRow(); // 获取G列从第2行开始的所有HTML数据(二维数组格式) var htmlValues = targetSheet.getRange("G2:G" + lastRow).getValues(); // 遍历每一行,逐个处理HTML内容 for (var i = 0; i < htmlValues.length; i++) { var html = htmlValues[i][0]; // 取出当前行的单个HTML字符串 if (!html) continue; // 跳过空单元格,避免无效处理 // 1. 将HTML字符串转为Blob对象 var blob = Utilities.newBlob(html, MimeType.HTML, "temp.html"); // 2. 生成临时Google文档,用于转换HTML格式 var tempDoc = Drive.Files.insert( { title: "temp_rich_text", mimeType: MimeType.GOOGLE_DOCS }, blob ); // 3. 将临时文档的内容转为表格富文本,写入对应D列单元格 var res = RichTextApp.DocumentToSpreadsheet({ range: targetSheet.getRange("D" + (i + 2)), // 对应第i+2行(从D2开始) document: DocumentApp.openById(tempDoc.id), }); // 4. 删除临时文档,避免占用Drive空间 DriveApp.getFileById(tempDoc.id).setTrashed(true); } console.log("批量转换完成"); }
关键修改点
- 循环遍历整列的HTML数据,逐个取出单个字符串传入
Utilities.newBlob(),确保参数类型正确 - 增加空单元格判断,跳过无效内容
- 动态计算D列的目标单元格位置,保证每个HTML对应写入正确的行
- 每个HTML单独生成临时文档,处理完成立即删除,避免Drive中堆积垃圾文件
注意事项
- 确保已在脚本编辑器的「资源」->「高级Google服务」中开启Drive API,否则
Drive.Files.insert会报错 - 如果处理的行数较多,建议在循环中添加
Utilities.sleep(1000)(休眠1秒),避免触发Google服务的配额限制
内容的提问来源于stack exchange,提问作者user22805922
相关产品推荐
相关产品推荐

