javaweb使用POI导出导出excel表格

由于工作的需要,需要用java将数据库中的数据导出为Excel表格,这就用到了Apache的POI组件,该组件让我们能够自定义创建Excel工作薄,然后导出文件即可。

1.首先准备好POI的包,使用maven导入或者直接加载jar都可以。

我是下载了poi-3.11-20141221.jar,poi-ooxml-3.11-20141221.jar,poi-ooxml-schemas-3.11-20141221.jar这三个包,添加到项目中即可。

使用maven的依赖如下:

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

2.创建excel的工作簿

POI创建excel的步骤就是:创建工作簿----->在工作簿中创建表格------>往表格中填入数据。

(1)对于Excel2007之前的版本(exce文件后缀是xls)

用到的对象是HSSFWorkbook

创建语句如下:

Workbook wb = new HSSFWorkbook();
(2)对于Excel2007以后(excel文件后缀是xlsx)
用到的对象是XSSFWorkbook
创建语句如下:
 
Workbook wb = new XSSFWorkbook();
以下示例用第二种方式,对于Excel2007之前的版本,所有的对象前缀XSS改为HSS即可。
 
(3)创建工作簿之后是创建工作页面(sheet):
 
XSSFSheet sheet = wb.getSheetAt(0);
这条语句是创建excel的第一个页面,也就是一个sheet。
 
(4)创建sheet之后是创建行,其中index是行索引。
 
XSSFRow row = sheet.createRow(index);
 
(5)最后是在行中创建单元格
 
Cell cell = row.createCell(index);
其中index是列索引。然后为该单元格设置值。
 
cell.setCellValue(cellValue);
 
(6)也可以为单元格设置样式:
先创建样式对象
CellStyle bodyRowStyle = wb.createCellStyle(); bodyRowStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); bodyRowStyle.setBorderBottom(HSSFCellStyle.BORDER_DOTTED); //下边框 bodyRowStyle.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左边框 bodyRowStyle.setBorderTop(HSSFCellStyle.BORDER_DOTTED);//上边框 bodyRowStyle.setBorderRight(HSSFCellStyle.BORDER_DOTTED);//右边框 XSSFFont font = wb.createFont(); font.setFontName("Arial"); font.setFontHeightInPoints((short) 9);//设置字体大小 bodyRowStyle.setFont(font);
最后为单元格设置样式:
 
cell.setCellStyle(cellStyle);
 
(7)到这一步之后Excel的工作簿已经创建完毕,下一步是将其导出,以下是javaweb中的方法。
 
protected void export(HttpServletRequest request,HttpServletResponse response,Workbook hwb,String fileName) throws IOException{ OutputStream os = null; try { os = response.getOutputStream(); response.reset(); String userAgent = request.getHeader("User-Agent"); if (userAgent.toLowerCase().indexOf("msie") > 0) { fileName = URLEncoder.encode(fileName, "UTF-8"); } else { fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1"); } response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); response.setContentType("application/x-download; charset=utf-8"); hwb.write(os); os.flush(); } finally { if (os != null) { os.close(); } } }


将我们的工作簿引用wb传入该函数即可。

至此,excel导出已经完成。
 
ps:有时因为excel的表头过于复杂,纯粹用程序创建太麻烦,我们可以先创建一个表头的excel模板文件,然后向该模板中写入单元格即可。具体方式如下:
 
File file=new File("C:\\Users\\Michael\\Desktop\\header.xlsx"); OPCPackage opcPackage=OPCPackage.open(file); wb = new XSSFWorkbook(opcPackage);

再写入行的时候记得跳过表头的那几行。

更多的POI API可以去官网看一看:http://poi.apache.org/spreadsheet/quick-guide.html
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值