我有一张这样的表:
我有这个功能:
function getRangeAsArrays(sheet) {
var dataRange = sheet.getRange(2, 1, sheet.getLastRow(), sheet.getLastColumn());
var data = dataRange.getValues();
var array = [];
for (var r=0; r<sheet.getLastColumn(); r++) {
for (i in data) {
var row = data[i];
array.push(row);
}
}
return array;
}
我用这种方式构建listbox
:
var recipientArray = getRangeAsArrays(activeSheet);
var item3Panel = app.createHorizontalPanel();
item3Panel.add(app.createLabel("recipient"));
var listBox = app.createListBox().setName('item3');
for(var i = 0; i < (recipientArray.length); i++){
Logger.log("recipientArray[i][2] = " + recipientArray[i][3]);
Logger.log(" i = " + i);
listBox.addItem(recipientArray[i][4]);
}
item3Panel.add(listBox);
但是当我遍历数组长度(4行)时,我得到了这个(对我来说意外)结果,日志显示i
变量一直持续到14
:
因为recipientArray.length
应该给我二维数组的第一个维度,recipientArray[i].length
第二个维度,因为我想要第一个维度(行数)行来修复它?这里出了什么问题?
答案 0 :(得分:1)
即使我仍然不确定我理解你需要什么(我想我有点累或者我变得愚蠢......去图...... :),我想知道你为什么尝试单独使用函数,因为range.getValues()
返回的值已经是一个数组......一个二维数组,但仍然是一个数组。
如果你想每行创建一个listBox并将以下单元格添加为项目,那么像这样的双循环将完成这项工作。 (告诉我,如果我完全不在这个问题上,那么)。
我写了一个带有主要结构和注释的示例代码来解释事情的进展。
function test() {
var dataRange = SpreadsheetApp.getActiveSheet().getRange(2, 1, sheet.getLastRow(), sheet.getLastColumn());
var data = dataRange.getValues();
Logger.log(data)
var array = []; // this is useless
for (var r=0; r<data.length; r++) {
// create listBox widget here
//var listBox = app.createListBox().setName('listBox'+r);
for (i in data[0]) {
var cell = data[r][i];
//add items to listBox here
// listBox.addItem(cell);
array.push(cell);// this is useless
}
}
Logger.log(array);//useless
return array;//useless
}