开发带有后台的小程序时,数据很多的时候,就需要将数据批量导入数据库。

我在node端写了如下前端代码,以便导入EXCEL表格:

<div class="col-md-6 text-right">
<a href="#" class="btn btn-primary" id="addBtnExcel">导入数据</a>
</div>
                        <!-- 提交表格数据 -->
                        <div class="dialog isUploadExcel"></div>
                        <div class="panel dialog-wrap isUploadExcel">
                            <div class="panel-heading">
                                <h3 class="panel-title">上传数据(功能暂未实现)</h3>
                                <div class="right">
                                    <button class="close"><i class="lnr lnr-cross"></i></button>
                                </div>
                            </div>
                            <form method="POST" action="/uploadExcel" enctype="multipart/form-data" class="demo-button1" >
                                <button><input type="file" name="excel_file" id="excel_file" required/></button><br/><br/>
                                <button class="btn btn-primary" type="submit" value="上传">提交数据</button>
                            </form>
                        </div>
<!-- 提交表格数据 结束 -->

接下来,开始写上传excel的API接口文件:

var express = require('express');
var router = express.Router();
var multer = require('multer');
var upload = multer({ dest: 'uploads/' });
var xlsx = require('xlsx');
var db = require('../sql.js');

router.post('/', upload.single('excel_file'), function(req, res, next) {
    var workbook = xlsx.readFile(req.file.path);
    var sheet_name_list = workbook.SheetNames;
    var xlData = xlsx.utils.sheet_to_json(workbook.Sheets[sheet_name_list[0]]);

    xlData.forEach(function(row){
        var query = 'INSERT INTO info2 SET ?';
        db.query(query, row, function (error, results, fields) {
            if (error) throw error;
            // Neat!
        });
    });
    db.query('select * from info2',function (err,data) {
        var pager = {};
        //当前第几页,默认第一页
        pager.pageCurrent = 1;
        //总的记录数
        pager.maxNum = data.length;
        //每页显示多少条记录
        pager.pageSize = 8;
        //一共有多少页
        pager.pageCount = parseInt( Math.ceil( pager.maxNum / pager.pageSize ) );
        //修改了传递的数据数量,分页显示
        var dataList = data.slice(
            (pager.pageCurrent-1) * pager.pageSize ,
            (pager.pageCurrent-1) * pager.pageSize + pager.pageSize
        );
        if(err){
            throw err;
        }else {
            res.render('info1',{
                info:dataList,
                pager:pager
            })
        }
    })

    //res.send('File uploaded and data inserted!');
});

module.exports = router;

在上面的代码中,我们新建了一个文件夹uploads,用来保存excel表格。

然后使用multer中间件处理上传的文件,接着使用xlsx模块读取Excel文件的内容。对于每一行数据,我们构造一个INSERT查询并执行它。最后,我们发送一个响应,告知用户文件已上传且数据已插入。

最后非常重要的一点:你的Excel文件的列名,必须要与数据库表info2的列名匹配,否则这个代码可能无法正常工作。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐