转置数组时,获取“回调函数不支持此操作”错误

时间:2016-03-10 16:49:35

标签: javascript google-apps-script callback google-sheets

首先为这个问题道歉,但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]; }); });
}

错误是:

  

回调函数不支持此操作。

这里有什么问题?

1 个答案:

答案 0 :(得分:3)

答案

问题不在于转置功能,问题是Google Apps脚本调试器无法通过设计进入回调,因此在调试代码时,不要执行调试步骤,先放置断点并且在调用转置函数之后,为了使调试器跳过该调用。

参考

在Google Apps脚本问题中存在此问题 - > {3}具有来自Google员工的以下评论

来自Issue 4662: Debug breakpoint within the function body of an Array.map() call causes a server error

  

目前正在按预期工作 - 我们不支持调试器   具有回调函数的断点。因此,这个问题就是   标记为功能请求。

一个相关的问题,但尚无答案,但提供了丰富的评论,帮助我找到上述参考资料

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