Java用POI实现根据Excel表格模板生成新的Excel并实现数据输出

一、

模板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文件修改一下引用类名即可

你可能感兴趣的:(Java用POI实现根据Excel表格模板生成新的Excel并实现数据输出)