项目中对获取的数据进行下载成Excel表格

 

//moment是操作日期的插件 
//引入lodash是为了方便操作数据
//xlsx是获取表格的必须插件
 
import moment from 'moment';
import _ from 'lodash';
import xlsx from 'xlsx';

export function exportCsv(originList, originColumns) {
//originList, originColumns 分别为你需要下载的数据列表以及数据title  
//这两条不能为空,否则报错
//不能直接操作原数据,因为可能会对数据进行一些必要的清楚/筛选操作,所以需要用到loadsh的深复制
  if (_.isEmpty(originList) || _.isEmpty(originColumns)) {
    return;
  }
  let list = _.cloneDeep(originList);
  const columns = _.cloneDeep(originColumns);
  const data = [];
//数据title中有“操作”这一条(最后一条)不必进行打印
  list.forEach((col, k) => {
    const colProfile = {};
    columns.forEach((item, index) => {
      if (_.get(item, 'title') === '操作') {
        return;
      }
 
//使用lodash的get方法,这样当数据为undefined的时候不会报错
 
      // let value = _.get(col, _.get(item, 'dataIndex'), '暂无');
      let value = _.get(col, _.get(item, 'dataIndex'));
      if (!_.get(item, 'dataIndex')) {
        value = item.convertor(col);
      }
      if (item.convertor && _.isFunction(item.convertor) && _.get(item, 'dataIndex')) {
        value = item.convertor(value);
      }
      if (_.isArray(value)) {
        value = value.join(',');
      }
      if(_.isArray(_.get(value,"industries"))){
        value=value.industries.join(",")
      }
      if (_.get(item, 'dataIndex') === 'index') {
        value = k + 1;
      }
      _.set(colProfile, _.get(item, 'title'), value);
    });

    data.push(colProfile);
  });
  const ws = xlsx.utils.json_to_sheet(data);
  const wb = xlsx.utils.book_new();
  xlsx.utils.book_append_sheet(wb, ws, moment().format('YYYYMMDDHHmmss'));
  xlsx.writeFile(wb, `${moment().format('YYYYMMDDHHmmss')}.xlsx`);
}

 

posted @ 2019-09-12 13:44  温润如玉Ayu  阅读(301)  评论(0编辑  收藏  举报