2d阵列到CSV Javascript

时间:2014-09-24 16:16:43

标签: javascript csv google-apps-script

我有一个2D数组,我正在尝试将其转换为CSV。我在网上找到了一些代码但是当我根据自己的需要调整它时,它没有用。这适用于Google Apps脚本。

不变的东西:

function saveAsCSV() {
  // Prompts the user for the file name
  var fileName = Browser.inputBox("Save CSV file as (e.g. myCSVFile):");

 // Check that the file name entered wasn't empty
 if (fileName.length !== 0) {
// Add the ".csv" extension to the file name
fileName = fileName + ".csv";
// Convert the range data to CSV format
var csvFile = convertRangeToCsvFile_(fileName);
// Create a file in the Docs List with the given name and the CSV data
DocsList.createFile(fileName, csvFile);
}
else {
Browser.msgBox("Error: Please enter a CSV file name.");
}
}

改变了东西:

function convertRangeToCsvFile_(csvFileName) {
   // Get the selected range in the spreadsheet
   var ws = SpreadsheetApp.getActiveSpreadsheet();
 try {
//var data = ws.getValues();
var csvFile = undefined;

// Loop through the data in the range and build a string with the CSV data
var csv = "";
var row = 3;
csvFileName = "test9";
var datArray = Create2DArray(1,19);

  datArray[0][0] =  ws.getRange("A" + row.toString()).getValue().toString().toUpperCase();
  datArray[0][1] =  ws.getRange("B"+row.toString()).getValue().toString().toUpperCase();
  datArray[0][2] =  ws.getRange("C"+row.toString()).getValue().toString().toUpperCase();
  datArray[0][3] =  ws.getRange("D"+row.toString()).getValue().toString().toUpperCase();
  datArray[0][4] =  ws.getRange("E"+row.toString()).getValue().toString().toUpperCase();
  datArray[0][5] =  ws.getRange("F"+row.toString()).getValue().toString().toUpperCase();
  datArray[0][6] =  ws.getRange("G"+row.toString()).getValue().toString().toUpperCase();
  datArray[0][7] =  ws.getRange("H"+row.toString()).getValue().toString().toUpperCase();
  datArray[0][8] =  ws.getRange("I"+row.toString()).getValue().toString().toUpperCase();
  datArray[0][9] =  new Date(ws.getRange("K"+row.toString()).getValue().toString()).getHours();
  datArray[0][10] =  new Date(ws.getRange("K"+row.toString()).getValue().toString()).getMinutes();
  datArray[0][11] =  new Date(ws.getRange("L"+row.toString()).getValue().toString()).getHours();
  datArray[0][12] =  new Date(ws.getRange("L"+row.toString()).getValue().toString()).getMinutes();
  datArray[0][13] =  new Date(ws.getRange("M"+row.toString()).getValue().toString()).getHours();
  datArray[0][14] =  new Date(ws.getRange("M"+row.toString()).getValue().toString()).getMinutes();
  datArray[0][15] =  new Date(ws.getRange("N"+row.toString()).getValue().toString()).getTime();
  datArray[0][16] =  new Date(ws.getRange("N"+row.toString()).getValue().toString()).getFullYear();
  datArray[0][17] =  new Date(ws.getRange("N"+row.toString()).getValue().toString()).getMonth();
  datArray[0][18] =  new Date(ws.getRange("N"+row.toString()).getValue().toString()).getDate();
for(var i = 0; i < 19; i++){
  if(datArray[0][i] == ""){datArray[0][i] = "nil"; } 
}
Logger.log(datArray);
Logger.log(datArray.length);

   //   csv += datArray[row].join(",") + "\r\n";

    csv += datArray[0];
     Logger.log(csv);
csvFile = csv;

}
catch(err) {
 Logger.log(err);
 Browser.msgBox(err);
}
}

没有错误显示,但显示为&#34;未定义&#34;因为CSV保存在谷歌驱动器中。

1 个答案:

答案 0 :(得分:0)

您的 convertRangeToCsvFile _ 功能不会返回任何内容。你需要一个return语句:

csvFile = csv;
return csv;

或者,如果您试图避免传递参数,则可以将变量csvFile定义为全局变量。

//Declared outside of a function
var csvFile = "";

function saveAsCSV() {
  code here
);