如何获取行中的所有非空单元格数据 - Google Sheets 脚本编辑器
How to grab all non-empty cell data in row - Google Sheets Script Editor
我不确定这是否可行,老实说,我没有尝试过很多东西,因为我什至不确定从哪里开始。顺便说一下,我正在使用 Google Sheets 中的脚本编辑器。我知道有 SpreadsheetApp.getRange() 和另一个获取值或类似的东西。但是我想要的有点具体。
有没有办法获取给定行中的所有单元格数据并将其放入数组中?行的大小会有所不同,这就是为什么我不能做一个精确的范围。
例如,如果我要让行具有这些值:
abc | 123 | 987 | efg
blah| cat | 654
我希望能够获取这些值并将它们放入数组中,例如 ["abc"、“123”、“987、"efg"]。然后如果我 运行 下一行的函数,它将是 ["blah", "cat", "654"].
实际上,它可以放入任何数据类型,只要有分隔符我就可以使用。
提前致谢!
这在没有脚本的情况下更容易实现,公式 =filter(1:1, len(1:1))
返回第 1 行非空单元格中的所有值,等等。
从脚本中,您可以执行如下操作:
function flat_nonempty() {
var range = SpreadsheetApp.getActiveSheet().getRange("A:A"); // range here
var values = range.getValues();
var flat = values.reduce(function(acc, row) {
return acc.concat(row.filter(function(x) {
return x != "";
}));
}, []);
Logger.log(flat); // flat list of values, no blanks
}
这里的范围可以是一行,也可以是多行。
改编自https://developers.google.com/apps-script/reference/spreadsheet/sheet#getDataRange()
如果您确实需要数组,可以直接循环并创建数组。这里我说明了为所有行创建,但是如果你知道你想要的行,你可以不使用外部循环(只需将 i 设置为所需的行)。
function rowArr() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
// This represents ALL the rows
var range = sheet.getDataRange();
var values = range.getValues();
for (var i = 0; i < values.length; i++) {
var row = [];
for (var j = 0; j < values[i].length; j++) {
if (values[i][j]) {
row.push(values[i][j]);
}
}
Logger.log(row);
}
}
这对你有用吗?
当第1行、第2行、第3行有abc | 123 | 987 | efg
、blah| cat | 654
、abc | | 987 | efg
时,myFunction(1)
、myFunction(2)
、myFunction(3)
return [abc, 123.0, 987.0, efg]
、[blah, cat, 654.0]
和 [abc, , 987.0, efg]
.
function myFunction(row){
var ss = SpreadsheetApp.getActiveSheet();
var values = ss.getRange(row, 1, 1, ss.getLastColumn()).getValues();
var c = 0;
for (var c = values[0].length - 1; c >= 0; c--){
if (values[0][c] != "") break;
}
values[0].splice(c + 1, values[0].length - c - 1);
return values[0];
}
我不确定这是否可行,老实说,我没有尝试过很多东西,因为我什至不确定从哪里开始。顺便说一下,我正在使用 Google Sheets 中的脚本编辑器。我知道有 SpreadsheetApp.getRange() 和另一个获取值或类似的东西。但是我想要的有点具体。
有没有办法获取给定行中的所有单元格数据并将其放入数组中?行的大小会有所不同,这就是为什么我不能做一个精确的范围。
例如,如果我要让行具有这些值:
abc | 123 | 987 | efg
blah| cat | 654
我希望能够获取这些值并将它们放入数组中,例如 ["abc"、“123”、“987、"efg"]。然后如果我 运行 下一行的函数,它将是 ["blah", "cat", "654"].
实际上,它可以放入任何数据类型,只要有分隔符我就可以使用。
提前致谢!
这在没有脚本的情况下更容易实现,公式 =filter(1:1, len(1:1))
返回第 1 行非空单元格中的所有值,等等。
从脚本中,您可以执行如下操作:
function flat_nonempty() {
var range = SpreadsheetApp.getActiveSheet().getRange("A:A"); // range here
var values = range.getValues();
var flat = values.reduce(function(acc, row) {
return acc.concat(row.filter(function(x) {
return x != "";
}));
}, []);
Logger.log(flat); // flat list of values, no blanks
}
这里的范围可以是一行,也可以是多行。
改编自https://developers.google.com/apps-script/reference/spreadsheet/sheet#getDataRange()
如果您确实需要数组,可以直接循环并创建数组。这里我说明了为所有行创建,但是如果你知道你想要的行,你可以不使用外部循环(只需将 i 设置为所需的行)。
function rowArr() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
// This represents ALL the rows
var range = sheet.getDataRange();
var values = range.getValues();
for (var i = 0; i < values.length; i++) {
var row = [];
for (var j = 0; j < values[i].length; j++) {
if (values[i][j]) {
row.push(values[i][j]);
}
}
Logger.log(row);
}
}
这对你有用吗?
当第1行、第2行、第3行有abc | 123 | 987 | efg
、blah| cat | 654
、abc | | 987 | efg
时,myFunction(1)
、myFunction(2)
、myFunction(3)
return [abc, 123.0, 987.0, efg]
、[blah, cat, 654.0]
和 [abc, , 987.0, efg]
.
function myFunction(row){
var ss = SpreadsheetApp.getActiveSheet();
var values = ss.getRange(row, 1, 1, ss.getLastColumn()).getValues();
var c = 0;
for (var c = values[0].length - 1; c >= 0; c--){
if (values[0][c] != "") break;
}
values[0].splice(c + 1, values[0].length - c - 1);
return values[0];
}