POI复杂EXCEL导出

对于excel导出一直懵懵懂懂,今日招投标部门提出了一个复杂的excel导出格式,就学习了一下,记录一下成果,
excel导出的表头是动态的,合并单元格也是动态不固定的

public static HSSFWorkbook exportProjFix(Map> titleList,JSONArray itemData,
			JSONArray footerData,ProjFixEntity query) throws Exception {
		
		// 声明一个工作簿
		HSSFWorkbook wb = new HSSFWorkbook();
		// 生成一个表格
		HSSFSheet sheet = wb.createSheet("定标审批信息");

		// 生成一种样式:标题样式
		HSSFCellStyle style = wb.createCellStyle();
		// 设置样式
		style.setFillForegroundColor(HSSFColor.WHITE.index);
		style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
		style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
		style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
		style.setBorderRight(HSSFCellStyle.BORDER_THIN);
		style.setBorderTop(HSSFCellStyle.BORDER_THIN);
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

		// 生成一种字体
		HSSFFont font = wb.createFont();
		// 设置字体
		font.setFontName("微软雅黑");
		// 设置字体大小
		font.setFontHeightInPoints((short) 10);
		// 字体加粗
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		// 在样式中引用这种字体
		style.setFont(font);

		// 生成并设置另一个样式:文本样式
		HSSFCellStyle style1 = wb.createCellStyle();
		style1.setFillForegroundColor(HSSFColor.WHITE.index);
		style1.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
		style1.setBorderBottom(HSSFCellStyle.BORDER_THIN);
		style1.setBorderLeft(HSSFCellStyle.BORDER_THIN);
		style1.setBorderRight(HSSFCellStyle.BORDER_THIN);
		style1.setBorderTop(HSSFCellStyle.BORDER_THIN);
		style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		style1.setWrapText(true);
		// 生成另一种字体2
		HSSFFont font1 = wb.createFont();
		// 设置字体
		font1.setFontName("微软雅黑");
		// 设置字体大小
		font1.setFontHeightInPoints((short) 10);
		// 字体加粗
		// font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		// 在样式2中引用这种字体
		style1.setFont(font1);
		
		// 生成并设置另一个样式:文本样式
		HSSFCellStyle style2 = wb.createCellStyle();
		style2.setFillForegroundColor(HSSFColor.WHITE.index);
		style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
		style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
		style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
		style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
		style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
		style2.setAlignment(HSSFCellStyle.ALIGN_LEFT);
		style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		style2.setWrapText(true);
		// 生成另一种字体2
		HSSFFont font2 = wb.createFont();
		// 设置字体
		font2.setFontName("微软雅黑");
		// 设置字体大小
		font2.setFontHeightInPoints((short) 10);
		// 字体加粗
		// font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		// 在样式2中引用这种字体
		style2.setFont(font2);
		
		
		//列表内容
		/**
		 * 第九行 数据表格标题
		 */
		//数据表格合并单元格
		List headnum0 = new ArrayList();//合并单元格
		int widh = 0;//第二个单元格宽度
		int allSize = 0;//数据列数
		int[] widthArr = null;
		int length1 = 0;
		/**=========邀请招标流程============**/
		if(!query.getProcess().equals("inquiry")){
			JSONArray list = (JSONArray) titleList.get("1");
			Map titleHeader = new HashMap();//报价格式动态表头
			Map titlefield = new HashMap();//数据行总排序号
			Map titleDataFormat = new HashMap();
			int j=0;
			for(int i=0,arrSize = list.size();i list1 = titleList.get("1");
			List list2 = titleList.get("2");
			List list3 = titleList.get("3");
			Map titleHeader1 = new HashMap();//报价格式动态表头
			Map titleHeader2 = new HashMap();//供应商报价和总价 动态表头
			Map titleHeader3 = new HashMap();//供应商名称 动态表头
			Map titlefield = new HashMap();//数据行总排序号
			Map titlefield1 = new HashMap();//标题行第一行序号
			Map titlefield2 = new HashMap();//标题行第二行排序号
			Map titleDataFormat = new HashMap();
			for(JSONArray arr1:list1){
				for(int i=0,arrSize = arr1.size();i “起始行,截止行,起始列,截止列” 动态表头合并单元格
			for(int i=0;i

你可能感兴趣的:(java,poi)