通过谷歌脚本处理换行符保存为CSV

时间:2015-03-19 00:36:36

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

所以我试图从Google电子表格中获取一张工作表并将其另存为.CSV文件,就像您可以手动执行一样。它运行得相当好,但是我遇到了新线路/换行/回车等问题。我已经使用并修改了Google's solution和一些满足我需求的堆栈溢出资源,但是我我坚持这个新线问题。

问题: Problem

原因: Cause

我会注意到,如果我从Google Spreadsheets手动保存CSV文件看起来不错,但您在原因图片中看到的那个框是我无法解决的问题。

我目前的代码:

function convertRangeToCsvFile_(csvFileName, sheet) {
  // get available data range in the spreadsheet
  var activeRange = sheet.getDataRange();
  try {
    var data = activeRange.getValues();
    var csvFile = undefined;

    // loop through the data in the range and build a string with the csv data
    if (data.length > 1) {
      var csv = "";
      for (var row = 0; row < data.length; row++) {
        for (var col = 0; col < data[row].length; col++) {
            //Handle special characters
            var text = data[row][col].toString();

            text = text.replace(/(\r\n|\n|\r)/g," ");
            for(var i = 0; i < text.length; i++)
            {
              if(text[i] == "\'" || text[i] == "\"" || text[i] == "\\" || text[i] == "\n" || text[i] == "\r" || text[i] == "\t" || text[i] == "\b" || text[i] == "\f")
              {
                text = spliceSlice(text,i,0,"\\");
                i++;
              }
            }
          if (data[row][col].toString().indexOf(",") != -1) {
            data[row][col] = "\"" + text + "\""; //Puts quotes around the data for strings.
          }
        }

        // join each row's columns
        // add a carriage return to end of each row, except for the last one
        if (row < data.length-1) {
          csv += data[row].join(",") + "\r\n";
        }
        else {
          csv += data[row];
        }
      }

    }
    csvFile = csv;

    return csvFile;
  }
  catch(err) {
    Logger.log(err);
  }
}

正如你所看到的那样,我试图用我所读到的关于'正则表达式'的方法处理新的行,但是,他们似乎并没有为我做任何事情。所以也许我只是错误地使用它然后它会起作用,或者我需要以不同的方式解决这个问题。

编辑:我在Notepad ++中查看了该文件并确定它们是LF字符,导致行中间出现问题。我的行结束\ r \ n工作正常的地方。

1 个答案:

答案 0 :(得分:1)

而不是.replace(/(\r\n|\n|\r)/g," ")尝试.replace("\n", " ").replace("\r", " "),我知道它基本上是相同的,但我目前正在使用此解决方案而不会出现打嗝。