【问题标题】:How to Split Multi-line Cells Into Different Rows in Google Sheet如何在 Google Sheet 中将多行单元格拆分为不同的行
【发布时间】:2019-11-15 13:52:15
【问题描述】:

我有一个非常凌乱的 Google 表格。在某些单元格中,有多个电子邮件地址、多个姓名、多个电话号码等。Raw Data

我想将具有多个电子邮件地址的单元格拆分为不同的行,其他列的数据完全相同。 像这样的东西: Cleaned sheet

我使用了一个脚本,我在 StackOverflow 上找到了另一个答案,但是,该脚本仅在电子邮件地址之间有回车符或空格时才有效。问题是工作表非常不一致,所以我的电子邮件用“;”分隔有的用回车符或空格隔开。

您知道我可以如何轻松快速地清理这些数据并将这些电子邮件分成不同的行吗? 任何帮助将不胜感激。

这是我使用的脚本:

// Main of this script.
function result(range) {
  var output = [];
  for (var i in range) {
    var celLen = 1;
    var c1 = range[i].map(function(e, i){
      var cell = e.toString().split("\n"); // Modified
      var len = cell.length;
      if (len == 1) {
        return cell[0];
      } else if (len > 1) {
        celLen = celLen > len ? celLen : len;
        var t2 = [];
        for (var k=0; k<cell.length; k++) {
          t2.push(cell[k]);
        }
        return t2;
      }
    });
    var c2 = c1.map(function(e, i){
      var r = [];
      if (!Array.isArray(e)) {
        for (var k=0; k<celLen; k++) {
          r.push(e);
        }
      } else {
        for (var k in e) {
          r.push(e[k]);
        }
        if (e.length < celLen) {
          for (var m=0; m<celLen - e.length; m++) {
            r.push("");
          }
        }
      }
      return r;
    });
    var c3 = c2[0].map(function(e, i){return c2.map(function(f, j){return c2[j][i]})});
    Array.prototype.push.apply(output, c3);
  }
  return output;
}

// For testing this script.
function main() {
  var ss = SpreadsheetApp.getActiveSheet();
  var data = ss.getDataRange().getValues();
  var r = result(data);
  ss.getRange(ss.getLastRow() + 1, 1, r.length, r[0].length).setValues(r);
} ```


【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    SPLIT() 与数组中的相应分隔符一起使用并应用TRANSPOSE(),这样它就不再是水平方向的后续单元格,而是按行返回电子邮件。

    =TRANSPOSE(SPLIT(A1, {"|" ; char(10) ; ";" ; ","}))
    

    在上面的花括号内添加您想要的任何电子邮件分隔字符。 char(10)换行符 字符。

    如果要将公式应用于整列或单元格数组,请将公式放入 ARRAYFORMULA() 并将单元格地址更改为数组:

    =ARRAYFORMULA(TRANSPOSE(SPLIT(A1:A, {"|" ; char(10) ; ";" ; ","})))
    

    TRANSPOSE() 切换,看看哪一个会返回您想要的结果。

    【讨论】:

      【解决方案2】:

      在你提供的代码中,如果你想用“\n”和“;”分割,你正在这样做var cell = e.toString().split("\n");您可以链接拆分和连接。

      这是一些说明我的意思的代码:

      var x = "a\nb\nc";
      var y = "a;b;c";
      var z = x+";"+y;
      
      console.log(x,x.split('\n').join(';').split(';'));
      console.log(y,y.split('\n').join(';').split(';'));
      console.log(z,z.split('\n').join(';').split(';'));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-24
        • 1970-01-01
        • 1970-01-01
        • 2022-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多