从excel转为csv下载

作者: 天驱丶 | 来源:发表于2017-09-11 23:22 被阅读15次

    管理后台通常涉及excel下载,由于公司最近重构项目变为三个小项目,数据库也分为了3个,这给管理后台增加了下载压力;在用户列表中,数据库操作涉及联表查询和跨库查询,几千条数据容易造成数据处理过长返回504;于是今天就开始了优化,优化预计分三步走:
    一、将excel转为csv下载,因为csv从格式上说就是一组组append的数据,不需要在格式转换上浪费运算量;
    二、优化联表查询,可以通过添加索引来优化;
    三、由于运算时间太长,所以可以打算使用email发送结果。

    • 从excel转为csv下载
    const stringify = require('csv-stringify')
    const Promise = require('bluebird')
    const _ = require('lodash')
    const iconv = require('iconv-lite')
    
    class ExcelUtil {
      static async genCsv (array, columns, request) {
        if (_.isEmpty(array) || _.isEmpty(columns)) throw new AppError('参数错误')
        return await new Promise(function (resolve, reject) {
          stringify(array, { header: true, columns: columns, delimiter: ',' }, function (err, data) {
            if (err) {
              return reject(err)
            }
            const userAgent = request && request.header && request.header['user-agent']
            if (userAgent && userAgent.match(/windows/i)) {
              data = iconv.encode(data, 'gbk')
            }
            resolve(data)
          })
        })
      }
    }
    
    module.exports = ExcelUtil
    

    其中遇到了一个坑,linux打开显示正常,windows显示乱码,我就猜测是编码的问题,问了同事他说之前也遇到过,windows使用gbk字符集,可以通过request的user-agent判断是否windows系统

    • 后续会继续优化

    相关文章

      网友评论

        本文标题:从excel转为csv下载

        本文链接:https://www.haomeiwen.com/subject/owrqsxtx.html