将逗号分隔的数据从单元格拆分为多个新行而不复制数据

Splitting comma-separated data from cell into multiple new rows without duplicating data

我有一个包含数千个条目的数据列表,我需要将这些条目导入管理系统以获取 google 表格文件。 目前我有这样的东西:

A B C
1 Dermazone Medical Center Dermal, laser hair removal, massage
2 3Dental Clinic Orthodontics, General Practitioner, Prosthodontics

我想实现这样的目标:

A B C
1 Dermazone Medical Center Dermal
2 Laser Hair Removal
3 Massage
4 3Dental Clinic Orthodontics
5 General Practitioner
6 Prosthodontics

我研究了一下,发现了这个脚本

function result(range) {
  var splitCol = 1; // split on column B
  var output2 = [];
  for(var i=0, iLen=range.length; i<iLen; i++) {
    var s = range[i][splitCol].split("\n");    
    for(var j=0, jLen=s.length; j<jLen; j++) {
      var output1 = []; 
      for(var k=0, kLen=range[0].length; k<kLen; k++) {
        if(k == splitCol) {
          output1.push(s[j]);
        } else {
          output1.push(range[i][k]);
        }
      }
      output2.push(output1);
    }    
  }
  return output2;
}

但是我有两个问题:

  1. 我不希望该行中的其他数据出现重复条目​​(我只希望将我的 C 列拆分为新行)
  2. 这个脚本不适用于大量数据(我有大约 12k 行可以应用它)

请协助我解决这些问题,感谢您的帮助。 谢谢!

在您的情况下,下面的示例脚本怎么样?

示例脚本:

根据您的脚本,我认为您可能希望将该函数用作自定义函数。因此,在本次修改中,请将以下脚本复制并粘贴到电子表格的脚本编辑器中,并将=result(A1:C2)的自定义函数放入单元格中。

function result(values) {
  return values.flatMap(([a, b, c]) => c.split(",").map((e, i) => i == 0 ? [a, b, e.trim()] : [null, null, e.trim()]));
}
  • 如果您想通过运行脚本编辑器使用此脚本,请使用以下脚本。

      function result() {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var srcSheet = ss.getSheetByName("Sheet1"); // Please set the source sheet name.
        var dstSheet = ss.getSheetByName("Sheet2"); // Please set the destination sheet name.
        var values = srcSheet.getDataRange().getValues();
        var res = values.flatMap(([a, b, c]) => c.split(",").map((e, i) => i == 0 ? [a, b, e.trim()] : [null, null, e.trim()]));
        dstSheet.getRange(1, 1, res.length, res[0].length).setValues(res);
      }
    

测试:

当上述脚本为运行时,得到如下结果

参考: