【问题标题】:Getting “This operation is not supported from a callback function” error when transposing array转置数组时出现“回调函数不支持此操作”错误
【发布时间】:2016-03-10 16:49:34
【问题描述】:

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

错误是:

回调函数不支持此操作。

这里有什么问题?

【问题讨论】:

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


【解决方案1】:

回答

问题不在于转置函数,问题在于 Google Apps 脚本调试器无法按设计执行回调,因此在调试代码时,不要执行调试步骤,而是在前面放置一个断点并在调用转置函数之后,以使调试器跳过该调用。

参考文献

在 Google Apps 脚本问题中有一个关于此的问题 -> 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

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

一个相关的问题还没有答案,但信息丰富的 cmets 可以帮助我找到上述参考

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

【讨论】:

  • 鲁本的回答真的很棒。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-12-26
  • 2023-04-01
  • 1970-01-01
  • 2017-11-04
  • 2020-08-09
  • 1970-01-01
  • 2019-01-25
  • 2019-06-27
相关资源
最近更新 更多