如何获取行中的所有非空单元格数据 - Google表格脚本编辑器

问题描述 投票:1回答:3

我不确定这是否可行,而且说实话,我没有尝试过很多东西,因为我不确定从哪里开始。我正在使用Google表格中的脚本编辑器,顺便说一句。我知道有SpreadsheetApp.getRange()和另一个获取值或类似的东西。但我想要的是有点具体。

有没有办法获取给定行中的所有单元格数据并将其放入数组?行的大小会有所不同,这就是我不能做到确切范围的原因。

例如,如果我要让行具有以下值:

abc | 123 | 987 | efg
blah| cat | 654

我希望能够抓住这些值并将它们放入像[“abc”,“123”,“987,”efg“]这样的数组中。然后如果我在下一行运行该函数,它就会[ “blah”,“cat”,“654”]。

实际上,只要有一个我能够使用的分隔符,就可以将它放入任何数据类型。

先感谢您!

google-sheets scripting cell google-sheets-api google-apps-script-editor
3个回答
3
投票

这对你有用吗?

当第1排,第2排和第3排有abc | 123 | 987 | efgblah| cat | 654abc | | 987 | efg时,myFunction(1)myFunction(2)myFunction(3)将返回[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];
}

2
投票

改编自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
投票

没有脚本就更容易实现,公式=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
}

这里的范围可以有一行或多行。

© www.soinside.com 2019 - 2024. All rights reserved.