文章目录
前言
如何使用POI批量导出Excel文件(SSM)
一、什么是POI?
Apache POI 是基于 Office Open XML 标准(OOXML)和 Microsoft 的 OLE 2 复合文档格式(OLE2)处理各种文件格式的开源项目。 简而言之,您可以使用 Java 读写 MS Excel 文件,可以使用 Java 读写 MS Word 和 MS PowerPoint 文件。
模块
- HSSF - 提供读写 Microsoft Excel XLS 格式 (Microsoft Excel 97 (-2003)) 档案的功能。
- XSSF - 提供读写 Microsoft Excel OOXML XLSX 格式 (Microsoft Excel XML (2007+)) 档案的功能。
- SXSSF - 提供低内存占用量读写 Microsoft Excel OOXML XLSX 格式档案的功能。
- HWPF - 提供读写 Microsoft Word DOC97 格式 (Microsoft Word 97 (-2003)) 档案的功能。
- XWPF - 提供读写 Microsoft Word DOC2003 格式 (WordprocessingML (2007+)) 档案的功能。
- HSLF/XSLF - 提供读写 Microsoft PowerPoint 格式档案的功能。
- HDGF/XDGF - 提供读 Microsoft Visio 格式档案的功能。
- HPBF - 提供读 Microsoft Publisher 格式档案的功能。
- HSMF - 提供读 Microsoft Outlook 格式档案的功能。
二、使用步骤
1.引入依赖
代码如下(示例):
<!--poi依赖-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
2、mapper层代码 包括Mapper接口、Mapper SQL代码
Mapper接口中的方法
List<Activity> selectAllActivity();
Mapper层的SQL代码
<select id="selectAllActivity" resultMap="BaseResultMap">
select a.id,u1.name as owner,a.name,
a.start_date,a.end_date,a.cost,a.description,a.create_time,
u2.name as create_by,a.edit_time,u3.name as edit_by
from tbl_activity a
join tbl_user u1 on a.owner = u1.id
join tbl_user u2 on a.create_by = u2.id
left join tbl_user u3 on a.edit_by=u3.id
order by a.create_time desc
</select>
3、service层代码,包括service接口和实现类
service接口中的方法
List<Activity> queryAllActivity();
接口中实现类的方法
@Override
public List<Activity> queryAllActivity() {
return activityMapper.selectAllActivity();
}
4、controller层代码
controller类中的方法
@RequestMapping("/workbench/activity/exportAllActivity.do")
public void exportAllActivity(HttpServletResponse response) throws IOException {
List<Activity> activityList = activityService.queryAllActivity();
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("市场活动列表");
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
cell.setCellValue("ID");
cell = row.createCell(1);
cell.setCellValue("所有者");
cell = row.createCell(2);
cell.setCellValue("名称");
cell = row.createCell(3);
cell.setCellValue("开始日期");
cell = row.createCell(4);
cell.setCellValue("结束日期");
cell = row.createCell(5);
cell.setCellValue("成本");
cell = row.createCell(6);
cell.setCellValue("描述");
cell = row.createCell(7);
cell.setCellValue("创建时间");
cell = row.createCell(8);
cell.setCellValue("创建者");
cell = row.createCell(9);
cell.setCellValue("修改时间");
cell = row.createCell(10);
cell.setCellValue("修改者");
//遍历activity,每一条记录对应一行
//为防止异常,先对activity进行空判断
if (activityList != null && activityList.size() > 0) {
Activity activity = null;
for (int i = 0; i < activityList.size(); i++) {
activity = activityList.get(i);
row = sheet.createRow(i + 1);
//将遍历得到的每一条数据放到Excel文件中的每一行
cell = row.createCell(0);
cell.setCellValue(activity.getId());
cell = row.createCell(1);
cell.setCellValue(activity.getOwner());
cell = row.createCell(2);
cell.setCellValue(activity.getName());
cell = row.createCell(3);
cell.setCellValue(activity.getStartDate());
cell = row.createCell(4);
cell.setCellValue(activity.getEndDate());
cell = row.createCell(5);
cell.setCellValue(activity.getCost());
cell = row.createCell(6);
cell.setCellValue(activity.getDescription());
cell = row.createCell(7);
cell.setCellValue(activity.getCreateTime());
cell = row.createCell(8);
cell.setCellValue(activity.getCreateBy());
cell = row.createCell(9);
cell.setCellValue(activity.getEditTime());
cell = row.createCell(10);
cell.setCellValue(activity.getEditBy());
}
}
//客户端下载
response.setContentType("application/octet-stream;charset=UTF-8");
response.addHeader("Content-Disposition", "attachment;filename=activityList.xls");
//2.获取输出流
OutputStream out = response.getOutputStream();
wb.write(out);
wb.close();
out.flush();
}
5、前台jsp中js代码和html代码
//批量导出
//给导出按钮添加单击事件,发送请求
$("#exportActivityAllBtn").click(function () {
//同步请求
window.location.href = "workbench/activity/exportAllActivity.do";
});
<button id="exportActivityAllBtn" type="button" >下载列表数据(批量导出)</button>