版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aaajavac/article/details/85164098
java 导出excel表格
导入jar包
在pom.xml中导入jar包
<!-- 导出成excel表格用的包 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.6</version>
</dependency>
前端js中发送请求
只能使用form表单提交,不能用ajax提交,原因是使用ajax提交数据不能跳转到新页面进行下载excel
//导出成excel表格
<!--
encodeURIComponent(head) head是表单每列的标题,encodeURIComponent用来编码,
防止中文乱码,格式为aaa,bbb,ccc,ddd 表示这个表单有4列
body 表单主体内容 格式 a1,b1,c1,d1;a2,b2,c2,d2;表示有2行4列的数据
excelname 表示表单的名字
-->
$("<form method='post' action='../report/export.do'>"+
"<input type='hidden' name='head' value='"+encodeURIComponent("列标")+"'/>"+
"<input type='hidden' name='body' value='"+"body"+"'/>"+
"<input type='hidden' name='excelname' value='"
+encodeURIComponent("excelname")+"'/></form>").appendTo('body').submit().remove();
controller层
package com.morlia.management.controller;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.morlia.management.service.reportservice.ReportService;
/**
*导出数据到excel的控制器
* @date: 2018年10月31日 下午4:47:45
*/
@Controller
@RequestMapping(value = "/report")
public class ReportController {
@Autowired
private ReportService reportservice;
/**
*导出报表
*request head=xxxx,xxxx,xxxx(xxxx表示excel每列的标题)&body=yyy,yyy,yyy;yyy,yyy,yyy(用;号表示excel一行结束,yyy表示每个单元格的数据)
* @param: param
* @author : dcc
* @date: 2018年10月31日 下午4:49:26
*/
@RequestMapping(value = "/export.do", method = RequestMethod.POST)
public void export(HttHttpServletRequest req,HttpServletResponse response) throws Exception {
reportservice.getExcel(req, response);
}
}
service层
package com.morlia.management.service.reportservice;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.stereotype.Service;
import com.morlia.management.common.utils.ExcelUtil;
/**
* @注释 生成excel表格的接口service
* @author dcc
* @date 2018年12月6日 下午2:22:51
*/
@Service("reportservice")
public class ReportService {
Logger log = Logger.getLogger(this.getClass());
public void getExcel(HttHttpServletRequest req, HttpServletResponse rsp) throws IOException {
String head = "";
String excelname = "";
try {
head = req.getParameter("head");
excelname = req.getParameter("excelname");
head = URLDecoder.decode(head,"utf-8");
excelname = URLDecoder.decode(excelname,"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//excel标题
String[] title = head.substring(0, head.length()-1).split(",");
//获取body字段
String body = req.getParameter("body");
String[] bodys = body.split(";");
//获取tablename字段
String tablename = excelname;
String[][] content = new String[bodys.length][title.length];
//excel文件名
String fileName = tablename+System.currentTimeMillis()+".xls";
//sheet名
String sheetName = "统计信息表";
String con = "";
for (int i = 0; i < bodys.length; i++) {
log.debug("body["+i+"]:"+bodys[i].substring(0, bodys[i].length()-1));
content[i] = new String[title.length];
content[i]= bodys[i].substring(0, bodys[i].length()-1).split(",");
}
//创建HSSFWorkbook
HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName, title, content, null);
//响应到客户端
try {
this.setResponseHeader(rsp, fileName);
OutputStream os = rsp.getOutputStream();
wb.write(os);
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 发送响应流方法
* @param response
* @param fileName
*/
public void setResponseHeader(HttpServletResponse response, String fileName) {
try {
try {
fileName = new String(fileName.getBytes(),"ISO8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setContentType("application/octet-stream;charset=ISO8859-1");
response.setHeader("Content-Disposition", "attachment;filename="+ fileName);
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
工具类util
package com.morlia.management.common.utils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
/**
* 导出Excel
* @param sheetName sheet名称
* @param title 标题
* @param values 内容
* @param wb HSSFWorkbook对象
* @author dcc
* @return
*/
public class ExcelUtil {
public static HSSFWorkbook getHSSFWorkbook(String sheetName,String []title,String [][]values, HSSFWorkbook wb){
// 第一步,创建一个HSSFWorkbook,对应一个Excel文件
if(wb == null){
wb = new HSSFWorkbook();
}
// 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet(sheetName);
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
HSSFRow row = sheet.createRow(0);
// 第四步,创建单元格,并设置值表头 设置表头居中
HSSFCellStyle style = wb.createCellStyle();
// 创建一个居中格式
style.setAlignment(HorizontalAlignment.CENTER);
//声明列对象
HSSFCell cell = null;
//创建标题
for(int i=0;i<title.length;i++){
cell = row.createCell(i);
cell.setCellValue(title[i]);
cell.setCellStyle(style);
}
//创建内容
for(int i=0;i<values.length;i++){
row = sheet.createRow(i + 1);
for(int j=0;j<values[i].length;j++){
//将内容按顺序赋给对应的列对象
row.createCell(j).setCellValue(values[i][j]);
}
}
return wb;
}
}