如何用Google Apps Script提取Google表格单元格的错误信息?
解决方法
你的代码有几个关键问题导致无法获取到详细错误信息,调整后就能正常提取:
- 范围和字段参数不准确:原请求的是整个工作表,且字段只指定了
sheets,没有包含错误信息的具体字段,需要精准定位到目标单元格并指定所需字段。 - 行索引错误:A2是第二行,
rowData的索引从0开始,所以应该取rowData[1]而非rowData[0]。 - 未定义变量:
res变量没有提前声明,直接赋值会报错。
修改后的代码如下:
function getErrorMessage(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("Sheet1"); const targetRange = "A2"; const value = sheet.getRange(targetRange).getDisplayValue(); Logger.log(value); if (value == "#REF!") { // 定义res变量 let res = {}; const obj = Sheets.Spreadsheets.get(ss.getId(), { // 指定具体单元格范围,减少返回数据量 ranges: [`${sheet.getSheetName()}!${targetRange}`], // 精确请求错误信息相关字段 fields: "sheets.data.rowData.values.effectiveValue.errorValue" }); // A2对应第二行,索引为1;A列对应第一列,索引为0 const v = obj.sheets[0].data[0].rowData[1].values[0]; if (v?.effectiveValue?.errorValue) { res.error = v.effectiveValue.errorValue; Logger.log(res.error); // 可以直接打印详细错误文本 Logger.log(res.error.message); } } }
关键修改说明:
ranges参数:改为${sheet.getSheetName()}!${targetRange},明确只请求A2单元格的数据,避免返回整个工作表的冗余内容。fields参数:指定sheets.data.rowData.values.effectiveValue.errorValue,确保API返回错误信息的具体字段,而不是整个工作表的结构。- 行索引修正:将
rowData[0]改为rowData[1],对应第二行(A2)。 - 可选链操作符:用
v?.effectiveValue?.errorValue替代hasOwnProperty,代码更简洁且安全。 - 变量声明:提前声明
res变量,避免未定义错误。
运行修改后的代码,就能在日志中看到errorValue对象,其中message字段就是你需要的详细错误文本:Result was not automatically expanded, please insert more rows (1655).
内容的提问来源于stack exchange,提问作者user12736831
相关产品推荐
相关产品推荐

