精华内容
下载资源
问答
  • springboot导出数据到Excel表格 开发工具与关键技术:Java springboot 作者:熊俊杰 撰写时间:2021.6.18 在使用导出的时候,pom.xml先引用poi框架 <dependency> <groupId>org.apache.poi</...

    springboot导出数据到Excel表格

    开发工具与关键技术:Java springboot 
    作者:熊俊杰
    撰写时间:2021.6.18
    

    在使用导出的时候,pom.xml先引用poi框架

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.17</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.17</version>
    </dependency>
    

    接下来就可以直接使用这个框架来导出数据了

    //导出数据
     public void Daochuassigns1(String assignsname, String isactive, HttpServletResponse response) throws IOException{    
      List<x_assigns> xa = xAssignsservices.daochushuju(assignsname,isactive);//查询出来的数据
            int count = xa.size();
            HSSFWorkbook wb = new HSSFWorkbook();
            HSSFSheet sheet = wb.createSheet("导出数据");//模板名称
            HSSFRow row = null;
            row = sheet.createRow(0);//创建第一个单元格
            row.setHeight((short) (26*20));//单元格的行高
            row.createCell(0).setCellValue("站点信息列表");//第一行单元格信息
            /*为标题设置表格以及内容
            * firstRow:从第一行开始
            * lastRow:从第0行结束
            * firstCol:从第一个单元格开始
            * lastCol:从第*个单元格结束
            * */
            CellRangeAddress rowRegin = new CellRangeAddress(0,0,0,3);
            sheet.addMergedRegion(rowRegin);
    
            row = sheet.createRow(1);
            row.setHeight((short) (22*20));//单元格的行高
            row.createCell(0).setCellValue("名称");//第一行单元格信息
            row.createCell(1).setCellValue("联系电话");//第二行单元格信息
            row.createCell(2).setCellValue("地址");//第三行单元格信息
            row.createCell(3).setCellValue("坐标");//第四行单元格信息
            //遍历所有数据
            for (int i=0;i < count;i++){
                x_assigns x = xa.get(i);
                row = sheet.createRow(i+2);
                //row.setHeight((short) (17*20));//单元格的行高
                row.createCell(0).setCellValue(x.getAssignsname());//第一行单元格信息
                row.createCell(1).setCellValue(x.getAssignsphone());//第二行单元格信息
                row.createCell(2).setCellValue(x.getAssignssite());//第三行单元格信息
                row.createCell(3).setCellValue(x.getCoordinates());//第四行单元格信息
            }
            sheet.setDefaultRowHeight((short) (17*20));
            //列宽自适应
            for (int i =0;i<=13;i++){
                sheet.autoSizeColumn(i);
            }
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
            OutputStream os = response.getOutputStream();
            response.setHeader ("Content-disposition","attachment;filename=导出数据.xls");//文件名称
            wb.write(os);
            os.flush();
            os.close();
        }
    

    还有一种更简单的导出方式,pom.xml引用easypoi导出excel表格

    <dependency>
        <groupId>cn.afterturn</groupId>
        <artifactId>easypoi-base</artifactId>
        <version>4.0.0</version>
    </dependency>
    <dependency>
        <groupId>cn.afterturn</groupId>
        <artifactId>easypoi-web</artifactId>
        <version>4.0.0</version>
    </dependency>
    <dependency>
        <groupId>cn.afterturn</groupId>
        <artifactId>easypoi-annotation</artifactId>
        <version>4.0.0</version>
    </dependency>
    

    在对应的实体类里面使用刚刚引用的框架,然后写上对应类的名称
    在这里插入图片描述

    然后直接通过下面的方法导出数据

    //导出数据
    @RequestMapping(value = "/Daochuassigns")//easypoi导出,method = RequestMethod.GET
    public void Daochuassigns(String assignsname, String isactive, HttpServletResponse response) throws IOException {
    List<x_assigns> xa = xAssignsservices.daochushuju(assignsname,isactive);//查询出数据
        //设置序号(将id字段作为序号,导出后实现序号递增)
        Integer i =1;
        for (x_assigns assigns : xa) {
            assigns.setAssignsid(i++);
        }
        // 导出操作
        ExcelUtils.exportExcel(xa, "报名点报表", "导出报名点", x_assigns.class, "报名点报表.xls", response);
    }
    
    展开全文
  • 使用SpringBoot 导出数据生成excel文件返回的方法发布时间:2020-10-28 00:34:29来源:亿速云阅读:168作者:Leah使用SpringBoot 导出数据生成excel文件返回的方法?相信很多没有经验的人对此束手无策,为此本文总结...

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

    发布时间:2020-10-28 00:34:29

    来源:亿速云

    阅读:168

    作者:Leah

    使用SpringBoot 导出数据生成excel文件返回的方法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

    一、基于框架

    1.IDE

    IntelliJ IDEA

    2.软件环境

    Spring boot

    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

    select * from user_info

    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

    Map 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

    Cell cell_tem = nRow.createCell(i);

    cell_tem.setCellValue(titleMap.get(titleKeyList.get(i)));

    }

    rowNo++;

    // ---------------------------

    }

    rowNo++;

    nRow = sheet.createRow(pageRowNo++); //新建行对象

    // 行,获取cell值

    for(int j=0;j

    nCell = nRow.createCell(j);

    if (srcMap.get(titleKeyList.get(j)) != null) {

    nCell.setCellValue(srcMap.get(titleKeyList.get(j)).toString());

    } else {

    nCell.setCellValue("");

    }

    }

    }

    response.setContentType("application/vnd.ms-excel;charset=utf-8");

    response.setHeader("Content-disposition", "attachment;filename=" + xlsFile_name);

    response.flushBuffer();

    OutputStream outputStream = response.getOutputStream();

    wb.write(response.getOutputStream());

    wb.close();

    outputStream.flush();

    outputStream.close();

    }

    }

    三、运行

    至此,所有代码工作已经做完,把程序运行起来,在浏览器调用接口,会自动下载到电脑中

    浏览器打开:http://192.168.1.70:8080/apios/exportdata/excel/?time_start=2018-12-19&end_start=2018-12-19

    效果

    9b34c8d84cb76295dd0c6cce9b2485e8.png

    2fb8140971794e13919d49ef57441a30.png

    得到xlsx文件,查看数据

    a231843ad01bf106816644c3190c10d9.png

    看完上述内容,你们掌握使用SpringBoot 导出数据生成excel文件返回的方法的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

    展开全文
  • springboot数据导出到Excel表格

    千次阅读 2019-12-27 11:15:30
    springboot整合apache.poi将数据导出Excel格式 第一步导入依赖jar包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</...

    springboot整合apache.poi将数据导出为Excel格式

    第一步导入依赖jar包

    <dependency>
          <groupId>org.apache.poi</groupId>
          <artifactId>poi</artifactId>
          <version>3.17</version>
    </dependency>
    

    第二步创建接收数据的vo


    这是要获取的数据内容

    实体类:

    package cn.aplid.vo;
    
    import java.io.Serializable;
    
    /**
     * Created by Administrator on 2019/12/27.
     */
    public class ServiceVo implements Serializable{
        private int service_id;
        private String service_name;
        private int HF;
        private int HP;
        private int HB;
        private int HH;
        private int HA;
        private int HD;
        private int HN;
        private int HV;
        private int HS;
        private int HW;
        private int HE;
        private int HC;
        private int SC;
        private int HL;
        private int HT;
        private int PD;
    
        public int getService_id() {
            return service_id;
        }
    
        public void setService_id(int service_id) {
            this.service_id = service_id;
        }
    
    
        public String getService_name() {
            return service_name;
        }
    
        public void setService_name(String service_name) {
            this.service_name = service_name;
        }
    
        public int getHF() {
            return HF;
        }
    
        public void setHF(int HF) {
            this.HF = HF;
        }
    
        public int getHP() {
            return HP;
        }
    
        public void setHP(int HP) {
            this.HP = HP;
        }
    
        public int getHB() {
            return HB;
        }
    
        public void setHB(int HB) {
            this.HB = HB;
        }
    
        public int getHH() {
            return HH;
        }
    
        public void setHH(int HH) {
            this.HH = HH;
        }
    
        public int getHA() {
            return HA;
        }
    
        public void setHA(int HA) {
            this.HA = HA;
        }
    
        public int getHD() {
            return HD;
        }
    
        public void setHD(int HD) {
            this.HD = HD;
        }
    
        public int getHN() {
            return HN;
        }
    
        public void setHN(int HN) {
            this.HN = HN;
        }
    
        public int getHV() {
            return HV;
        }
    
        public void setHV(int HV) {
            this.HV = HV;
        }
    
        public int getHS() {
            return HS;
        }
    
        public void setHS(int HS) {
            this.HS = HS;
        }
    
        public int getHW() {
            return HW;
        }
    
        public void setHW(int HW) {
            this.HW = HW;
        }
    
        public int getHE() {
            return HE;
        }
    
        public void setHE(int HE) {
            this.HE = HE;
        }
    
        public int getHC() {
            return HC;
        }
    
        public void setHC(int HC) {
            this.HC = HC;
        }
    
        public int getSC() {
            return SC;
        }
    
        public void setSC(int SC) {
            this.SC = SC;
        }
    
        public int getHL() {
            return HL;
        }
    
        public void setHL(int HL) {
            this.HL = HL;
        }
    
        public int getHT() {
            return HT;
        }
    
        public void setHT(int HT) {
            this.HT = HT;
        }
    
        public int getPD() {
            return PD;
        }
    
        public void setPD(int PD) {
            this.PD = PD;
        }
    }
    
    

    第三部通过代码进行表格参数设置

    package cn.aplid.service;
    
    import org.apache.poi.hssf.usermodel.*;
    
    /**
     * Created by Administrator on 2019/12/17.
     */
    public class SetTitle {
        public void setTitle(HSSFWorkbook workbook, HSSFSheet sheet){
            HSSFRow row = sheet.createRow(0);
            //设置列宽,setColumnWidth的第二个参数要乘以256,这个参数的单位是1/256个字符宽度
            sheet.setColumnWidth(0, 5*256);
            sheet.setColumnWidth(1, 10*256);
            sheet.setColumnWidth(2, 10*256);
            sheet.setColumnWidth(3, 10*256);
            sheet.setColumnWidth(4, 10*256);
            sheet.setColumnWidth(5, 10*256);
            sheet.setColumnWidth(6, 10*256);
            sheet.setColumnWidth(7, 10*256);
            sheet.setColumnWidth(8, 10*256);
            sheet.setColumnWidth(9, 10*256);
            sheet.setColumnWidth(10, 10*256);
            sheet.setColumnWidth(11, 10*256);
            sheet.setColumnWidth(12, 10*256);
            sheet.setColumnWidth(13, 10*256);
            sheet.setColumnWidth(14, 10*256);
            sheet.setColumnWidth(15, 10*256);
            sheet.setColumnWidth(16, 10*256);
            sheet.setColumnWidth(17, 10*256);
    
            //设置为居中加粗
            HSSFCellStyle style = workbook.createCellStyle();
            HSSFFont font = workbook.createFont();
            font.setBold(true);
            style.setFont(font);
    
            HSSFCell cell;
            cell = row.createCell(0);
            cell.setCellValue("服务序号");
            cell.setCellStyle(style);
    
            cell = row.createCell(1);
            cell.setCellValue("服务机构");
            cell.setCellStyle(style);
    
            cell = row.createCell(2);
            cell.setCellValue("助餐");
            cell.setCellStyle(style);
    
            cell = row.createCell(3);
            cell.setCellValue("助洁");
            cell.setCellStyle(style);
    
            cell = row.createCell(4);
            cell.setCellValue("助浴");
            cell.setCellStyle(style);
    
            cell = row.createCell(5);
            cell.setCellValue("助急");
            cell.setCellStyle(style);
    
            cell = row.createCell(6);
            cell.setCellValue("加电维修");
            cell.setCellStyle(style);
    
            cell = row.createCell(7);
            cell.setCellValue("助医");
            cell.setCellStyle(style);
    
            cell = row.createCell(8);
            cell.setCellValue("护理");
            cell.setCellStyle(style);
    
            cell = row.createCell(9);
            cell.setCellValue("探望");
            cell.setCellStyle(style);
    
            cell = row.createCell(10);
            cell.setCellValue("助购");
            cell.setCellStyle(style);
    
            cell = row.createCell(11);
            cell.setCellValue("住行");
            cell.setCellStyle(style);
    
            cell = row.createCell(12);
            cell.setCellValue("助乐");
            cell.setCellStyle(style);
    
            cell = row.createCell(13);
            cell.setCellValue("助聊");
            cell.setCellStyle(style);
    
            cell = row.createCell(14);
            cell.setCellValue("精神慰藉");
            cell.setCellStyle(style);
    
            cell = row.createCell(15);
            cell.setCellValue("助学");
            cell.setCellStyle(style);
    
            cell = row.createCell(16);
            cell.setCellValue("其他");
            cell.setCellStyle(style);
    
            cell = row.createCell(17);
            cell.setCellValue("开设家庭养老床位");
            cell.setCellStyle(style);
    
        }
    
    }
    
    

    业务实现

    接口

    package cn.aplid.mapper;
    
    import cn.aplid.vo.ServiceVo;
    import org.springframework.stereotype.Repository;
    
    import java.util.List;
    
    /**
     * Created by Administrator on 2019/12/27.
     */
    @Repository
    public interface QueryServiceMapper {
    
        List<ServiceVo> queryService();
    
    }
    

    实现

    package cn.aplid.service;
    
    import cn.aplid.mapper.QueryServiceMapper;
    import cn.aplid.vo.ServiceVo;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    /**
     * Created by Administrator on 2019/12/27.
     */
    @Service
    public class QueryService implements QueryServiceMapper{
        @Autowired
        private QueryServiceMapper queryServiceMapper;
    
        @Override
        public List<ServiceVo> queryService() {
            return queryServiceMapper.queryService();
        }
    }
    

    业务

    package cn.aplid.controller;
    
    import java.io.*;
    import java.util.ArrayList;
    import java.util.List;
    
    
    import cn.aplid.mapper.QueryServiceMapper;
    import cn.aplid.service.SetTitle;
    import cn.aplid.vo.ServiceVo;
    
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    import org.springframework.beans.factory.annotation.Autowired;
    
    import org.springframework.web.bind.annotation.*;
    
    
    import javax.servlet.http.HttpServletResponse;
    
    
    /**
     * Created by Administrator on 2019/12/17.
     */
    
    @RestController
    public class Excel_Controller {
    
        @Autowired
        private QueryServiceMapper queryServiceMapper;
        @RequestMapping(value = "/download",method = RequestMethod.POST)
        public void download(HttpServletResponse response) throws Exception{
            HSSFWorkbook workbook = new HSSFWorkbook();
            SetTitle setTitle = new SetTitle();
            //创建一个Excel表单,参数为sheet的名字
            HSSFSheet sheet = workbook.createSheet("服务老人统计");
            //创建表头
            setTitle.setTitle(workbook, sheet);
    
    
            List<ServiceVo> list = queryServiceMapper.queryService();
            System.out.print(list.toString());
            int rowNum = 1;
            for (ServiceVo serviceVo:list) {
                HSSFRow row = sheet.createRow(rowNum);
                row.createCell(0).setCellValue(serviceVo.getService_id());
                row.createCell(1).setCellValue(serviceVo.getService_name());
                row.createCell(2).setCellValue(serviceVo.getHF());
                row.createCell(3).setCellValue(serviceVo.getHP());
                row.createCell(4).setCellValue(serviceVo.getHB());
                row.createCell(5).setCellValue(serviceVo.getHH());
                row.createCell(6).setCellValue(serviceVo.getHA());
                row.createCell(7).setCellValue(serviceVo.getHD());
                row.createCell(8).setCellValue(serviceVo.getHN());
                row.createCell(9).setCellValue(serviceVo.getHV());
                row.createCell(10).setCellValue(serviceVo.getHS());
                row.createCell(11).setCellValue(serviceVo.getHW());
                row.createCell(12).setCellValue(serviceVo.getHE());
                row.createCell(13).setCellValue(serviceVo.getHC());
                row.createCell(14).setCellValue(serviceVo.getSC());
                row.createCell(15).setCellValue(serviceVo.getHL());
                row.createCell(16).setCellValue(serviceVo.getHT());
                row.createCell(17).setCellValue(serviceVo.getPD());
                rowNum++;
            }
            String fileName = "service.xlsx";
            //清空response
            response.reset();
            //设置response的Header
            response.addHeader("Content-Disposition", "attachment;filename="+ fileName);
            OutputStream os = new BufferedOutputStream(response.getOutputStream());
    
            response.setContentType("application/vnd.ms-excel;charset=gb2312");
            //将excel写入到输出流中
            workbook.write(os);
            os.flush();
            os.close();
    
    
        }
    
    }
    

    最后在前端设置一个下载按钮即可(不可用ajax请求地址,得用form表单访问)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <center>
        <div>
            <form action="/download" method="post">
                <input type="submit" value="下载">
            </form>
        </div>
    </center>
    </body>
    </html>
    

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    可以看到导出成功!

    展开全文
  • springboot中 如何用easypoi导出数据? 用ajax请求数据流,后台写入字节流无反应 maven导入easypoi的 springboot版本后,报 ErrorWebMvc is registry 的错误 easypoi的简单使用 在自己做的一个 SpringBoot 2.14...

    首先这篇博客可以告诉你什么?

    1. springboot中 如何用easypoi导出数据?
    2. 用ajax请求数据流,后台写入字节流无反应
    3. maven导入easypoi的 springboot版本后,报 ErrorWebMvc is registry 的错误
    4. easypoi的简单使用

    在自己做的一个 SpringBoot 2.14Relese 版本的一个小系统中 有数据导出的需求。

    以前是用 Apache的POI进行数据的导出, 但查到 有简单的封装插件 easypoi ,我决定用一下这个新东西。

    首先介绍一下它的中文教程

    http://easypoi.mydoc.io/

     

    这个插件通过注解的方式来实现自动添加列

    这个注解就是 @Excel 这是最核心的注解,其他的可以看它教程中的具体参数就好

    Maven的引入

    注意 这里就产生了一个问题 ,之前我是 用 easypoi-spring-boot-starter ,它与 导入上面的3个包的功能是一样的,但是 在 springboot 2.1以上的版本,SpringBoot关于 SpringMVC 的自动配置 中 存在 ErrorWebMvc等类的命名注册冲突,所以还是用回 上面的那3个jar包吧!! 

         <!-- 集成easypoi组件 .导出excel http://easypoi.mydoc.io/ -->
            <dependency>
                <groupId>cn.afterturn</groupId>
                <artifactId>easypoi-base</artifactId>
                <version>3.2.0</version>
            </dependency>
            <dependency>
                <groupId>cn.afterturn</groupId>
                <artifactId>easypoi-web</artifactId>
                <version>3.2.0</version>
            </dependency>
            <dependency>
                <groupId>cn.afterturn</groupId>
                <artifactId>easypoi-annotation</artifactId>
                <version>3.2.0</version>
            </dependency>
    
    
            <!--  Excel 导出插件 但 与 springboot 2.1 版本冲突 -->
          <!--  <dependency>
                <groupId>cn.afterturn</groupId>
                <artifactId>easypoi-spring-boot-starter</artifactId>
                <version>3.2.0</version>
            </dependency>-->

     

    我们需要导出的数据不一定要新建一个 pojo 类来 对应 列的关系数据

    如果在现有的 bean中符合要求,可直接在现有的 bean 上添加 注解

    需要导出那些字段上加上注解和相关参数

    @EntityScan
    public class Record {
    
        private String rid;
    
        @Excel(name = "修改人", width = 20)
        private String modify_username;
        @Excel(name = "工号", width = 20)
        private String emp_id;
        @Excel(name = "日期", width = 25,exportFormat = "yyyy-MM-dd HH:mm")
        private Date create_date;
        @Excel(name = "CAR号", width = 30)
        private String leasts;
        @Excel(name = "客户编码", width = 35)
        private String customercode;
        @Excel(name = "修改内容", width = 60)
        private String content;
        @Excel(name = "修改理由", width = 50)
        private String reason;
    
       // 省略get set
    }

    那么如果 是 存在一对多的关系咋办 ,比如 一个 班级 对应 一个老师,多个学生,导出班级的所有信息

     

    在 Class classes 这个类的字段中对于对象 和 集合添加 @ExcelEntity 和 @ExcelCollection即可

    当然ID是对应的, Teacher这个类上也要加@ExcelTarget (“teacher”)对应关系

     @ExcelTarget("classes")
     public class classes implements java.io.Serializable {
    
        private String        id;
    
        @Excel(name = "课程名称", orderNum = "1", width = 25)
        private String        name;
    
        @ExcelEntity(id = "teacher")
        private Teacher teacher;
    
        @ExcelCollection(name = "学生", orderNum = "4")
        private List<Student> students;
     }

    Controller类中相关方法

     @GetMapping("/export")
        public void complaintChangeRecordToExcel(@RequestParam("startdate") String startdate,
                                                @RequestParam("enddate") String enddate,
                                                HttpServletResponse response) throws  Exception {
           //  如果要使用 自己设计的模板,而不是让 插件给你自动创建就引入模板,写入字节流
           // TemplateExportParams params = new TemplateExportParams("com/suntak/eightdisciplines/doc/record.xlsx");
           // params.setSheetName("客诉修改明细");
            response.reset();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            // 由于传入的结束时间是 那天 的0点不符合实际需求,改为当天23:59分
            Date startday = sdf.parse(startdate);
            Date endday = sdf.parse(enddate);
            Calendar cal = Calendar.getInstance();
            cal.setTime(endday);
            cal.add(Calendar.DAY_OF_MONTH,1);
            endday = cal.getTime();
            List<Record> list = recordService.getRecordByOptions(startday,endday,"");
    
    
            //ExcelExportUtil.exportExcel( new ExportParams("8D客诉修改记录明细","客诉修改明细"),Record.class, list)
            // 这种是帮你 自行创建 EXCEL表格
            // 告诉浏览器用什么软件可以打开此文件
            response.setHeader("content-Type", "application/vnd.ms-excel");
            // 下载文件的默认名称
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("8D修改数据明细表","UTF-8") + ".xls");
            //编码
            response.setCharacterEncoding("UTF-8");
            Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), Record.class, list);
            workbook.write(response.getOutputStream());
        }

    前端当时我是用ajax请求的,发现不报错但是也没反应。这就引发了这个问题

    用ajax请求数据流,后台写入字节流无反应?

    为什么呢? 这是因为 ajax 是无法直接导出excel的, ajax返回的数据格式是字符流,而导出excel是后台往浏览器中写入二进制的字节流。

    字节流是 1byte : 8 bit

    字符流是 1 char : 2 byte : 16 bit

     

    那我们该如何 请求呢? 

    方法有很多,可以用一个内置表单来submit,也可以 window.open(),window.location.href

    这里用 window.location.href

       // 导出客诉修改EXCEL
        $("#exportBtn").click(function(){
            var start_day = $("#startdate").val();
            var end_day = $("#enddate").val();
    
            window.location.href = contextPath +"record/export?startdate="+start_day + "&enddate="+ end_day;
        });

    这样请求,浏览器就会直接接受到 Excel的字节流 生成一个 xlsx 的文件。

    这里说一下如果是自己设计的模板写入字节流时,模板该怎么写, 注意不要用别名, 直接用 t作为数据对象 {{fe:list t.username,t.password }}   ,让数据遍历每行就行。Controller类中的写法看中文文档。

     

     

    展开全文
  • Mapper.xml <select id="queryAllBook" resultType="Books"> SELECT * from books select> 测试类 从数据库导出到Excel @Test public void testSaveExcel() { try { WritableWorkbook wwb=null; //创建可写入的...
  • SpringBoot 数据导出excel

    千次阅读 2019-06-05 16:38:47
    SpringBoot导出数据的思路是自定义xls视图解析器 1、maven <!-- Apache POI Microsoft Documents API --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-...
  • springBoot导出excel数据

    2021-08-22 10:20:52
    public class POIUtils { /** * 导出数据 * @param list * @return */ public static ResponseEntity employee2Excel(List list) { //1. 创建一个 Excel 文档 HSSFWorkbook workbook = new HSSFWorkbook(); //2. ...
  • SpringBoot 导出Excel

    千次阅读 2019-01-12 05:01:42
    Springboot导出Excel -- poi 方式引入依赖创建表头与设置样式获取Excel数据 引入依赖 &lt;dependency&gt; &lt;groupId&gt;org.apache.poi&lt;/groupId&gt; &lt;artifactId&gt;...
  • SpringBoot导出excel数据报错Could not find acceptable representation 今天在实现后台导出数据时,导出数据一直报错: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable ...
  • Springboot导出excel,合并单元格示例

    千次阅读 2019-01-21 13:26:34
    原文链接:Springboot导出excel,...以下用一个示例来说明springboot如何导出数据到excel。 首先引入Maven依赖: &lt;dependency&gt; &lt;groupId&gt;org.apache.poi&lt;/groupId&gt; ...
  • -- 导出excel --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.13</version> </dependency> <...
  • SpringBoot导出Excel模板

    2020-10-23 14:15:21
    文章目录SpringBoot导出Excel模板pom.xml依赖Excel模板文件Controller测试 SpringBoot导出Excel模板 共同探讨,向各位大佬学习 走向CEO,迎娶白富美 pom.xml依赖 <!--excel--> <dependency> <...
  • SpringBoot导出excel

    2020-03-22 16:57:16
    SpringBoot导出excel 引入maven依赖: <!-- POI --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> &...
  • Controller层: //导出处理 @RequestMapping("export.do") public void export(HttpServletResponse response){ //文件名 String fileName="搜索结果"+System.currentTimeMillis()+"...
  • springboot导出excel

    2020-08-18 18:01:28
    --导入导出Excel--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.13</version> </dependency> <...
  • 注意:本文参照...1.表设计 2.pom.xml文件添加依赖 <!-- poi实现excel导入导出--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId>

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,622
精华内容 1,448
关键字:

springboot导出数据到excel

spring 订阅