JavaWeb POI 导出Excel

刚开始实习没有多久,现在公司有个需求:将数据库当中的数据以Excel表格的形式导出来,以前从来没有做过这样子的东西,自己也不会做,怎么办?然后就上网找了一些资料,看看别人写的博客,搞了几个小时,终于搞出来了,顿时心里就有一点小小的成就感,好开心!也顺便把数据导出Excel的过程记录一下,给一些有需要的人参考一下,也给自己以后积累一点经验。这里我要说明一下:我公司采用的是Spring,Struts2,MyBatis三大框架的,而且我公司项目做完之后的信息展示页面有点复杂,为了方便讲解,我这里采用的是Spring MVC的框架,用一个很简单的例子来说明一下怎么将数据以Excel表的格式导出来而已,过程如下:Controller层代码如下:

@Controller

public class ExportController{

@Autowired

private ExportService exportService;

@RequestMapping(value = "/export/excel")

public void exportExcel(HttpServletRequest request, HttpServletResponse response)

throws Exception {

//生成一个列表信息

List list = new ArrayList();

list.add(new Student(0001,"童年","22","男"));

list.add(new Student(0002,"光光","23","女"));

list.add(new Student(0003,"丁丁","21","男"));

XSSFWorkbook wb = exportService.export(list);

response.setContentType("application/vnd.ms-excel");

response.setHeader("Content-disposition", "attachment;

filename=student.xlsx");

OutputStream ouputStream = response.getOutputStream();

wb.write(ouputStream);

ouputStream.flush();

ouputStream.close();

}

}

Service层代码如下:

@Service

public class ExportService {

//定义表头

String[] excelHeader = {"学号", "姓名", "年龄","性别"};

public XSSFWorkbook export(List list) {

//这里需要说明一个问题:如果是 Offices 2007以前的Excel版本,new的对象是:

**HSSFWorkbook** ,Offices 2007以后的Excel版本new的对象才是XSSFWorkbook

XSSFWorkbook wb = new XSSFWorkbook();

//生成一个工作表

Sheet sheet = wb.createSheet("学生表");

//生成第一行

Row row = sheet.createRow((int) 0);

//生成单元格的样式style

XSSFCellStyle style = wb.createCellStyle();

style.setAlignment(CellStyle.ALIGN_CENTER);

for (int i = 0; i

//获取每一个单元格

Cell cell = row.createCell(i);

//给单元格赋值

cell.setCellValue(excelHeader[i]);

//设置单元格的样式

cell.setCellStyle(style);

}

for (int i = 0; i

//得到当前行数的下一行(row.getRowNum():得到当前行数)

row = sheet.createRow(row.getRowNum() + 1);

Student student = list.get(i);

//赋值

row.createCell(0).setCellValue(student.getSno());

row.createCell(1).setCellValue(student.getName());

row.createCell(2).setCellValue(student.getAge());

row.createCell(3).setCellValue(student.getSex());

}

return wb;

}

}

前台JS代码:

导出Excel

设置Excel表样式:

1. 生成一个XSSFCellStyle

XSSFCellStyle cellStyle = wb.createCellStyle();

####2. 设置样式

``` java

// 设置单元格的横向和纵向对齐方式,具体参数就不列了,参考HSSFCellStyle

cellStyle.setAlignment(HSSFCellStyle.ALIGN_JUSTIFY);

cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

//设置单元格的填充方式,以及前景颜色和背景颜色

//设置填充方式(填充图案)

cellStyle.setFillPattern(HSSFCellStyle.DIAMONDS);

//设置前景色

cellStyle.setFillForegroundColor(HSSFColor.RED.index);

//设置背景颜色

cellStyle.setFillBackgroundColor(HSSFColor.LIGHT_YELLOW.index);

// 设置单元格底部的边框及其样式和颜色

cellStyle.setBorderBottom(HSSFCellStyle.BORDER_SLANTED_DASH_DOT);

cellStyle.setBottomBorderColor(HSSFColor.DARK_RED.index);

3. 将样式应用于单元格,但有些样式只对单元格起作用

cell.setCellStyle(cellStyle);

4. 合并单元格:

//方面里面参数分别为:(起始行,结束行,起始列,结束列)

sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 2));

设置单元格字体样式:

1. 创建XSSFFont对象:

XSSFFont fontfontStyle = wb.createFont();

2. 设置字体样式:

//设置字体样式

fontStyle.setFontName("宋体");

//设置字体高度

fontStyle.setFontHeightInPoints((short)20);

//设置字体颜色

font.setColor(HSSFColor.BLUE.index);

//设置粗体

fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

//设置斜体

font.setItalic(true);

//设置下划线

font.setUnderline(HSSFFont.U_SINGLE);

3. 将字体设置到单元格样式:

//字体也是单元格格式的一部分,所以也是属于CellStyle

// 将字体对象赋值给单元格样式对象

cellStyle.setFont(font);

// 将单元格样式应用于单元格

cell.setCellStyle(cellStyle);

本文也是参考了:Java Web利用POI导出Excel简单例子,和Java中使用poi导入、导出Excel 两篇文章,有兴趣的同学可以看一下!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190829A0II9F00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券