poi 导出通用方法,适用于只有一级标题的

创建通用的导出方法(代码里的注释很全了)
效果如下(黑色涂抹的很丑,不要介意)
在这里插入图片描述

/**
	     * 导出Excel
	     * @param sheetName sheet名称
	     * @param title0 标题(大标题)
	     * @param wb HSSFWorkbook对象
	     * @param title1 标题(一级标题)
	     *  @param title2 标题(二级标题)(没用,没写这个功能)
	     *  @param content  要导入的数据
	     * @return
	     */

		public HSSFWorkbook  export(String sheetName,String []title1,String[][] content, HSSFWorkbook wb,String title0,String []titile2) {
	        // 创建一个HSSFWorkbook,对应一个Excel文件
			if(wb==null){
				wb = new HSSFWorkbook();
			}
			//创建一个SHEET
			HSSFSheet sheet = wb.createSheet();
			wb.setSheetName(0, title0);
			//创建单元格对象
			HSSFCell cell0 = null;
			HSSFCell cell1 = null;
			HSSFCell cell2 = null;
			HSSFCell cell3 = null;
			//创建大标题
			HSSFRow row0 = sheet.createRow(0);
			//创建大标题单元格的格式
			HSSFCellStyle style0 = wb.createCellStyle();
			 HSSFFont font0 = wb.createFont();  //设置标题的字体
			 font0.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  // 设置粗体
			 font0.setFontHeightInPoints((short) 15);// 设置字体大小 
			 style0.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 水平居中  
			 style0.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中  
			 style0.setFont(font0);
			 //要先设值,在设值样式,如果先设了样式再设值,样式会丢失,具体原因未知
			 style0.setBorderTop(HSSFCellStyle.BORDER_THIN);
			 style0.setBorderRight(HSSFCellStyle.BORDER_THIN);
			 style0.setBorderBottom(HSSFCellStyle.BORDER_THIN);
			 style0.setBorderLeft(HSSFCellStyle.BORDER_THIN);
			 cell0 = row0.createCell(0);
			 cell0.setCellValue(title0);
			 cell0.setCellStyle(style0);	
			 //大标题合并单元格
			 int a = title1.length;
			 CellRangeAddress cra0=new CellRangeAddress(0,0, 0,  a-1);
			 sheet.addMergedRegion(cra0);  
			//创建一级标题
			HSSFRow row1 = sheet.createRow(1);
			//创建一级标题的格式
			HSSFCellStyle style1 = wb.createCellStyle();
			style1.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 水平居中 
			style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中 
			style1.setBorderTop(HSSFCellStyle.BORDER_THIN);
			style1.setBorderRight(HSSFCellStyle.BORDER_THIN);
			style1.setBorderBottom(HSSFCellStyle.BORDER_THIN);
			style1.setBorderLeft(HSSFCellStyle.BORDER_THIN);
			//设值前景色(cell其实是使用前景来填充的)这里用的是白色
			style1.setFillForegroundColor(HSSFColor.WHITE.index); 
			/* 	setFillPattern是设置单元格填充样式,SOLID_FOREGROUND纯色
				使用前景颜色填充,接着设置前景颜色(setFillForegroundColor)就
				可以给单元格着色了。*/
			style1.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
			//首先创建一级标题的单元格并赋值标题
			for(int i=0;i<a;i++){
				cell1 = row1.createCell(i);
				sheet.setColumnWidth(i, 18*256);
			}
				for(int i =0;i<a;i++){
					cell1=row1.getCell(i);
					cell1.setCellValue(title1[i]);
					cell1.setCellStyle(style1);
			}
			//赋值
			for(int i=0;i<content.length;i++){
				HSSFRow row = sheet.createRow(i + 2);
				for(int j=0;j<content[i].length;j++){
	                //将内容按顺序赋给对应的列对象
					HSSFCell cellNo =row.createCell(0);	//第一列是NO.用来计数
					cellNo.setCellStyle(style1);
					cellNo.setCellValue(i+1);
					HSSFCell createCell = row.createCell(j+1);
					createCell.setCellStyle(style1);
					createCell.setCellValue(content[i][j]);
	            	
	            }
		}	
			return wb;
		}

响应

 /**
	     * 响应
	     * @param response
	     * @param fileName
	     */
		private void setResponseHeader(HttpServletResponse response,
				String fileName) {
			// TODO Auto-generated method stub
			try {
	            try {
	                fileName = new String(fileName.getBytes(),"ISO8859-1");
	            } catch (UnsupportedEncodingException e) {
	                // TODO Auto-generated catch block
	                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();
	        }
			
		}

具体的例子

  /**
	     * 导出exportLongParts
	     * @return
	     */
	    @RequestMapping(value = "/exportLongParts")
	    @ResponseBody
	    public void exportLongParts(HttpServletRequest request,HttpServletResponse response) throws Exception {
	    //获取查询参数
	    	   String suppid = request.getParameter("suppid");
			   String suppname = request.getParameter("suppname");
			   String arrid = request.getParameter("arrid");
			   String arrname = request.getParameter("arrname");
			   String cartypename = request.getParameter("cartypename");
			   String power = request.getParameter("power");
			   String office = request.getParameter("office");
			   String startTime = request.getParameter("startTime");
			   String endTime = request.getParameter("endTime");
			   Map<String,String> newMap = new HashMap<String,String>();
			   newMap.put("suppid", suppid);
			   newMap.put("suppname", suppname);
			   newMap.put("arrid", arrid);
			   newMap.put("arrname", arrname);
			   newMap.put("cartypename", cartypename);
			   newMap.put("power", power);
			   newMap.put("office", office);
			   newMap.put("startTime", startTime);
			   newMap.put("endTime", endTime);
			   //设值一级标题
			   String[] title1={"NO.","零件号","零件名称","车型","配置","原材料(包含子零件名称)","订购周期(天)","原材料(包含子零件)供应商","国家",};
			   //设值导出的EXCEL的大标题
			   String title0="长周期订购表";
			   //设值导出EXCEL的文件名称
		    	String fileName = "长周期订购表.xls";
		    	List<newFactoryVO> list = icn.getNewFactory(newMap);
		    	List<String> listall = new ArrayList<String>();
		    	String content [][] = new String[list.size()][title1.length-1];
		    	String title2[]={""};//二级标题(没用)
		    	newFactoryVO  vo= null;
		    	//设值日期格式
		    	SimpleDateFormat time = new SimpleDateFormat("yyyy-mm-HH");
		    	//循环取值赋值给conten,conten传到导出EXCEL的方法中
		     	for (int i = 0; i < list.size(); i++) { 	           
		    		 vo= list.get(i);
		    		content[i][0] = String.valueOf(vo.getPartscode());
		    		content[i][1] = String.valueOf(vo.getPartsname());
		    		content[i][2] =String.valueOf(vo.getCartypename());
		    		content[i][3] =String.valueOf(vo.getPower());
		    		content[i][4] =String.valueOf(vo.getMaterialname());
		    		content[i][5] = String.valueOf(vo.getOrdercycle());
		    		content[i][6] =String.valueOf(vo.getSuppliername());
		    		content[i][7] =String.valueOf(vo.getSuppliercountry());
		    	};
		    	//调用导出方法
		    	HSSFWorkbook wb = export(title0, title1, content, null, title0, null); 
		    	
		    	OutputStream os = response.getOutputStream();		    	
		 
		    	try {
		    	
		    			this.setResponseHeader(response, fileName);   		
		    			wb.write(os);   			
		    	} catch (Exception e) {
		    		throw e;
		    	}finally{
		    		os.flush();
	    			os.close();
		    	}

	    }

最终效果如下图 上面是大标题,太长 没截
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42311703/article/details/83212971