Google电子表格拆分基于换行符

时间:2013-05-28 19:15:11

标签: javascript google-apps-script google-sheets

我正在尝试拆分具有由新行分隔的多个值的单元格,它适用于具有多于1个值的单元格,但如果我得到的单元格只有1个值(即,没有换行符,则会出错)我怎么解决这个问题?

function splitColumnAndRepeatRows(anArray, splitColumnIndex) 
{
var output = [];
for (i in anArray)
{ // for each row
var splitArray = anArray[i][splitColumnIndex].split("\n"); // split values in specified column
for (j in splitArray)
 { // for each split cell value
  if(splitArray[j]=="")
    continue;
  var row = anArray[i].slice(0); // take a copy of source row 
  //row[splitColumnIndex] = alltrim(splitArray[j]); // replace comma separated value with current split value
  row[splitColumnIndex] =splitArray[j];
   output.push(row); // push new row to output
 }
} 
return output;
}

指向电子表格的链接:https://docs.google.com/spreadsheet/ccc?key=0AjA1J4T5598RdGRWd0p4Q3FtaW5QTG1MVVdEVUQ0NFE#gid=0

2 个答案:

答案 0 :(得分:15)

您可以使用内置函数= SPLIT(D1; CHAR(10))

答案 1 :(得分:10)

抛出的错误是:

TypeError: Cannot find function split in object //OBJECT//. (line xx, file "xxxx")

问题是.split()是一个String方法。如果你的“单一项目”是文字,那你很好 - 但如果它是一个数字或日期......繁荣!

幸运的是,Number和Date有一个共同的.toString(),这对于Strings来说是一个无操作。所以你可以把它添加到这一行:

var splitArray = anArray[i][splitColumnIndex].toString().split("\n"); // split values in specified column

您使用错误版本的for来索引数组。它有效,但你真的应该使用:

for (var i=0; i < anArray.length; i++) {
  ...
  for (var j=0; j < splitArray.length; j++) {
    ...
  }
  ...
}

你有另一个问题,虽然不太可能。由于您的空字符串测试,有些情况会导致整行输入丢失。

  • 空白“拆分”单元格
  • “拆分”单元格中包含1个或多个换行符,但没有文本

要抓住这个,你只需要允许ONE“split”项目可以为null:

if(splitArray[j]=="" && j>=1)
  continue;

完整代码

function splitColumnAndRepeatRows(anArray, splitColumnIndex) {
  var output = [];
  for (var i = 0; i < anArray.length; i++) { // for each row
    var splitArray = anArray[i][splitColumnIndex].toString().split("\n"); // split values in specified column
    for (var j = 0; j < splitArray.length; j++) { // for each split cell value
      if (splitArray[j] == "" && j >= 1)
        continue;
      var row = anArray[i].slice(0); // take a copy of source row 
      row[splitColumnIndex] = splitArray[j];
      output.push(row); // push new row to output
    }
  }
  return output;
}