从excel转为csv下载

管理后台通常涉及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系统

  • 后续会继续优化
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容