我的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);
} ```
答案 0 :(得分:1)
将SPLIT()
与数组中的相应定界符一起使用,并应用TRANSPOSE()
,因此它将水平返回电子邮件,而不是水平放置随后的单元格。
=TRANSPOSE(SPLIT(A1, {"|" ; char(10) ; ";" ; ","}))
在上方的花括号内添加所需的任何电子邮件分隔字符。 char(10)
是换行符字符。
如果要将公式应用于整个列或单元格数组,请将公式放在ARRAYFORMULA()
内,然后将单元格地址更改为数组:
=ARRAYFORMULA(TRANSPOSE(SPLIT(A1:A, {"|" ; char(10) ; ";" ; ","})))
与TRANSPOSE()
切换,看看哪个返回您想要的结果。
答案 1 :(得分:0)
在您提供的代码中,如果要用“ \ 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(';'));