如何创建一个有效的二维数组,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()));
参考文献:
我从 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()));