我试图回收几个月前用过的应用脚本,但遇到了问题。
在相关的驱动器目录中有两个文件: leads_data.csv; LeadsReport(Google Sheet)。
我的目标是使用脚本将数据从csv文件导入LeadsReport。
以下是csv文件在文本编辑器中的样子:
所以数据似乎用逗号隔开。
这是我的应用脚本:
// add the CSV menu. Might change this to be an automatic update base don date
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var csvMenuEntries = [{name: "Update Data", functionName: "importFromCSV"}];
ss.addMenu("Update", csvMenuEntries);
}
function importFromCSV() {
var file = DriveApp.getFilesByName("leads_data.csv");// get the file object
var csvFile = file.next().getBlob().getDataAsString();// get string content
Logger.log(csvFile);// check in the logger
var csvData = CSVToArray_(csvFile);// convert to 2D array
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('DataImport'); // only add data to the tab DataImport to prevent overwriting other parts of the spreadsheet
sheet.getRange(2,1, csvData.length, csvData[0].length).setValues(csvData);// write to sheet in one single step. Start at row 2 (getRange(2... )
SpreadsheetApp.getUi().alert('Data Updated');
}
function CSVToArray_(strData){
var rows = strData.split("\r");
// Logger.log(rows.length);
var array = [];
for(n=0;n<rows.length;++n){
if(rows[n].split(',').length>1){
array.push(rows[n].split(','));
}
}
Logger.log(array);
return array;
}
当我保存然后选择新菜单项&#34;更新&#34;我得到两个意想不到的结果:
根据之前的经验,我尝试过改变:
var rows = strData.split("\r");
var rows = strData.split("\n");
在每种情况下,我都得到了类似的结果。
任何人都可以看到我的脚本以这种方式导入数据的原因吗?
答案 0 :(得分:1)
使用内置的csv解析器。看看下面的剪辑。
https://developers.google.com/apps-script/reference/utilities/utilities#parseCsv(String)
function myFunction() {
var file = DriveApp.getFilesByName('CCStandards - English Language Arts & Literacy.csv').next();
Logger.log(Utilities.parseCsv(file.getBlob().getDataAsString()));
}
//您的代码改编如下
function importFromCSV() {
var file = DriveApp.getFilesByName("leads_data.csv");// get the file object
var csvFile = file.next().getBlob().getDataAsString();// get string content
var csvData = Utilities.parseCsv(csvFile);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('DataImport'); // only add data to the tab DataImport to prevent overwriting other parts of the spreadsheet
sheet.getRange(2,1, csvData.length, csvData[0].length).setValues(csvData);// write to sheet in one single step. Start at row 2 (getRange(2... )
SpreadsheetApp.getUi().alert('Data Updated');
}