所以我试图从Google电子表格中获取一张工作表并将其另存为.CSV文件,就像您可以手动执行一样。它运行得相当好,但是我遇到了新线路/换行/回车等问题。我已经使用并修改了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);
}
}
正如你所看到的那样,我试图用我所读到的关于'正则表达式'的方法处理新的行,但是,他们似乎并没有为我做任何事情。所以也许我只是错误地使用它然后它会起作用,或者我需要以不同的方式解决这个问题。
编辑:我在Notepad ++中查看了该文件并确定它们是LF字符,导致行中间出现问题。我的行结束\ r \ n工作正常的地方。
答案 0 :(得分:1)
而不是.replace(/(\r\n|\n|\r)/g," ")
尝试.replace("\n", " ").replace("\r", " ")
,我知道它基本上是相同的,但我目前正在使用此解决方案而不会出现打嗝。