Google apps script 用于在Google Docs电子表格中拆分一个单元格而不覆盖下一个单元格的函数

Google apps script 用于在Google Docs电子表格中拆分一个单元格而不覆盖下一个单元格的函数,google-apps-script,Google Apps Script,我有一个google docs电子表格,其中的行如下: | | 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

我有一个google docs电子表格,其中的行如下:

          |                | 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
-----------------------------------------------------------------------------------------
something|something else|things|separated|by|semicolons|with|line|breaks
------------------------------------------------------------------------
我想用换行符拆分第三列,将每一列放在整行的一个副本中,覆盖第三个单元格,然后用分号拆分该单元格。 最后,前一行应转换为如下内容:

          |                | 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
-----------------------------------------------------------------------------------------
something|something else|things|separated|by|semicolons|with|line|breaks
------------------------------------------------------------------------
我尝试了此函数,但有些单元格重叠并覆盖了其他单元格:

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之间插入分割值。拆分值从第三个单元格开始放置,覆盖第四个单元格(在本例中为“另一件事”),如下所示:

          |                | 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
-----------------------------------------------------------------------------------------
something|something else|things|separated|by|semicolons|with|line|breaks
------------------------------------------------------------------------
有人能指出我的错误在哪里吗?我希望我解释得足够好


提前感谢。

您的代码有两个问题。一个是每次运行拼接功能时都要更换一个单元。因为您多次这样做,所以也会覆盖最后一个“还有一件事”单元格。相反,仅在开始时更换一次

另一个问题,虽然我不确定您的意图是什么,但我认为您不希望向splice函数提供数组,因为这样会在行数组中创建一个内部数组。相反,在数组值上循环,并用每个值调用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);
}

工作得很有魅力。非常感谢!