在一个工作表中导入多个csv文件

时间:2015-08-03 21:00:01

标签: google-apps-script google-sheets

我尝试将多个csv文件导入一张表。 每个csv文件(Fil)只包含一个这样的数字:1234,00。 没什么。

应将数字导入多个不同的列(columnFil)。 每批csv文件应该在一行中导入。

问题在于我无法在一行中获取多个csv文件。 所以我尝试使用get-和setValue,但由于某些原因,Google Script在执行该部分时并不一致?

function Daily() {

   var Fil = [121,122,123];
   var columnFil = ["C","D","E"];

  for (var count = 0; count < 3; count++){
  Logger.log(count);


 var tab = "2015";
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tab);
  var fSource = DriveApp.getFolderById('123467890');
  var fi = fSource.getFilesByName(Fil[count]+".csv"); 
  var ss = SpreadsheetApp.openById('0987654321'); 


  if ( fi.hasNext() ) { 
    var file = fi.next();
    var csv = file.getBlob().getDataAsString();
    var csvData = CSVToArray(csv); // see below for CSVToArray function

    // loop through csv data array and insert (append) as rows into 'NEWDATA' sheet
    for ( var i=0, lenCsv=csvData.length; i<lenCsv; i++ ) {

      var rangeToBeMoved = sh.getRange(i+1, 1, 1, csvData[i].length);
      var values = rangeToBeMoved.csvData;
      sh.appendRow(csvData[i]);
}
  }

 var Avals = sh.getRange(tab+"!A1:A").getValues();
 var Alast = Avals.filter(String).length; // get last cell 
  var month = "=Month(A"+Alast+")";
 Logger.log(Alast);
  var csvData = sh.getRange(tab+"!A"+Alast).getValue();

 sh.getRange(tab+"!"+columnFil[count]+Alast).setValue(csvData); 
    var clear = sh.getRange(tab+"!A"+Alast);
      clear.clearContent();
  }
   sh.getRange(tab+"!A"+Alast).setValue(datum);
   sh.getRange(tab+"!B"+Alast).setValue(month);
}

注意,CSVToArray(csv)是以下的已知函数: http://www.bennadel.com/blog/1504-Ask-Ben-Parsing-CSV-Strings-With-Javascript-Exec-Regular-Expression-Command.htm

1 个答案:

答案 0 :(得分:0)

我可能有一个解决方案。 每个CSV导入都会添加到新行中。 因此,在导入完成后,我运行另一个将数据移动到特定列的函数(moveData)。 如果有更好/更简单的解决方案,请告诉我!

function moveData() {
var tab = "2015";
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tab);

var Fil = [121,122,123];
var columnFil = ["C","D","E"];
var counting = [2,1,0];

for (var count = 0; count < 3; count++){

var Avals = sh.getRange(tab+"!A1:A").getValues();
var Alast = Avals.filter(String).length; // get last cell 

Logger.log("Last row:" + Alast);

var csvData = sh.getRange(tab+"!A"+Alast).getValue();

var Alast = Alast - counting[count]; 

Logger.log("New row is:" + Alast);


sh.getRange(tab+"!"+columnFil[count]+Alast).setValue(csvData); 

var Alast = Alast + counting[count]; 

Logger.log("Cleanup old row: " + Alast);

var clear = sh.getRange(tab+"!A"+Alast);
clear.clearContent();

  }
}