通过 google 处理换行符的脚本另存为 CSV

Saving as CSV through google script handling newline characters

所以我尝试从 Google Spreadsheet 中获取 sheet 并将其保存为 .CSV 文件,就像您可以手动执行的那样。它工作得相当好,但我 运行 遇到了新的 lines/line feeds/carriage returns 等问题。我使用并修改了 Google's solution 和一些堆栈到目前为止满足我需求的溢出资源,但是我陷入了这个新行问题。

问题:

原因:

我会注意到,如果我手动保存来自 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);
  }
}

如您所见,我正在尝试使用我阅读的有关 'regex expressions' 的内容来处理新行,但是,它们似乎实际上并没有为我做任何事情。所以也许我只是用错了它然后它会起作用,或者我需要以不同的方式处理这个问题。

编辑: 我查看了 Notepad++ 中的文件并确定它们是导致行中间问题的 LF 字符。我的行尾 \r\n 工作正常。

而不是 .replace(/(\r\n|\n|\r)/g," ") 尝试 .replace("\n", " ").replace("\r", " "),我知道它本质上是一样的,但我目前正在使用这个解决方案,没有打嗝。

这是一个老问题,但我 运行 在我的 Google 搜索的顶部进入它,当时我只是在寻找一个简单的解决方案来处理从表格导出的 CSV 文件中的换行符。

由于现在是 2022 年,您可以使用表格的非常强大的查找 + 替换来定位所有换行符(删除它们,或将它们替换为文字 \n 字符串等)。然后您可以正常导出为 CSV。

在我这里的示例中,“替换为”不使用正则表达式,只有搜索使用正则表达式,所以我想在导出之前保留此处的换行符。