我正在尝试使用Google-Apps-Script将CSV文件导入Google电子表格。
我从在线发现的this教程开始。我遇到了一些困难,一些搜索带我到this SO帖子。巧合的是,看起来OP正在尝试与我做同样的事情,所以我根据自己的需要调整了答案。
我的GDrive中有一些名为“cabbages”的csv文件中的虚拟数据
cabbages bananas apples carrots
0.006423706 0.34396684 0.446078488 0.58361487
0.099325843 0.534487652 0.391869452 0.637707661
0.610335498 0.053597109 0.700272752 0.693743589
0.861971984 0.023244272 0.611117465 0.574383772
0.55353014 0.380635698 0.763808189 0.785754755
0.760590319 0.451239949 0.738469185 0.643373164
这是我根据自己的需要调整的剧本:
// add the CSV menu. Might change this to be an automatic update based on date
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var csvMenuEntries = [{name: "Load from CSV file", functionName: "importFromCSV"}];
ss.addMenu("CSV", csvMenuEntries);
}
function importFromCSV() {
//var id = "cabbages";
var file = DriveApp.getFilesByName("cabbages.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.getActiveSheet();
sheet.getRange(1,1, csvData.length, csvData[0].length).setValues(csvData);// write to sheet in one single step
}
function CSVToArray_(strData){
var rows = strData.split("\n");
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;
}
该脚本运行并导入数据。麻烦的是,结果数据如下所示:
数据全部在第1行,并且不在原始文件中的正确列中。我曾希望结果数据看起来与cabbages.csv完全一样。
如何编辑我的脚本以匹配列?
答案 0 :(得分:2)
您的CSVToArray_函数期望数据单元格以逗号分隔,并且行以\ n(换行符)终止。
这些假设并不适用于您的情况,因此您需要确定要拆分的字符。
分开&#34;回车&#34; (\ r)而不是&#34; Newline&#34; (\ n)改变:
var rows = strData.split("\n");
到
var rows = strData.split("\r");
要分隔空格而不是逗号(例如,如果列是以制表符分隔的)
变化:
if(rows[n].split(',').length>1){
array.push(rows[n].split(','));
要:
if(rows[n].split(/\s/).length>1){
array.push(rows[n].split(/\s/));