spring提供了Excel下载的封装类org.springframework.web.servlet.view.document.AbstractExcelView,在实现的时候,只需要实现写一个类继承AbstractExcelView,然后重写里面的
buildExcelDocument(Map<String, Object> model,HSSFWorkbook workbook, HttpServletRequest request,HttpServletResponse response){
}
方法。在方法中利用POI指定下载的Excel表格就可以了。
一,处理请求流程
前端页面发送请求–>后台controller–>controller获取要导入Excel的数据data,在最后返回的ModelAndView中带入继承了AbstractExcelView的类,其后spring会填充数据返回给前台下载。
二,大体实现
前台页面请求:
$.ajax({
type: "GET",
url: "history/toExcel",
data:{account: account, password: password, type: web_type_identifi},
dataType: "json",
success: function(data) {
if(data.status == "success") {
}
}
});
AbstractExcelView的实现类:
import org.springframework.web.servlet.view.document.AbstractExcelView;
public class ObjectExcelViewHistory extends AbstractExcelView{
//自己要实现的向Excel中写数据的样式
@Override
protected void buildExcelDocument(Map<String, Object> model,
HSSFWorkbook workbook, HttpServletRequest request,
HttpServletResponse response) throws Exception {
//利用POI实现向Excel写数据的逻辑
//workbook代表要实现的Excel对象
//model为从controller中获取到的数据
}
controller处理:
@Controller
@RequestMapping(value="history")
public class history() {
private Dao dao;
@RequestMapping(value="toExcel")
public ModelAndView historyToExcel() {
ModelAndView mv = new ModelAndView();
List<Map> dataMap = dao.findForList();
ObjectExcelViewHistory erv = new ObjectExcelViewHistory();//AbstractExcelView的实现类
mv = new ModelAndView(erv, dataMap);//将实现的AbstractExcelView和要导入Excel的数据放入ModelAndView的构造函数里,剩下的事就交个spring完成就好
return mv;
}
}
在实现以上三部分后,前台发送ajax后就会产生类似的如下效果:
关于POI的实现,请看:http://blog.csdn.net/TYOUKAI_/article/details/78735958