//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`);
}

项目中对获取的数据进行下载成Excel表格的更多相关文章

  1. EL表达式查询出来的数据,下载成excel表格,很实用的

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  2. vue项目中的elementUI的table组件导出成excel表

    1.安装依赖:npm install --save xlsx file-saver 2.在放置需要导出功能的组件中引入 import FileSaver from 'file-saver' impor ...

  3. php 从一个数组中随机获取固定数据

    <?php /* * * 通过一个标识,从一个数组中随机获取固定数据 * $arr 数组 * $num 获取的数量 * $time 随机固定标识值,一般用固定时间或者某个固定整型 * */ fu ...

  4. 使用 Qt 获取 UDP 数据并显示成图片(2)

    本文首发于 BriFuture 的 个人博客 在我的前一篇文章 使用 Qt 获取 UDP 数据并显示成图片 中,我讲了如何用 Python 模拟发送数据,如何在 Qt 中高效的接收 UDP 数据包并将 ...

  5. Java导出数据行写入到Excel表格:基于Apache POI

    Java导出数据行写入到Excel表格:基于Apache POI import java.io.File; import java.io.FileOutputStream; import org.ap ...

  6. IT项目中使用 json格式数据 保存项目配置信息, 在配置文件再读取json文件的内容进行赋值

    json格式小巧玲珑,适合做配置文件,特别是大型项目中, 可以将配置信息分类保存到不同的json文件中, 然后再在配置文件中读取配置文件的数据进行赋值, 这里以python为例进行说明: 假设在you ...

  7. [iOS微博项目 - 2.6] - 获取微博数据

    github: https://github.com/hellovoidworld/HVWWeibo   A.新浪获取微博API 1.读取微博API     2.“statuses/home_time ...

  8. 使用NSURLSession获取网络数据和下载文件

    使用NSURLSession获取网络数据 使用NSURLSession下载文件

  9. Vue项目中jsonp抓取数据实现方式

    因为最近在做vue的项目,在前端做数据的时候遇到了数据抓取的难题,查了一些资料,自己也研究了一下,总体来说是搞出来了(基于黄奕老师的项目找出来的经验),废话不多说,直接上代码 ------------ ...

随机推荐

  1. Git-stash(暂存)

    修改某文件后,不想commit,使用stash保存在本地的某分支内 # 暂存 git stash ## 可暂存新增文件 git stash -u ## 为此次暂存添加标识 git stash save ...

  2. SpringAop切面实现日志记录

    SpringAop切面实现日志记录代码实现:https://www.cnblogs.com/wenjunwei/p/9639909.html 问题记录 1.signature.getMethod(). ...

  3. Linux下PSSH的安装

    python实现的集群批量命令工具,非常方便集群管理.同时其还带有pscp等功能 在合适的目录下,这里本机为/soft 输入命令 wget https://pypi.python.org/packag ...

  4. 如何个性化定制iview中的table样式

    使用renderHeader.render函数 例子: column:[ {}, ..., { title:'较年初占比变化', key:''lastYearChange, renderHeader: ...

  5. bWAPP----HTML Injection - Reflected (URL)

    HTML Injection - Reflected (URL) 核心代码 1 <div id="main"> 2 3 <h1>HTML Injection ...

  6. ServiceStage-华为微服务开发与管理平台

    前言 在上一篇文章一年前,我来到国企搞IT 中,和小伙伴分享了我在国企这一年当中的所见,所闻,所想,很高兴能够获得很多同道中人的共鸣.过去一年,我的很大一部分工作都投入到公司技术平台的建设中.Jira ...

  7. web安全入门--入门条件

    介绍:网络安全由习大大提出,是继海.陆.空.外太空的第五大作战领域,也是一个关系国家安全和主权.社会稳定.民族文化继承和发扬的重要问题.其重要性,正随着全球信息化步伐的加快越来越重要.接下来,我向大家 ...

  8. 万字长文!从底层开始带你了解并发编程,彻底帮你搞懂java锁!

    线程是否要锁住同步资源 锁住 悲观锁 不锁住 乐观锁 锁住同步资源失败 线程是否要阻塞 阻塞 不阻塞自旋锁,适应性自旋锁 多个线程竞争同步资源的流程细节有没有区别 不锁住资源,多个线程只有一个能修改资 ...

  9. 利用css3和js实现旋转木马图片小demo

    先看效果图: 上源码 html代码 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  10. 2020 CSP-J 多校赛 Day 2 T2 题解

    0x01 引入 在考场时想了一个错误算法,口胡一下,或许对理解正解有点帮助. 我们考虑交换两个数产生的代价,你会发现我们需要让大的数重复被交换的次数尽可能少,减少它对后面的代价. 那么不难构思出一个按 ...