7

我正在尝试拆分具有多个由新行分隔的值的单元格,它非常适用于具有超过 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

4

2 回答 2

30

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

于 2015-01-13T01:23:07.503 回答
11

抛出的错误是:

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

问题是这.split()是一个字符串方法。如果您的“单个项目”是文本,那没问题 - 但如果它是数字或日期......繁荣!

幸运的是,.toString()数字和日期有一个共同点,它是字符串的一个无操作。所以你可以把它添加到这一行:

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 个或多个换行符,但没有文本

要抓住这一点,您只需要允许一个“拆分”项目可能为空:

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;
}
于 2013-05-28T19:53:14.963 回答