我正在尝试清理一些从csv文件导入的数据。我想出了如何获取我需要的一些列的格式,但我正在努力处理每行两端的双引号。我假设由getDataAsString()
函数添加了引号。
从下面我可以看到,我正在尝试使用replace()
来删除最后一列中值的双引号。记录器显示没有"
的数据,但我使用的行对工作表中的数据没有任何影响。我怀疑这是因为我到目前为止所做的所有脚本都在说“向我显示最后一列没有引用的值”,但实际上没有更新数据。
如何将“show”行转换为实际的更改数据行?
function importFromCSV() {
var file = DriveApp.getFileById(listLatestFile());
//var csvFile = file.getBlob().getDataAsString();// get string content
var csvFile = file.getAs('text/plain').getDataAsString();
//Logger.log(csvFile);// check in the logger
var csvData = CSVToArray_(csvFile);// convert to 2D array
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("ImpCSVData");
sheet.clear();
sheet.getRange(1,1, csvData.length, csvData[0].length).setValues(csvData);// write to sheet in one single step
var test = sheet.getRange(1,csvData[0].length, csvData.length, 1).getValue().replace("\"","");
Logger.log(test);
sheet.getRange(1,4, csvData.length, 2).setNumberFormat("DD/MM/YYYY");
sheet.getRange(1,6, csvData.length, 1).setNumberFormat("@STRING@");
sheet.getRange(1,csvData[0].length, csvData.length, 1).getValue().replace("\"","");
}
答案 0 :(得分:3)
...我使用过的行对表格中的数据没有任何影响
在您提供的代码段中,没有setValue()
或setValues()
来电。没有它,您不会对电子表格的内容进行任何更改。假设您有一个要写入工作表的变量text
。你应该这样做:
sheet.getRange(1,csvData[0].length, csvData.length, 1).setValue(text);
.getValue()
方法返回给定范围内的对象 - 您的代码假定这是一个字符串。如果它不是一个字符串(比如说它是一个日期或数字),那么.replace()
将抛出异常。即使它是一个字符串,这一行也不会有用,因为你不能以任何方式存储结果:
sheet.getRange(1,csvData[0].length, csvData.length, 1).getValue().replace("\"","");
尝试:
var lastCellRange = sheet.getRange(1,csvData[0].length, csvData.length, 1);
var text = lastCellRange.getValue().replace("\"","");
lastCellRange.setValue(text);
其他评论:
您的replace()
语句将更改双引号字符的第一个匹配项,无论它出现在何处。您想要替换可能存在或不存在的前导引号或尾随引号,请尝试相反(来自this answer):
var text = lastCellRange.getValue().replace(/^"?(.+?)"?$/,'$1');