将 CSV 数据导入 GSheets。 Headers,行和列未对齐

Importing CSV data into GSheets. Headers, rows and columns not alligned

我正在尝试使用 Google-Apps-Script 将 CSV 文件导入 Google-Spreadsheet。

我从 this tutorial which I found online. I ran into some difficulties with it and some searching brought me to this SO post 开始。巧合的是,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.

如何编辑脚本以匹配列?

您的 CSVToArray_ 函数需要用逗号分隔的数据单元格,以及以 \n(换行符)终止的行。

这些假设在您的情况下不成立,因此您需要确定要拆分的字符。

拆分 "Carriage Return" (\r) 而不是 "Newline" (\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/));