当转置数组时收到“此操作不支持来自回调函数”的错误提示

3

首先,对于这个问题我很抱歉,但是GAS对我来说是一种新的语法。

我想要做的事情在VBA语法中很简单,但在GAS中不是那么容易。

我想要将一个命名范围转置到另一个命名范围(例如从4行转置为4列),并且这两个命名范围位于不同的工作表上。网络上有使用.getDataRange()的示例,但我希望使用一个固定的命名范围,无论其中是否包含数据。

我正在尝试的语法如下:

var wksInput = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('New');
var wksDB = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Database');
var intDBNewRow = wksDB.getLastRow() + 1;

wksDB.getRange(intDBNewRow, wksDB.getRange('dbContacts').getColumn(), 1,wksDB.getRange('dbContacts').getNumColumns()).setValues(transposeRange(wksInput.getRange('frmVanContacts').getValues())); 

从输入表单工作表(wksInput)的一个固定点取4行到记录集/数据库工作表(wksDB)的最后一行的4列

其中transposeRange为:

function transposeRange(a)
{
  return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}

错误信息是:

此操作不支持从回调函数中执行。

这里出了什么问题?

你正在使用调试工具,对吗?关于请求调试代码的帮助,请查看[mcve],并查看http://stackoverflow.com/questions/32619480/debugger-fails-with-this-operation-is-not-supported-from-a-callback-function - Rubén
是的,看起来我在那个点上没有被允许在调试器中设置断点,而代码实际上运行良好。 - Shortcake
1个回答

3

答案

问题不在于转置函数,而是Google Apps Script调试器设计上不能执行回调函数,因此在调试代码时,可以在调用转置函数之前和之后设置断点,以使调试器跳过该调用。

参考资料

Google Apps Script Issues中有一篇关于这个问题的文章 -> Issue 4662: Debug breakpoint within the function body of an Array.map() call causes a server error,其中有以下来自Google员工的评论:

来自https://code.google.com/p/google-apps-script-issues/issues/detail?id=4662#c3

目前的情况符合预期 -- 我们不支持在回调函数内设置调试器断点。 因此,这个问题将被标记为功能请求。

一个相关的问题暂无答案,但有信息性的评论帮助我找到了上面的参考资料

Debugger fails with "This operation is not supported from a callback function."


非常好的回答,Ruben。谢谢你。 - Agam Rafaeli-Farhadian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接