我有一个功能(对不起,我不记得我在哪里得到它),它将一个分隔的字符串输出到一个分组的行
我需要删除目标列为空的所有行
我一直在努力但却无法得到它
感谢您的帮助
范围
ColA ColB ColC
a1 b1 x\y\z
a2 b2
a3 b3 x|z
输出
ColA ColB ColC
a1 b1 x
a1 b1 y
a1 b1 z
a2 b2
a3 b3 x
a3 b3 z
需要
ColA ColB ColC
a1 b1 x
a1 b1 y
a1 b1 z
a3 b3 x
a3 b3 z
function groupedRow(range) {
var targetCol = 4
var output2 = [];
for(var i=0, iLen=range.length; i<iLen; i++) {
var s = range[i][targetCol].split("|");
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 == targetCol ) {
output1.push(s[j]);
} else {
output1.push(range[i][targetCol]);
}
}
output2.push(output1);
}
}
return output2;
}
答案 0 :(得分:1)
您可能必须检查split函数的空字符串作为参数,它返回带有空字符串的数组:
['']
我必须重建代码才能获得正确的结果。
<强>代码强>
function groupedRow(range, targetCol) {
var result = [];
var row = [];
var rowNew = [];
var val = '';
for(var i=0, iLen=range.length; i<iLen; i++) {
// get the row
row = range[i];
// split the targetCol element
var s = row[targetCol - 1].split("|");
for(var j=0, jLen=s.length; j<jLen; j++) {
val = s[j];
// if element is not empty string
if (val !== '')
{
rowNew = row.slice(); // copy the array
rowNew.splice(targetCol - 1, 1, val); // replace n'th element
result.push(rowNew);
}
}
}
return result;
}
<强>用法强>
作为表格中的自定义功能:
=groupedRow(A1:C3, 3)
备注强>
targetCol - 1
,因为数组在js range
在converted into array中为google-sheets。