您的位置:首页 > 编程语言 > Java开发

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

2019-02-13 14:10 701 查看
  1. 技术说明:

主要是SpringBoot一套

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

 

  1. Maven POM:

[code]<!--POI对office操作jar包-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>
  1.  实体类和service+Dao就不贴了很简单 就是一个查询出你要的数据而已

Controller

[code]@RequestMapping(value = "export")
public void ExportTemplents(HttpServletResponse response, UserInfo userInfo) throws IOException {
//查询数据
    List<UserInfo> 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();//关闭流
}

 

  • 忘了发前端页面是咋样的。。。。补上
[code]<div style="margin-left: 10px">

<a href="${ctx}/yinyue/userInfo/export"><button type="button" class="btn btn-primary">导出</button></a>
</div>

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

 

 

 

 

 

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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐