Jeesite(SpringBoot)采用poi实现从数据库提取数据导出为Excel,巨详细!!

  1. 技术说明:

主要是SpringBoot一套

思路:写个XML查询数据 查询到后通过get属性方法放到Excel里

 

  1. Maven POM:



   org.apache.poi
   poi
   3.14



   org.apache.poi
   poi-ooxml
   3.14

  1.  实体类和service+Dao就不贴了很简单 就是一个查询出你要的数据而已

Controller

@RequestMapping(value = "export")
public void ExportTemplents(HttpServletResponse response, UserInfo userInfo) throws IOException {
    //查询数据
    List userInfoList = userInfoService.QueryExpert(userInfo);
    HSSFWorkbook wb = new HSSFWorkbook();//创建工作簿 HSSFWorkbook:Excel的文档对象
    HSSFFont font = wb.createFont();//设置字体大小 为什么要用wb.createFont呢 因为wb是主 font是包含这个里面的
    HSSFCellStyle style = wb.createCellStyle(); //设置单元格格式
    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//居中对齐格式
    font.setFontHeightInPoints((short) 28);//设置字体
    HSSFSheet sheet = wb.createSheet("专家信息表");//
    HSSFRow row = null; //创建行
    row = sheet.createRow(0);//创建第一行单元格.就像数组一样是0开头的
    row.setHeight((short) (26.5 * 20));//设置行高

    row.createCell(0).setCellValue("专家用户信息表"); //设置第一行单元格设置值
    HSSFPatriarch patr = sheet.createDrawingPatriarch();//HSSFPatriarch poi的划线方法
    HSSFComment comment = patr.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5));
    // 设置注释内容
    comment.setString(new HSSFRichTextString("专家状态 0:正常,1,冻结,2待审核,3审核通过,4审核未通过,5删除!"));

    //设置单元格合并 参数是:起始行号,终止行号, 起始列号,终止列号
    CellRangeAddress rowRegion = new CellRangeAddress(0, 0, 0, 2);
    sheet.addMergedRegion(rowRegion);
      //sheet是页 这个的意思在文档Sheet的第一行
    row = sheet.createRow(1);
    /*    row.setHeight((short) (22.50 * 20));*/
    //设置单元格格式
    row.setHeight((short) (20.29 * 20));
    //第一行标签
    row.createCell(0).setCellValue("专家id");
    row.createCell(1).setCellValue("专家姓名");
    row.createCell(2).setCellValue("专家账号");
    row.createCell(3).setCellValue("专家手机号");
    row.createCell(4).setCellValue("专家所属公司");
    row.createCell(5).setCellValue("专家状态");
    row.createCell(6).setCellValue("专家创建时间");
    row.createCell(7).setCellValue("性别");

    //遍历集合数据,产生数据行
    for (int i = 0; i < userInfoList.size(); i++) {
        row = sheet.createRow(i + 2);
        UserInfo userInfo1 = userInfoList.get(i);
        //往表格添加数据
        row.createCell(0).setCellValue(userInfo1.getId());
        row.createCell(1).setCellValue(userInfo1.getUserName());
        row.createCell(2).setCellValue(userInfo1.getNickname());
        row.createCell(3).setCellValue(userInfo1.getPhone());
        row.createCell(4).setCellValue(userInfo1.getCompany());
        //日期格式化
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time = sdf.format(userInfo1.getCreateDate());
        row.createCell(6).setCellValue(time);

   //性别处理 数据库存放的是1,2 我写的麻烦 你们自己处理吧
        Integer sex = userInfo1.getSex();
        String sex1 = null;
        if (sex == 1) {
            sex1 = "男";
            row.createCell(7).setCellValue(sex1);
        }
        else {
            row.createCell(7).setCellValue("女");
        }

    }
    sheet.setDefaultRowHeight((short) (20.29 * 20));
    for (int i = 0; i <= 6; i++) {
        sheet.autoSizeColumn(i);//自动行高
    }
   // response.setContentType 设置格式为UTF-8 不然可能会乱码
    response.setContentType("application/vnd.ms-excel;charset=utf-8");
   //output流得到流
    OutputStream os = response.getOutputStream();
    response.setHeader("Content-dEposition", "attachment;filename=专家信息.xls");
    wb.write(os);
    os.flush();//刷新流
    os.close();//关闭流
}

 

  • 忘了发前端页面是咋样的。。。。补上

a href="${ctx}/yinyue/userInfo/export"这东西是你的请求地址,根据自己项目修改

 

 

 

 

 

另外有大神总结了poi的使用详解 我把地址贴这里 去看看就明白很多了

https://www.cnblogs.com/huajiezh/p/5467821.html

你可能感兴趣的:(记录)