一、说明
本文只贴导出功能代码,导入功能可以参考博文http://blog.csdn.net/justinqin/article/details/78769789
二、功能代码
Mapper层
<resultMap id="OddNumbers" type="com.sale.entity.Order" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="order_number" property="orderNumber" jdbcType="VARCHAR" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="phone" property="phone" jdbcType="VARCHAR" />
</resultMap>
<!-- 查询所有 -->
<select id="selectAll" resultMap="order" parameterType="java.util.Map">
select * from order
</select>
<!-- 查询总记录数 -->
<select id="total" resultType="java.lang.Integer">
select count(id) from order
</select>
Controller层
// 单号信息service
@Autowired
public OrderService orderService ; //服务层改为自己的
/**
* 导出订单信息到Excel表
* @author Justin
*/
@RequestMapping("order_export.action")
public void exportOrderToExcel(HttpServletResponse response) throws IOException {
try {
Order order= new Order();
List<Order> orderList = orderService.selectAll(); //列表,服务层改为自己的
if(orderList .size()==0){
response.sendRedirect("errornull.action");
}else{
// 在内存中创建一个Excel文件,通过输出流写到客户端提供下载
// 内存中保留 10000 条数据,以免内存溢出,其余写入 硬盘
SXSSFWorkbook workbook = new SXSSFWorkbook(10000);
// 创建一个sheet页
SXSSFSheet sheet = (SXSSFSheet) workbook.createSheet("订单信息");
// 分别设置Excel列的宽度
sheet.setColumnWidth(0, 150 * 40);
sheet.setColumnWidth(1, 100 * 40);
sheet.setColumnWidth(2, 100 * 40);
sheet.setColumnWidth(3, 100 * 40);
// 创建标题
SXSSFRow headRow = (SXSSFRow) sheet.createRow(0);
headRow.createCell(0).setCellValue("订单号");
headRow.createCell(1).setCellValue("姓名");
headRow.createCell(2).setCellValue("地址");
headRow.createCell(3).setCellValue("电话");
for (Order order: orderList) {
// 创建行
SXSSFRow dataRow = (SXSSFRow) sheet.createRow(sheet.getLastRowNum() + 1);
dataRow.createCell(0).setCellValue(order.getOrderNumber().toString());
dataRow.createCell(1).setCellValue(order.getName().toString());
dataRow.createCell(2).setCellValue(order.getAddress().toString());
dataRow.createCell(3).setCellValue(order.getPhone.toString());
}
// 设置Excel文件名,并以中文进行编码
String name = "订单信息"+ DateUtils.getyyyyMMddHHmmss(new Date());
String codedFileName = new String(name.getBytes("gbk"), "iso-8859-1");
response.setHeader("Content-Disposition", "attachment;filename=" + codedFileName + ".xlsx");
// 响应类型,编码
response.setContentType("application/octet-stream;charset=UTF-8");
// 形成输出流
OutputStream osOut = response.getOutputStream();
// 将指定的字节写入此输出流
workbook.write(osOut);
// 刷新此输出流并强制将所有缓冲的输出字节被写出
osOut.flush();
// 关闭流
osOut.close();
/*
* dispose of temporary files backing this workbook on disk 处理在磁盘上备份此工作簿的临时文件
* SXSSF分配临时文件,您必须始终清除显式,通过调用dispose方法
*/
workbook.dispose();
}
} catch (Exception e) {
e.printStackTrace();
response.sendRedirect("error.action");
log.error("系统错误", e.fillInStackTrace());
}
}