2012-11-26 64 views
0

覆蓋未來的人我有行的谷歌文檔電子表格這樣的:功能分裂一個細胞,而不在谷歌文檔電子表格

  |    | 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之間的拆分值。拆分值從第三個單元格開始,覆蓋第四個單元格(在此示例中爲「one more thing」),如下所示:

something|something else|things|separated|by|semicolons|with|line|breaks 
------------------------------------------------------------------------ 

有人能指出我的錯誤在哪裏嗎?我希望我解釋得很好。

在此先感謝。

回答

2

您的代碼有兩個問題。一種是每次運行拼接功能時都要更換一個單元。既然你做了這麼多次,你也會覆蓋最後一個「另外一件事」單元格。相反,只需在開始時替換一次。

另一個問題,雖然我不知道你的意圖是什麼,但我不認爲你想爲splice函數提供一個數組,因爲這會在你的行數組中創建一個內部數組。相反,循環訪問數組值並調用每個數值。

這內環代碼應該解決您的問題:

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); 
} 
+0

工作就像一個魅力。謝謝一堆! – bWowk

相關問題