【发布时间】:2022-12-01 07:26:46
【问题描述】:
2016 年的堆栈溢出有人报告说这个问题只发生在调试模式下,但这不是调试模式,它发生在我在后端和调试模式下运行的实时代码(从 webapp 运行)中。
令人沮丧的是,这并不是对 setValues 的每次调用。有一个对 setvalues 的数组调用在脚本的较高位置确实有效(写入电子表格)。
这段代码已经一个多月没有修改,并且至少在 10-26 之前一直有效(第一次失败报告 11-2)。
这是一个小例子:
function setValuesIsFailing(sheet, array, row, column){
//newIDR_SHEET.getRange(3, 9, formulaColumns.length, 2).setValues(formulaColumns);//old command this function replaces
const targetRange = sheet.getRange(row,column,array.length,array[0].length);
console.log(139,targetRange.getA1Notation());
sheet.getRange("C5").setValue("UGH");
targetRange.setValues(array);
console.log(sheet.getRange("C5").getValue());
}
此代码的结果是预期的控制台日志:
10:46:10 AM Info 139 'I3:J49'
10:46:11 AM Error
Exception: Service Spreadsheets failed while accessing document with id 12shsTE-Mxxx
setValuesIsFailing @ Code.gs:143
所以第 139 行暗示它确实有它正在写入的工作表然后它 当被告知写入这两个位置时不会抛出错误(但它会 没有成功地写信给他们)然后当被问到时它会抛出一个错误 从其中一个位置读取。
回顾一下:
- 代码工作正常。一个月没有修改,并且那个月的大部分时间都在正常工作。
- setValue / setValues 命令静静地失败而没有抛出错误(没有任何内容写入目标)
- 尝试从本应由脚本修改但未修改的地方读取时,稍后会出现服务电子表格错误
- 将问题移至新功能显然无法解决问题。
我尝试过的其他事情,记录工作表名称,将新变量重新分配给工作表(最初担心函数以某种方式丢失工作表但调试显示情况并非如此),将失败的代码段移动到新函数中更容易记录,等待问题自行解决。
有任何想法吗?
=====
解决了: 事实证明,奇怪的行为是由于尝试对工作表应用数据验证失败而引起的。
其他人不太可能有这种行为,但我一次从工作表中拉出我的数据验证一列。
它要么接受数据验证设置命令可接受的一列二维数组,要么自动展平数组,因为它只有一列。这已经改变了。使用 .flat() 手动展平我的列数据解决了这个问题。我真的希望错误的验证设置调用会引发错误。
【问题讨论】:
-
如果您找到问题的答案,请随时将其作为答案分享,以便遇到相同问题的其他社区成员可以看到您是如何解决问题的。
-
当您有空时,请提供答案并尽可能选中复选框。如果其他人遇到问题,这可能会有所帮助。谢谢。