一、
模板excel
结果excel
二、
项目所需jar包
poi-3.11-20141221.jar
poi-examples-3.11-20141221.jar
poi-excelant-3.11-20141221.jar
poi-ooxml-3.11-20141221.jar
poi-ooxml-schemas-3.11-20141221.jar
poi-scratchpad-3.11-20141221.jar
xmlbeans-2.6.0.jar
curvesapi-1.04.jar
三、项目源代码
controller部分
/**导出到excel
* @param
* @throws Exception
*/
@RequestMapping(value="/excel")
public ModelAndView exportExcel() throws Exception{
logBefore(logger, Jurisdiction.getUsername()+"导出Excel到excel");
if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;}
ModelAndView mv;
//获取页面表单传递过来的参数
PageData pd = this.getPageData();
//dataMap作为model,存入数据
Map dataMap = new HashMap<>();
//存储模板Excel路径和生成Excel路径
List urls=new ArrayList<>();
//存储所有heads
List heads=new ArrayList<>();
//存储尾部的数值
List tails=new ArrayList<>();
//获取当前日期
Date date = new Date();
//模板Excel文件路径
//后缀为xls的文件路径
String demoUrl=ExcelController.class.getClassLoader().getResource("reportxls/ExportExcel.xls").getPath().replaceFirst("/","");
//按日期设定当前Excel表格的名字
String fileName = Tools.date2Str(date, "yyyyMMddHHmmss");
//生成Excel文件名称
// String excelUrl=fileName+".xlsx";
//后缀为xlsx文件的路径
String excelUrl=fileName+".xls";
//将路径添加到urls当中
urls.add(demoUrl);
urls.add(excelUrl);
//将urls路径存入到dataMap当中,作为model传入到视图中
dataMap.put("urls",urls);
//表格所需要的标题1
String head1="标题1";
//表格所需要的标题2
String head2="标题2";
//表格所需要的标题3
String head3="标题3";
//表格所需要的标题4
String head4="标题4";
//表格所需要的标题5
// String head5="标题5";
//存入这些标题
heads.add(head1);
heads.add(head2);
heads.add(head3);
heads.add(head4);
// heads.add(head5);
//表格所需要的尾部1
String tail1="尾部1";
//存入表格所需要的尾部
tails.add(tail1);
//表格所需要的尾部2
String tail2="尾部2";
//存入表格所需的尾部
tails.add(tail2);
//将tails存入到dataGrip中
dataMap.put("tails",tails);
//将标题存放到存入到dataGrip当中
dataMap.put("heads",heads);
//获取当前Excel表格所需要的内容
List varOList = excelService.listAll(pd);
dataMap.put("varOList",varOList);
//创建需要渲染的Excel表格视图
//进行文件后缀类型判断
if (demoUrl.endsWith(".xls")){
XlsExcelView erv=new XlsExcelView();
mv=new ModelAndView(erv,dataMap);
}else {
XlsxExcelView erv=new XlsxExcelView();
mv=new ModelAndView(erv,dataMap);
}
return mv;
}
视图部分
public class XlsExcelView extends AbstractXlsView {
@Override
protected void buildExcelDocument(Map map, Workbook workbook, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//获取当前的urls地址
List urls=(List)map.get("urls");
//表格所要存储的标题
List heads=(List)map.get("heads");
//表格所要存储的尾部
List tails=(List)map.get("tails");
//获取查询到的结果集
List varOList=(List)map.get("varOList");
//获取主表信息
PageData mainInfo=(PageData)map.get("mainInfo");
//创建Excel文件的输入流对象
FileInputStream fis=new FileInputStream(urls.get(0));
//根据模板创建Excel工作簿
workbook=new HSSFWorkbook(fis);
//创建Excel文件输出流对象
OutputStream out=httpServletResponse.getOutputStream();
httpServletResponse.setContentType("application/octet-stream");
httpServletResponse.setHeader("Content-Disposition","attachment;filename="+urls.get(1));
//将workboo强转成需要的HSSFBook
HSSFWorkbook HSSFWorkbook=(HSSFWorkbook)workbook;
//获取创建工作簿的第一页
HSSFSheet sheet=HSSFWorkbook.getSheetAt(0);
//给指定的sheet命名
HSSFWorkbook.setSheetName(0,"dataSheet");
//初始化当前的索引,设为当前sheet的最后一行行数
int currentLastRowIndex=sheet.getLastRowNum();
//存储当前表格的样式
HSSFCellStyle cellStyle=HSSFWorkbook.createCellStyle();
//获取当前工作簿的行数
int totalRows=sheet.getPhysicalNumberOfRows();
/***********************遍历模板sheet,根据当中的设定进行赋值*******************************************************************/
for (int i=0;i
附注:对于.xlsx文件修改一下引用类名即可