如何导出到CSV?

时间:2014-08-14 12:35:41

标签: javascript node.js csv

我希望能够允许将对象下载为CSV文件。我已经将对象转换为适合CSV的格式,但我实际上无法下载它。我试过了:

window.open("data:text/csv;charset=utf-8,"+ escape(csvObj));

但我不断将窗口定义为错误,我的同事告诉我这是一种不好的方式。

这是我到目前为止所拥有的

'Export to CSV': function(msg, done){
 var array = [
    msg.data.title, 
    msg.data.description, 
    msg.data.objectives, 
    msg.data.outcome, 
    msg.data.hours
 ];
        var str = '';

        for(var i=0; i<array.length; i++){
            var line = '';

            for(var index in array[i]){
                line += array[i][index]+',';
            }
            line.slice(0,line.length-1);
            str += line+ '\r\n';
        }
        console.log('**************');
        console.log(str);

        var csvData="data:text/csv;charset=utf-8," + escape(str);
}

作为工作流程的一部分,当用户选择导出到csv选项时,它会进入此功能,所以我真正想做的就是现在下载csvData ...有关如何执行此操作的任何想法?

1 个答案:

答案 0 :(得分:0)

以下是如何在Node.js中将文本数据作为CSV文件提供的最小示例:

// Load the HTTP module
var http = require('http');

// Create a server that will send some data as a CSV file
var server = http.createServer(function (request, response) {

    // Send the appropriate HTTP headers
    response.writeHead(200, {"Content-Type": "text/csv", 
        "Content-disposition": "attachment;filename=foobar.csv"});

    // Send the actual data
    response.end("Foo,42,xxx\nBar,43,yyy\nBaz,44,zzz");
});

// Listen on HTTP port 8000
server.listen(8000);

请注意,text/csv是CSV文件的标准MIME类型,但如果您的客户端使用旧版本的Internet Explorer,则可能需要使用非标准MIME类型,例如application/vnd.ms-excel。在您的服务器功能中,用户代理字符串将位于request.headers['user-agent']