【问题标题】:How to grab all non-empty cell data in row - Google Sheets Script Editor如何在行中获取所有非空单元格数据 - Google Sheets Script Editor
【发布时间】:2018-01-02 02:46:02
【问题描述】:

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

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

例如,如果我要让行具有这些值:

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

我希望能够获取这些值并将它们放入像 ["abc", "123", "987, "efg"] 这样的数组中。然后如果我在下一行运行该函数,它' d 是 ["blah", "cat", "654"]。

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

提前谢谢你!

【问题讨论】:

    标签: google-sheets scripting cell google-sheets-api google-apps-script-editor


    【解决方案1】:

    这对你有用吗?

    当第 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】:

    这在没有脚本的情况下更容易实现,公式 =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
    }
    

    这里的范围可以是一行,也可以是多行。

    【讨论】:

      【解决方案3】:

      改编自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);
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-20
        • 1970-01-01
        相关资源
        最近更新 更多