【问题标题】:Google Spreadsheet Split Based on newline基于换行符的谷歌电子表格拆分
【发布时间】:2013-05-28 19:15:11
【问题描述】:

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

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

【问题讨论】:

  • 如果发布的电子表格不需要用户请求访问权限会更好 - 我为什么要给你我的电子邮件地址?
  • 很抱歉,但是问题已经解决了!太感谢了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

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


【解决方案1】:

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

【讨论】:

  • 我不知道为什么这个答案被否决了,因为这可以优雅地解决问题并简洁地回答问题而不会干预自定义函数。您的回答对我很有帮助,请投我的票,希望您继续为 SO 做出贡献
  • 这是更好的答案
  • @timpeterson“更好”?这取决于上下文......如果需要从脚本进行操作,则无法访问内置。最初的问题不清楚从哪里调用该函数。
  • 不过,对于 95% 的人来说,这是一个更好的答案,他们只想用换行符分割一列,这也可以通过赞成票的数量与接受的答案来判断;)
  • 虽然最初的问题被标记为“google-apps-script”,但标题可以理解地让读者认为它指的是内置的 split() 函数。
【解决方案2】:

抛出的错误是:

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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多