我正在尝试拆分具有由新行分隔的多个值的单元格,它适用于具有多于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
答案 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++) {
...
}
...
}
你有另一个问题,虽然不太可能。由于您的空字符串测试,有些情况会导致整行输入丢失。
要抓住这个,你只需要允许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;
}