【发布时间】:2021-07-22 09:32:53
【问题描述】:
我是 GAS 新手,我正在努力解决我遇到的问题。 (我在网站上没有找到可以解决我问题的类似问题,因此我要问一个新问题)
目标:将 CSV 从 Google 云端硬盘导入 Google 表格
问题:
csv 文件中的货币为“1,000.57” --> 美国格式
我需要的货币格式 "1.000,57" --> 欧洲格式
目前Utilities.parseCsv() 的格式被弄乱了,货币完全错误。
问题:有没有办法把“,”改成“.”和 ”。”在解析期间到“,”?如果是这样,由于csv的分隔符也是“,”,因此是否会出现进一步的问题。
我已经在网上找到了一些代码 sn-ps(不是我的代码:props to spreadsheet.dev)并尝试更改以下内容,但它似乎不起作用:
//Imports a CSV file in Google Drive into the Google Sheet
function importCSVFromDrive() {
var fileName = promptUserForInput("Please enter the name of the CSV file to import from Google Drive:");
var files = findFilesInDrive(fileName);
if(files.length === 0) {
displayToastAlert("No files with name \"" + fileName + "\" were found in Google Drive.");
return;
} else if(files.length > 1) {
displayToastAlert("Multiple files with name " + fileName +" were found. This program does not support picking the right file yet.");
return;
}
var file = files[0];
var csvString = file.getBlob().getDataAsString()
var escapedString = csvString.replace(",",".")
.replace(".",",");
var contents = Utilities.parseCsv(escapedString);
var sheetName = writeDataToSheet(contents);
displayToastAlert("The CSV file was successfully imported into " + sheetName + ".");
}
//Prompts the user for input and returns their response
function promptUserForInput(promptText) {
var ui = SpreadsheetApp.getUi();
var prompt = ui.prompt(promptText);
var response = prompt.getResponseText();
return response;
}
//Returns files in Google Drive that have a certain name.
function findFilesInDrive(filename) {
var files = DriveApp.getFilesByName(filename);
var result = [];
while(files.hasNext())
result.push(files.next());
return result;
}
//Inserts a new sheet and writes a 2D array of data in it
function writeDataToSheet(data) {
var ss = SpreadsheetApp.getActive();
sheet = ss.insertSheet();
sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
return sheet.getName();
}
我做错了什么?
【问题讨论】:
-
您的 csv 文件的实际分隔符是什么?是分号吗?也许你可以拿这个代码gist.github.com/IranthaJ/…
-
@MikeSteelson 感谢迈克的快速回答。我的 CSV 文件实际上有逗号作为分隔符。我尝试了您提供的代码,但不幸的是它导致了以下错误:“异常:在对象 DriveApp.importCSV 上获取方法或属性 getFolderById 时出现意外错误”
-
你能给我们一个你的 csv 文件的样本吗?它在哪里?
-
如果分隔符是逗号
,,那么单元格内包含逗号的任何数据都应该用引号"(在propper CSV中)。在这种情况下,您可以查找并替换引用文本中的任何逗号。没什么大不了的。虽然如果您的数据包含引号内的引号......所以解决方案在很大程度上取决于您的数据。没有通用的通用解决方案。 -
var escapedString = csvString.replace(",",".").replace(".",",");太搞笑了。一个常见的错误。你会在任何地方得到逗号(如果你设法替换所有,而不仅仅是一个字母)。在这种情况下,您需要三个步骤:替换,-->_然后替换.-->,然后替换_-->.。
标签: csv google-apps-script google-sheets