1. 程式人生 > >Nodejs獲取網路資料並生成Excel表格

Nodejs獲取網路資料並生成Excel表格

Nodejs的模版中有很多關於Excel表格的,這裡我簡單介紹一下我使用過的一個模組的使用。

首先,先安裝Excel的模組:

npm install node-xlsx

然後,在程式碼中引入模組:

var xlsx = require('node-xlsx');

最後,獲取資料並寫入Excel:

var fs = require('fs');
var xlsx = require('node-xlsx');

var ajax = require('./ajax.js');
start();
function start() {
    ajax.ajax({
        url: "http://yuntuapi.amap.com/datamanage/data/list"
, type: "GET", data: { tableid: "XXX",//53eacbe4e4b0693fbf5fd13b key: "XXX" }, success: function (data) { var myDatas = []; var datas = (JSON.parse(data)).datas; var count = 0; for (var index in datas) { var
account = datas[index]; var colum = []; var names; if (index == 0) { names = []; } for (var index2 in account) { if (index == 0) names.push(index2); var
value = account[index2]; if (value == null) { value = ""; } colum.push(value); // console.log(account); } if (index == 0) { myDatas.push(names); } myDatas.push(colum); if (index == datas.length - 1) { writeXls(myDatas); } } console.log(myDatas.length); } }); } function writeXls(datas) { var buffer = xlsx.build({worksheets: [ {"name": "Group", "data": datas} ]}); fs.writeFileSync("Group.csv", buffer, 'binary'); } function parseXls() { var obj = xlsx.parse('myFile.xlsx'); console.log(obj); }

Ajax 部分的程式碼:

var https = require("https");
var http = require("http");
var Url = require("url");
var querystring = require('querystring');

// 預設值
var defaultSetting = {
    // 如果返回false可以取消本次請求
    beforeSend: function (req) {
    },
    complete: function (req) {
    },
    data: '', // Object, String
    dataType: 'JSON',
    error: function () {
    },
    headers: {}, // {k:v, ...}
    statusCode: {},
    success: function (data) {
    },
    timeout: 10,
    type: 'GET', // GET, POST
    url: "www.baidu.com"
};

/**
 *
 */
function ajax(settings) {
    // ajaxlbs.js(settings)
    if (typeof settings === "object") {
        // 處理預設值繼承
        // todo ...
        for (key in defaultSetting) {
            if (settings[key] == null) {
                settings[key] = defaultSetting[key];
            }
        }
    }

    var params = Url.parse(settings.url, true);
    // params 解析出來的引數如下
    // {
    // "protocol":"http:",
    // "slashes":true,
    // "host":"localhost:3000",
    // "port":"3000",
    // "hostname":"localhost",
    // "href":"http://localhost:3000/?d=1",
    // "search":"?d=1",
    // "query":{"d":"1"},
    // "pathname":"/",
    // "path":"/?d=1"
    // }

    var options = {
        host: params.hostname,
        port: params.port || 80,
        path: params.path,
        method: settings.type
    };

    if (settings.data != null) {
        options.path += "?"
        for (var key in settings.data) {
            options.path = options.path + "&" + key + "=" + settings.data[key];
        }
        console.log(options.path);
    }

    var httpUnity = http;
    if (params.protocol == "https:") {
        options.port = 443;
        var httpUnity = https;
    }

    var req = httpUnity.request(options,function (res) {
        var data = '';
        res.on('data',function (chunk) {
            data += chunk;
        }).on('end', function () {
                if (settings.dataType === "json") {
                    try {
                        data = JSON.parse(data);
                    } catch (e) {
                        data = null;
                    }
                }
                settings.success(data);
                settings.complete(req);
            });
    }).on('error', function (e) {
            settings.error(e);
        });

//    if (typeof settings.beforeSend === "function") {
//        if (!settings.beforeSend(req)) {
//            settings.complete(req);
//            req.end();
//            return false;
//        }
//    }

    if (settings.type === "POST") {
        var dataStr = querystring.stringify(settings.data);
        req.setHeader("Content-Length", dataStr.length);
        req.write(dataStr);
    }

    req.setTimeout(settings.timeout);
    req.end();
}

exports.ajax = ajax;

生成的Excel內容:
這裡寫圖片描述