如何创建一个有效的二维数组,Google Apps 脚本表单将接受复选框网格问题响应

How to create a valid 2D array that Google Apps Script Form will accept for Checkbox grid question response

我从 sheet 获取值,需要将这些值转换为二维数组,然后由 Google 表单的 .createResponse() 接受。在 spreadsheet 中,cell[0] = Paris, NYC 和 cell[1] = LA 的值。我试过这个功能:

function testFunction1() {
  const ss = SpreadsheetApp.getActiveSheet();
  const form = FormApp.openByUrl(ss.getFormUrl());
  var arr = [];
  for(i = 0; i<2; i++){
    var cell = ss.getRange(2,i+2).getValue();
    cell = cell.split(',');
    arr.push(cell);
  }
  var newRes = form
    .getItems()[0]
    .asCheckboxGridItem()
    .createResponse(arr);
  form.createResponse().withItemResponse(newRes).submit();
}

当我拆分每个单元格时,我得到: 拆分单元格[0] = ['Paris', 'NYC'] 拆分单元格[1] = ['LA']

将项目推入 arr 后,我得到: arr = [ ['Paris', 'NYC'], ['LA'] ]

这看起来像一个二维数组,但是 .createResponse(arr) 给出了错误“异常:提交给复选框网格问题的响应无效”。

如果我像这样手动输入 [['Paris', 'NYC'], ['LA'] ] 到 .createResponse 中:

function testFunction2() {
  const ss = SpreadsheetApp.getActiveSheet();
  const form = FormApp.openByUrl(ss.getFormUrl());
  var newRes = form
    .getItems()[0]
    .asCheckboxGridItem()
    .createResponse([ ['Paris','NYC'], ['LA'] ]);
  form.createResponse().withItemResponse(newRes).submit();
}

然后没有错误,响应被正确添加到表单中。

我也试过:

function testFunction1() {
  const ss = SpreadsheetApp.getActiveSheet();
  const form = FormApp.openByUrl(ss.getFormUrl());
  var arr = [[]];
  for(i = 0; i<2; i++){
    var cell = ss.getRange(2,i+2).getValue();
    cell = cell.split(',');
    arr[0][i] = cell;
    console.log(cell);
  }
  var cell = arr;
  console.log(cell[0]);
  var newRes = form
    .getItems()[0]
    .asCheckboxGridItem()
    .createResponse(cell[0]);
  form.createResponse().withItemResponse(newRes).submit();
}

这会引发错误“异常:提交给复选框网格问题的响应无效。”在 .createResponse(cell[0]).

此外,如果将 .createResponse(cell[0]) 更改为 .createResponse(cell),则会收到以下错误,“异常:参数 (number[]) 与方法签名不匹配FormApp.CheckboxGridItem.createResponse.

我还使用了手动输入项的 typeof、单元格值和结果数组,它们都作为对象出现。我做错了什么?

亚当

根据 .createResponse([ ['Paris','NYC'], ['LA'] ]);cell[0] = Paris, NYC and cell[1] = LA 在你的问题中的情况,我担心 arr 的每个值都可能有一个 space。这只是我的猜测。那么在你的脚本中,下面的修改怎么样?

发件人:

cell = cell.split(',');

收件人:

cell = cell.split(',').map(e => e.trim());

或者,

发件人:

var arr = [];
for(i = 0; i<2; i++){
  var cell = ss.getRange(2,i+2).getValue();
  cell = cell.split(',');
  arr.push(cell);
}

收件人:

var arr = ss.getRange(2, 2, 1, 2).getValues()[0].map(c => c.split(",").map(e => e.trim()));

参考文献: