在写项目的时候用到了Poi赶紧记录了下来,分享一下
一.POI的简介
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
二.核心
1.HSSF 提供读写Microsoft Excel格式档案的功能。
2.XSSF 提供读写Microsoft Excel OOXML格式档案的功能。
3. HWPF 提供读写Microsoft Word格式档案的功能。
4. HSLF 提供读写Microsoft PowerPoint格式档案的功能。
5. HDGF 提供读写Microsoft Visio格式档案的功能。
三.具体的应用
1.去官网下载所需的jar包 http://poi.apache.org/
2.核心的代码如下
//导出excel
@RequestMapping("/export.controller")
public void export(String ids,HttpServletResponse response) throws IOException{
// 只是让浏览器知道要保存为什么文件而已,真正的文件还是在流里面的数据,你设定一个下载类型并不会去改变流里的内容。
//而实际上只要你的内容正确,文件后缀名之类可以随便改,就算你指定是下载excel文件,下载时我也可以把他改成pdf等。
System.out.println(ids);
response.setContentType("application/vnd.ms-excel");
// 传递中文参数编码
String codedFileName = java.net.URLEncoder.encode("中文","UTF-8");
response.setHeader("content-disposition", "attachment;filename=" + codedFileName + ".xls");
List<User> list = new ArrayList<User>();
String[] array = ids.split(",");
int[] id = new int[array.length];
for (int i = 0; i < id.length; i++) {
User user = service.getById(Integer.valueOf(array[i]));
// 将数据添加到list中
list.add(user);
}
// 定义一个工作薄
Workbook workbook = new HSSFWorkbook();
// 创建一个sheet页
Sheet sheet = workbook.createSheet("学生信息");
// 创建一行
Row row = sheet.createRow(0);
// 在本行赋值 以0开始
row.createCell(0).setCellValue("编号");
row.createCell(1).setCellValue("姓名");
row.createCell(2).setCellValue("性别");
row.createCell(3).setCellValue("年龄");
// 定义样式
CellStyle cellStyle = workbook.createCellStyle();
// 格式化日期
//cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
// 遍历输出
for (int i = 1; i <= list.size(); i++) {
User user1 = list.get(i - 1);
row = sheet.createRow(i);
row.createCell(0).setCellValue(user1.getId());
row.createCell(1).setCellValue(user1.getName());
row.createCell(2).setCellValue(user1.getSex());
row.createCell(3).setCellValue(user1.getAge());
}
OutputStream fOut = response.getOutputStream();
workbook.write(fOut);
fOut.flush();
fOut.close();
}
3.jsp的代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'show.jsp' starting page</title>
<script type="text/javascript" src="Jquery/jquery-1.8.2.min.js"></script>
<script>
function checkall(obj){
var arr=document.getElementsByName("alls");
for(var i=0;i<arr.length;i++){
arr[i].checked=obj.checked;
}
}
function Export(){
alert(1);
var ids="";
var arr=$(":checkbox:gt(0):checked").parent().next().text();
for(var i=0;i<arr.length;i++){
ids+=arr[i]+",";
}
var idss=ids.substring(0, ids.length-1);
location.href="export.controller?ids="+idss;
}
</script>
</head>
<body>
<table border="1" align="center">
<tr>
<td>
<input type="button" value="导出数据" onclick="Export()"/>
</td>
</tr>
<tr>
<td><input type="checkbox" onclick="checkall(this)"/>全选</td>
<td>编号</td>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
</tr>
<c:forEach items="${list}" var="user">
<tr>
<td><input type="checkbox" name="alls"/></td>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.sex}</td>
<td>${user.age}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
4.运行项目,结果如下:(一个小例子)