您的位置:首页 > 编程语言 > Java开发

SpringMVC+POI 实现Excel按模板方式简单导出功能

2015-11-25 11:23 841 查看
上节《SpringMvc+POI 处理Excel的导入操作》简单介绍Excel文件导入功能,本节写一个简单的Excel文件导出功能。

Excel文件导出时采用模板的方式导出,该方法只需要简单的几步即可完成。首先读取Excel模板文件,将数据写到的模板文件中,最终另存为新的Excel文件。这样既不破坏模板文件,同时对于多行表头的excel处理更加方便。

 

环境
JDK7+ Tomcat7.x+ Spring4.1.8

说明

ExportExcelControl.java :Excel文件导出Control类

ExportExcelUtil.java :Excel文件导出方法

Main.jsp : view请求页

模板文件:存放在WEB-INF/ExcelDemoFile/测试模板.xlsx

 

ExportExcelControl.java

package com.poiexcel.control;

import java.io.File;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.poiexcel.util.ExportExcelUtil;
import com.poiexcel.vo.InfoVo;

@Controller
@RequestMapping("/ExportExcel/*")
public class ExportExcelControl {

/**
* 描述:通过 jquery.form.js 插件提供的ajax方式导出Excel
* @param request
* @param response
* @throws Exception
*/
@RequestMapping(value="ajaxExport.do",method={RequestMethod.GET,RequestMethod.POST})
public  String  ajaxUploadExcel(HttpServletRequest request,HttpServletResponse response) throws Exception {
System.out.println("通过 jquery.form.js 提供的ajax方式导出文件!");
OutputStream os = null;
Workbook wb = null;    //工作薄

try {
//模拟数据库取值
List<InfoVo> lo = new ArrayList<InfoVo>();
for (int i = 0; i < 8; i++) {
InfoVo vo = new InfoVo();
vo.setCode("110"+i);
vo.setDate("2015-11-0"+i);
vo.setMoney("1000"+i+".00");
vo.setName("北京中支0"+i);
lo.add(vo);
}

//导出Excel文件数据
ExportExcelUtil util = new ExportExcelUtil();
File file =util.getExcelDemoFile("/ExcelDemoFile/测试模板.xlsx");
String sheetName="sheet1";
wb = util.writeNewExcel(file, sheetName,lo);

String fileName="机构码.xlsx";
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename="+ URLEncoder.encode(fileName, "utf-8"));
os = response.getOutputStream();
wb.write(os);
} catch (Exception e) {
e.printStackTrace();
}
finally{
os.flush();
os.close();
wb.close();
}
return null;
}

}


ExportExcelUtil.java

package com.poiexcel.util;

import java.io.File;
import java.io.FileInputStream;
import java.util.List;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

import com.poiexcel.vo.InfoVo;

public class ExportExcelUtil {

/**
* 描述:根据文件路径获取项目中的文件
* @param fileDir 文件路径
* @return
* @throws Exception
*/
public  File getExcelDemoFile(String fileDir) throws Exception{
String classDir = null;
String fileBaseDir = null;
File file = null;
classDir = Thread.currentThread().getContextClassLoader().getResource("/").getPath();
fileBaseDir = classDir.substring(0, classDir.lastIndexOf("classes"));

file = new File(fileBaseDir+fileDir);
if(!file.exists()){
throw new Exception("模板文件不存在!");
}
return file;
}

public  Workbook writeNewExcel(File file,String sheetName,List<InfoVo> lis) throws Exception{
Workbook wb = null;
Row row = null;
Cell cell = null;

FileInputStream fis = new FileInputStream(file);
wb = new ImportExcelUtil().getWorkbook(fis, file.getName());	//获取工作薄
Sheet sheet = wb.getSheet(sheetName);

//循环插入数据
int lastRow = sheet.getLastRowNum()+1;    //插入数据的数据ROW
CellStyle cs = setSimpleCellStyle(wb);    //Excel单元格样式
for (int i = 0; i < lis.size(); i++) {
row = sheet.createRow(lastRow+i); //创建新的ROW,用于数据插入

//按项目实际需求,在该处将对象数据插入到Excel中
InfoVo vo  = lis.get(i);
if(null==vo){
break;
}
//Cell赋值开始
cell = row.createCell(0);
cell.setCellValue(vo.getCode());
cell.setCellStyle(cs);

cell = row.createCell(1);
cell.setCellValue(vo.getName());
cell.setCellStyle(cs);

cell = row.createCell(2);
cell.setCellValue(vo.getDate());
cell.setCellStyle(cs);

cell = row.createCell(3);
cell.setCellValue(vo.getMoney());
cell.setCellStyle(cs);
}
return wb;
}

/**
* 描述:设置简单的Cell样式
* @return
*/
public  CellStyle setSimpleCellStyle(Workbook wb){
CellStyle cs = wb.createCellStyle();

cs.setBorderBottom(CellStyle.BORDER_THIN); //下边框
cs.setBorderLeft(CellStyle.BORDER_THIN);//左边框
cs.setBorderTop(CellStyle.BORDER_THIN);//上边框
cs.setBorderRight(CellStyle.BORDER_THIN);//右边框

cs.setAlignment(CellStyle.ALIGN_CENTER); // 居中

return cs;
}

}


 

Main.jsp

<div>
文件以模板的方式导出,模板存放在项目中(WEB-INF/ExcelDemoFile/)
</div>
</br>
<form action="ExportExcel/ajaxExport.do" method="post" id="form2">
<input type="submit" id="exportExcel" name="exportExcel" value="Excel导出"/>
</form>


代码下载:http://download.csdn.net/download/onepersontz/9298819

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  excel poi SpringMvc