js: export:function(){
var dt=$("#form").serializeJSON();
// 注意这里因为url中有中文等字符,所以需要编码
// 还有这里url中/userFilter前添加了..,取的是相对路径
location.href=encodeURI(context+'/export.json?parameterMap='+ JSON.stringify(dt));
}
工具类:
public class ExcelportUtil {
/**
* 导出Excel普通格式通用方法
* @param sheetName sheet名称
* @param title
* @param values
* @param wb
* @author FMNS
* @return
*/
public static HSSFWorkbook getHSSFWorkbook(String sheetName, String []title, String [][]values, HSSFWorkbook wb,List<String> arrList) {
// 第一步,创建一个HSSFWorkbook,对应一个Excel文件
if(wb == null){
wb = new HSSFWorkbook();
}
if(arrList.size()==0 || null == arrList) {
arrList = new ArrayList<String>();
}
// 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet(sheetName);
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
HSSFRow row = sheet.createRow(0);
// 第四步,创建单元格,并设置值表头 设置表头居中
HSSFCellStyle titleStyle = wb.createCellStyle();
HSSFCellStyle cellStyle = wb.createCellStyle();
HSSFCellStyle cellStyleRed = wb.createCellStyle();
//设置字体
Font headFont = wb.createFont();
Font cellFont = wb.createFont();
headFont.setFontHeightInPoints((short)10);
headFont.setFontName("宋体");
headFont.setItalic(false);
headFont.setStrikeout(false);
cellFont.setColor(HSSFColor.RED.index);
titleStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
// 创建一个居中格式
titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
titleStyle.setFont(headFont);
cellStyle.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
//cellStyleRed.setFillForegroundColor(HSSFColor.RED.index);
// cellStyleRed.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
cellStyleRed.setFont(cellFont);
/* cellStyleRed.setWrapText(true);
cellStyle.setWrapText(true);
*/ //声明列对象s
HSSFCell cell = null;
//创建标题
for(int i=0;i<title.length;i++){
cell = row.createCell(i);
cell.setCellValue(title[i]);
cell.setCellStyle(titleStyle);
}
//创建内容
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]);
if(arrList.contains(row.getRowNum()+"_"+j)) {
row.getCell(j).setCellStyle(cellStyleRed);
}else {
row.getCell(j).setCellStyle(cellStyle);
}
}
}
for(int i=0;i<title.length;i++){
sheet.autoSizeColumn(i,true);
}
return wb;
}
/**
* 发送响应流方法
*/
public static 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();
}
}
}
service:public void getExport(HttpServletRequest request, HttpServletResponse response) {
BusinessManage manage=new BusinessManage();
try {
// 对应前端的编码,在这里进行解码,并解析json为Map
String value = URLDecoder.decode(request.getParameter("parameterMap"), "UTF-8");
manage = JSON.parseObject(value,BusinessManage.class);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//获取数据
List<BusinessManage> list=businessManageMapper.selectExport(manage);
if(null!=list && list.size()>0){
String[] title=new String[] {"XX","XX","XX","XX","XX","XX","XX","XX","XX","XX","XX","XX"};
String[][] content=new String[list.size()][12];
String sheetName="导出表";
String fileName=sheetName+".xls";
List<String> array= new ArrayList<>();
for(int i=0;i<list.size();i++) {
content[i]=new String[title.length];
BusinessManage record=list.get(i);
content[i][0]=record.getXX();
content[i][1]=record.getXX();
content[i][2]=record.getXX();
content[i][3]=record.getXX();
content[i][4]=record.getXX();
content[i][5]=record.getXX();
content[i][6]=record.getXX();
content[i][7]=record.getXX();
content[i][8]=sf.format(record.getXX());
content[i][9]=XXEnum.getByCode(record.getXX().toString());
content[i][10]=sf.format(record.getXX());
content[i][11]=record.getXX();
}
HSSFWorkbook wb = ExcelportUtil.getHSSFWorkbook(sheetName, title, content, null,array);
try {
ExcelportUtil.setResponseHeader(response, fileName);
OutputStream os = response.getOutputStream();
wb.write(os);
os.flush();
os.close();
}catch (Exception e) {
e.printStackTrace();
logger.error("excel导出错误:"+e);
}
}else{
logger.error("无数据可导");
throw new RuntimeException("无数据可导");
}
}