二维数组读取问题?
2D array reading issue?
我想创建一种 "stack",每次我删除一个项目时,sheet 都会删除空白单元格。显然,我不能为此使用过滤功能。
我无法读取为此目的创建的数组。
我的伪代码:我创建一个空数组,获取所有值(包括空值),用除空值以外的所有值填充我的数组,最后清空堆栈并设置值我的数组。
这是我的代码:
function updateStack() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("main");
var zone = sheet.getRange(1, 1, 1, 10);
//seems that .getValues() returns a 2d array
var values = zone.getValues();
var j = 0;
var data = new Array();
for (var i = 0 ; i < 10 ; i++) {
//the problem seems to be here : I can't access the 2d array. After reading the debugging console about 1000 thousand times
// I discovered the 2 pairs of []
//I've found multiple ways to detect empty cells. Not sure if this is the right one. I've tried the .length = 0 trick, but something
// was wrong, maybe because of the "2dimensionality"
if (values[i] != "") {
data[j] = values[i];
j = j++;
} else {
// do nothing if the cell contains nothing
}
//not sure if I have to use return ! Don't know where to put it exactly too...
return data;
zone.clear();
//length of range must be the same as the array's length
zone = sheet.getRange(1, 1, 1, data.length);
zone.setValues(data);
}
}
我的代码中有很多注释,希望你能理解。
A link 我的测试 sheet : http://bit.ly/1JiWutn
感谢您的帮助!
目前,您有这样一段代码:
if (values[i] != "") {
data[j] = values[i];
j = j++;
} else {
您正在测试空字符串:
values[i] != ""
但是values[i]
是一个内部数组。您的代码只有一行 10 列。
var zone = sheet.getRange(1, 1, 1, 10);
因此,数组如下所示:
[ [cell one,cell two,cell three,etc,cell ten ] ]
values[i]
return是一个内部数组,不是一个值。
要获取单元格值,请使用:
if (values[0][i] != "") {
您需要两个索引,第一个索引始终为零。只有一个包含所有单元格值的内部数组。
接下来,使用push
向data
数组添加一个值:
data.push(values[0][i]);
另一个问题是您有 return
语句。 return
语句终止当前函数。该函数内 return
语句之后的任何内容都不会 运行。因此,您不能在现有的地方使用 return 语句,并获取将值写入 spreadsheet 的代码。你可以两者都做。您可以将值写入 sheet 和 return 中,但将 return 放在末尾。 return、return 与调用此函数的任何函数有关。
要设置值,值必须在二维数组中。您的 data
数组不是二维数组。您必须将 data
数组添加到另一个数组。
var my2Darray = [];
my2Darray.push(data);
zone = sheet.getRange(1, 1, 1, data.length);
zone.setValues(my2Darray);
如果您只测试整行的空白单元格,那么您的测试几乎可以使用。如果您连接该数组中的所有值,则结果可以与 ""
.
进行比较
// join all the values with nothing between them
// compare the result to empty string
if(values[i].join("") !== "") {
// if at least one cell contained something
data.push(values[i]); // Stackius Popularious
}
我想创建一种 "stack",每次我删除一个项目时,sheet 都会删除空白单元格。显然,我不能为此使用过滤功能。
我无法读取为此目的创建的数组。
我的伪代码:我创建一个空数组,获取所有值(包括空值),用除空值以外的所有值填充我的数组,最后清空堆栈并设置值我的数组。
这是我的代码:
function updateStack() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("main");
var zone = sheet.getRange(1, 1, 1, 10);
//seems that .getValues() returns a 2d array
var values = zone.getValues();
var j = 0;
var data = new Array();
for (var i = 0 ; i < 10 ; i++) {
//the problem seems to be here : I can't access the 2d array. After reading the debugging console about 1000 thousand times
// I discovered the 2 pairs of []
//I've found multiple ways to detect empty cells. Not sure if this is the right one. I've tried the .length = 0 trick, but something
// was wrong, maybe because of the "2dimensionality"
if (values[i] != "") {
data[j] = values[i];
j = j++;
} else {
// do nothing if the cell contains nothing
}
//not sure if I have to use return ! Don't know where to put it exactly too...
return data;
zone.clear();
//length of range must be the same as the array's length
zone = sheet.getRange(1, 1, 1, data.length);
zone.setValues(data);
}
}
我的代码中有很多注释,希望你能理解。 A link 我的测试 sheet : http://bit.ly/1JiWutn
感谢您的帮助!
目前,您有这样一段代码:
if (values[i] != "") {
data[j] = values[i];
j = j++;
} else {
您正在测试空字符串:
values[i] != ""
但是values[i]
是一个内部数组。您的代码只有一行 10 列。
var zone = sheet.getRange(1, 1, 1, 10);
因此,数组如下所示:
[ [cell one,cell two,cell three,etc,cell ten ] ]
values[i]
return是一个内部数组,不是一个值。
要获取单元格值,请使用:
if (values[0][i] != "") {
您需要两个索引,第一个索引始终为零。只有一个包含所有单元格值的内部数组。
接下来,使用push
向data
数组添加一个值:
data.push(values[0][i]);
另一个问题是您有 return
语句。 return
语句终止当前函数。该函数内 return
语句之后的任何内容都不会 运行。因此,您不能在现有的地方使用 return 语句,并获取将值写入 spreadsheet 的代码。你可以两者都做。您可以将值写入 sheet 和 return 中,但将 return 放在末尾。 return、return 与调用此函数的任何函数有关。
要设置值,值必须在二维数组中。您的 data
数组不是二维数组。您必须将 data
数组添加到另一个数组。
var my2Darray = [];
my2Darray.push(data);
zone = sheet.getRange(1, 1, 1, data.length);
zone.setValues(my2Darray);
如果您只测试整行的空白单元格,那么您的测试几乎可以使用。如果您连接该数组中的所有值,则结果可以与 ""
.
// join all the values with nothing between them
// compare the result to empty string
if(values[i].join("") !== "") {
// if at least one cell contained something
data.push(values[i]); // Stackius Popularious
}