2014-09-24 98 views
0

我有一个二维数组,我试图将其转换为CSV。我在网上发现了一些代码,但是当我根据自己的需要调整它时,它不起作用。这是谷歌Apps脚本。二维数组为CSV Javascript

不变的东西:

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); 
} 
} 

没有错误显示,但它显示为 “未定义” 为CSV保存在谷歌驱动器。

+1

顺便说一句,我在你的个人资料上看到你永远不会接受任何答案......为什么?对你不够好? (我不是在说我,更多的是关于bigQuery的问题。) – 2014-09-24 18:31:05

+0

不够好,请检查你的priveleges。 – 2014-09-29 15:20:42

回答

0

您的convertRangeToCsvFile_函数不返回任何东西。你需要一个return语句:

csvFile = csv; 
return csv; 

或者你可以定义变量csvFile作为一个全局变量,如果你正试图避免传递参数。

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

function saveAsCSV() { 
    code here 
);