我有一个谷歌文档电子表格,上面有这样的行:
| | things; separated;by;semicolons;with;line;breaks |
something | something else | A;B;C;D;E;F;G | one more thing
| | K;L;M;N;O;P;Q |
-----------------------------------------------------------------------------------------------
我想用换行符拆分第三列,将每一列放在整行的一个副本中,覆盖第三个单元格,然后用分号拆分该单元格。最后,前一行应转换为如下所示的内容:
something|something else|things|separated|by|semicolons|with|line|breaks| one more thing
-----------------------------------------------------------------------------------------
something|something else| A | B | C| D | E | F | G | one more thing
-----------------------------------------------------------------------------------------
something|something else| K | L | M| N | O | P | Q | one more thing
-----------------------------------------------------------------------------------------
我尝试了这个函数,但有些单元格重叠并覆盖了其他单元格:
function splitColumnAndRepeatRows(anArray, splitColumnIndex) {
var output = [];
for (i in anArray){ // for each row
var splitArray = anArray[i][splitColumnIndex].split(/n/g); // split values by line breaks
for (j in splitArray){ // for each split array
var row = anArray[i].slice(0); // copies the entire line
row.splice(2,1,splitArray[j].split(";")); // inserts the splited values overwriting the third cell
output.push(row);
}
}
return output;
}
因此,拼接函数不会在单元格 2 和 4 之间插入拆分值。拆分值从第三个单元格开始放置,覆盖第四个单元格(示例中为"还有一件事"),如下所示:
something|something else|things|separated|by|semicolons|with|line|breaks
------------------------------------------------------------------------
有人可以指出我的错误在哪里吗?我希望我解释得足够好。
提前谢谢。
您的代码有两个问题。一个是每次运行拼接功能时都要替换一个单元格。由于您多次执行此操作,因此也会覆盖最后一个"还有一件事"单元格。相反,仅在开始时替换一次。
另一个问题,虽然我不确定你的意图是什么,但我认为你不想向拼接函数提供一个数组,因为这会在你的行数组中创建一个内部数组。相反,循环遍历数组值并调用每个值的拼接。
此内部循环代码应该可以解决您的问题:
for (j in splitArray){ // for each split array
var row = anArray[i].slice(0); // copies the entire line
var split = splitArray[j].split(";");
var pos = 0;
row.splice(2,1); // deletes the third cell
for (var k in split) {
row.splice(2+pos,0,split[k]); // inserts the splited values starting at cell 2
pos++;
}
output.push(row);
}