使用SpringBoot 导出数据生成excel文件返回的方法
创始人
2024-11-17 14:21:17
0次

一、基于框架

1.IDE

IntelliJ IDEA

2.软件环境

Spring boot

mysql

mybatis

org.apache.poi

二、环境集成

1.创建spring boot项目工程

略过

2.maven引入poi




 org.apache.poi
 poi
 3.17



 org.apache.poi
 poi-ooxml
 3.17



 org.apache.poi
 poi-ooxml-schemas
 3.17

三、代码实现

此处以导出云端mysql数据中的用户表为例(数据为虚假数据)

1.配置xls表格表头

此处我创建一个class(ColumnTitleMap)来维护需要导出的mysql表和xls表头显示的关系

代码注释已经清晰明了,就不再赘述

/**
 * @desc:数据导出,生成excel文件时的列名称集合
 * @author: chao
 * @time: 2018.6.11
 */
public class ColumnTitleMap {
 private Map columnTitleMap = new HashMap();
 private ArrayList titleKeyList = new ArrayList ();

 public ColumnTitleMap(String datatype) {
  switch (datatype) {
   case "userinfo":
    initUserInfoColu();
    initUserInfoTitleKeyList();
    break;
   default:
    break;
  }

 }
 /**
  * mysql用户表需要导出字段--显示名称对应集合
  */
 private void initUserInfoColu() {
  columnTitleMap.put("id", "ID");
  columnTitleMap.put("date_create", "注册时间");
  columnTitleMap.put("name", "名称");
  columnTitleMap.put("mobile", "手机号");
  columnTitleMap.put("email", "邮箱");
  columnTitleMap.put("pw", "密码");
  columnTitleMap.put("notice_voice", "语音通知开关");
  columnTitleMap.put("notice_email", "邮箱通知开关");
  columnTitleMap.put("notice_sms", "短信通知开关");
  columnTitleMap.put("notice_push", "应用通知开关");
 }

 /**
  * mysql用户表需要导出字段集
  */
 private void initUserInfoTitleKeyList() {
  titleKeyList.add("id");
  titleKeyList.add("date_create");
  titleKeyList.add("name");
  titleKeyList.add("mobile");
  titleKeyList.add("email");
  titleKeyList.add("pw");
  titleKeyList.add("notice_voice");
  titleKeyList.add("notice_email");
  titleKeyList.add("notice_sms");
  titleKeyList.add("notice_push");
 }

 public Map getColumnTitleMap() {
  return columnTitleMap;
 }

 public ArrayList getTitleKeyList() {
  return titleKeyList;
 }
}

2.controller

提供对外接口,ExportDataController.java

package com.mcrazy.apios.controller;

import com.mcrazy.apios.service.ExportDataService;
import com.mcrazy.apios.service.UserInfoService;
import com.mcrazy.apios.util.datebase.columntitle.ColumnTitleMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @desc:数据导出api控制器
 * @author: chao
 * @time: 2018.6.11
 */

@Controller
@RequestMapping(value = "/exportdata")
public class ExportDataController {
 @Autowired
 UserInfoService userInfoService;
 @Autowired
 ExportDataService exportDataService;

 /**
  * @api: /apios/exportdata/excel/
  * @method: GET
  * @desc: 导出数据,生成xlsx文件
  * @param response 返回对象
  * @param date_start 筛选时间,开始(预留,查询时并未做筛选数据处理)
  * @param date_end 筛选时间,结束(预留,查询时并未做筛选数据处理)
  */
 @GetMapping(value = "/excel")
 public void getUserInfoEx(
   HttpServletResponse response,
   @RequestParam String date_start,
   @RequestParam String date_end
 ) {
  try {
   List> userList = userInfoService.queryUserInfoResultListMap();
   ArrayList titleKeyList= new ColumnTitleMap("userinfo").getTitleKeyList();
   Map titleMap = new ColumnTitleMap("userinfo").getColumnTitleMap();
   exportDataService.exportDataToEx(response, titleKeyList, titleMap, userList);
  } catch (Exception e) {
   //
   System.out.println(e.toString());
  }
 }
}

3.service

(1).用户表数据

UserInfoMapper.java

package com.mcrazy.apios.mapper;

import com.mcrazy.apios.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
import java.util.Map;


@Mapper
public interface UserInfoMapper {
 /**
  * @desc 查询所有用户信息
  * @return 返回多个用户List
  * */
 List> queryUserInfoResultListMap();
}

UserInfoMapper.xml

<?xml version="1.0" encoding="UTF-8"?>


 

UserInfoService.java

package com.mcrazy.apios.service;

import com.mcrazy.apios.mapper.UserInfoMapper;
import com.mcrazy.apios.model.UserInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

@Service
public class UserInfoService {
 @Autowired
 UserInfoMapper userInfoMapper;
 
 /**
  * @desc 查询所有用户信息
  * @return 返回多个用户List
  * */
 public List> queryUserInfoResultListMap() {
  List> list = userInfoMapper.queryUserInfoResultListMap();
  return list;
 }
}

(2). 生成excel文件和导出

ExportDataService.java

package com.mcrazy.apios.service;

import com.mcrazy.apios.util.datebase.ExportExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @desc:数据导出服务
 * @author: chao
 * @time: 2018.6.11
 */
@Service
public class ExportDataService {
 @Autowired
 ExportExcelUtil exportExcelUtil;

 /*导出用户数据表*/
 public void exportDataToEx(HttpServletResponse response, ArrayList titleKeyList, Map titleMap, List> src_list) {
  try {
   exportExcelUtil.expoerDataExcel(response, titleKeyList, titleMap, src_list);
  } catch (Exception e) {
   System.out.println("Exception: " + e.toString());
  }
 }
}

导出工具封装,ExportExcelUtil.java

package com.mcrazy.apios.util.datebase;

import com.mcrazy.apios.util.object.DateUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @desc:数据导出,生成excel文件
 * @author: chao
 * @time: 2018.6.12
 */
@Service
public class ExportExcelUtil {

 public void expoerDataExcel(HttpServletResponse response, ArrayList titleKeyList, Map titleMap, List> src_list) throws IOException {

  String xlsFile_name = DateUtils.currtimeToString14() + ".xlsx";  //输出xls文件名称
  //内存中只创建100个对象
  Workbook wb = new SXSSFWorkbook(100);   //关键语句
  Sheet sheet = null;  //工作表对象
  Row nRow = null;  //行对象
  Cell nCell = null;  //列对象

  int rowNo = 0;  //总行号
  int pageRowNo = 0; //页行号

  for (int k=0;k srcMap = src_list.get(k);
   //写入300000条后切换到下个工作表
   if(rowNo%300000==0){
    wb.createSheet("工作簿"+(rowNo/300000));//创建新的sheet对象
    sheet = wb.getSheetAt(rowNo/300000);  //动态指定当前的工作表
    pageRowNo = 0;  //新建了工作表,重置工作表的行号为0
    // -----------定义表头-----------
    nRow = sheet.createRow(pageRowNo++);
    // 列数 titleKeyList.size()
    for(int i=0;i

使用SpringBoot 导出数据生成excel文件返回的方法

得到xlsx文件,查看数据

使用SpringBoot 导出数据生成excel文件返回的方法

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...