使用 POI导出到Excel

private String productEcel(List<BiUserAction> list) throws Exception {
		
		// 创建工作表和标题
		HSSFWorkbook workbook = null;
		try {
			workbook = new HSSFWorkbook();
		} catch (Exception e) {
			e.printStackTrace();
		}
		int rowIndex=0;
		HSSFSheet sheet = workbook.createSheet("贝壳奖励统计"); // 创建工作区
		/*
		HSSFRow row_title = sheet.createRow(0); // 创建一行引用对象
		HSSFFont title_font = workbook.createFont(); // 创建标题的字体

		title_font.setFontHeightInPoints((short) 8);
		title_font.setFontHeight((short) HSSFFont.BOLDWEIGHT_NORMAL);
		title_font.setColor((short) (HSSFFont.COLOR_NORMAL));

		HSSFCellStyle title_style = workbook.createCellStyle();// 创建样式
		title_style.setFont(title_font);
		title_style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		
		//合并 第一个的  0 到 3  的单元格
		Region region=new Region(0,(short)0,0,(short)3);
		sheet.addMergedRegion(region);
		
		HSSFCell cell_title = row_title.createCell((short) 0);// 创建单元格引用对象
		cell_title.setCellStyle(title_style);
		cell_title.setCellValue("贝壳奖励统计");*/
		
		// 创建数据表头
		String titles[] = { "序号", "奖励项目", "贝壳总数", "经验总数"};


		//定义字体
		HSSFFont celltbnamefont = workbook.createFont();
		celltbnamefont.setFontHeightInPoints((short) 12);  //字体大小
		celltbnamefont.setColor((short) (HSSFFont.COLOR_NORMAL));  //颜色
		celltbnamefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //粗体
		
		//定义列的样式 
		HSSFCellStyle items_style = workbook.createCellStyle();
		items_style.setAlignment((short) HSSFCellStyle.ALIGN_CENTER); //设置对其方式
		items_style.setFont(celltbnamefont);
		items_style.setWrapText(true); //设置自动换行
		
		HSSFRow row = sheet.createRow((short) rowIndex);

		//加入 标题
		for (int i = 0; i < titles.length; i++) {
			HSSFCell cell = row.createCell(i,Cell.CELL_TYPE_STRING); //设置 列类型
			if (i == 1 || i == 3 || i == 2 || i == 5) {
				sheet.setColumnWidth(i, 5335);
			}else{
				//sheet.setColumnWidth((short) i, (short) 3335);
				sheet.setColumnWidth(i, 3335);
			}
			cell.setCellValue(titles[i]);
			cell.setCellStyle(items_style);
		}

		//定义 date 的数据样式
		HSSFCellStyle datestyle = workbook.createCellStyle();
		HSSFDataFormat df = workbook.createDataFormat();
		datestyle.setAlignment((short) HSSFCellStyle.ALIGN_LEFT);
		datestyle.setDataFormat(df.getFormat("yyyy-mm-dd hh:mm:ss"));

		//定义 int 的数据样式
		HSSFCellStyle intdatestyle = workbook.createCellStyle();
		intdatestyle.setAlignment((short) HSSFCellStyle.ALIGN_LEFT);

		//定义 float 的数据样式
		HSSFCellStyle floatdatestyle = workbook.createCellStyle();
		floatdatestyle.setAlignment((short) HSSFCellStyle.ALIGN_LEFT);
		df = workbook.createDataFormat();
		floatdatestyle.setDataFormat(df.getFormat("#.##"));

		//定义 long 的数据样式
		HSSFCellStyle longdatestyle = workbook.createCellStyle();
		longdatestyle.setAlignment((short) HSSFCellStyle.ALIGN_LEFT);

		
		HSSFCell cell;
		Iterator<BiUserAction> it =list.iterator();
		while (it.hasNext()) {
			HSSFRow dataRow = sheet.createRow((short) (++rowIndex));
			BiUserAction userAction = it.next();

			cell = dataRow.createCell(0,Cell.CELL_TYPE_NUMERIC);
			cell.setCellStyle(intdatestyle);
			cell.setCellValue(rowIndex);

			cell = dataRow.createCell(1,Cell.CELL_TYPE_STRING);
			String ruleName = userAction.getRuleName();
			cell.setCellValue(ruleName);

			cell = dataRow.createCell(2,Cell.CELL_TYPE_NUMERIC);
			cell.setCellStyle(longdatestyle);
			cell.setCellValue(userAction.getCredits());

			cell = dataRow.createCell(3,Cell.CELL_TYPE_NUMERIC);
			cell.setCellStyle(longdatestyle);
			cell.setCellValue(userAction.getExperience());
		}
		HSSFRow dataRow = sheet.createRow((short) (++rowIndex));
		cell = dataRow.createCell(0,Cell.CELL_TYPE_STRING);
		cell.setCellStyle(intdatestyle);
		cell.setCellValue("合计:");

		cell = dataRow.createCell(1,Cell.CELL_TYPE_STRING);
		cell.setCellValue("");

		//添加 公式
		cell = dataRow.createCell(2,Cell.CELL_TYPE_NUMERIC);
		cell.setCellStyle(longdatestyle);
		cell.setCellFormula("SUM(" + getColLetter(2) + sheet.getRow(2).getCell(2).getRowIndex() + ":" + getColLetter(2) +sheet.getRow(sheet.getLastRowNum()).getCell(2).getRowIndex() + ")");
		//添加 公式
		cell = dataRow.createCell(3,Cell.CELL_TYPE_NUMERIC);
		cell.setCellStyle(longdatestyle);
		cell.setCellFormula("SUM(" + getColLetter(3) + sheet.getRow(2).getCell(3).getRowIndex() + ":" + getColLetter(3) +sheet.getRow(sheet.getLastRowNum()).getCell(3).getRowIndex() + ")");
		
		
		String workDir = this.getServlet().getServletContext().getRealPath("/");

		String workddd = workDir.replaceAll("\\\\", "/");

		Calendar calendar = Calendar.getInstance();
		String month = calendar.get(Calendar.YEAR) + "/"+ (calendar.get(Calendar.MONTH) + 1);
		String filePath = "newsxls/adxls/" + month + "/";
		File f = new File(workDir + filePath);
		if (!f.isDirectory()) {
			f.mkdirs();
		}

		String fileNameCode = java.util.UUID.randomUUID().toString();
		String completeFilePath = workddd + filePath + fileNameCode + ".xls";
		FileOutputStream fileOut = new FileOutputStream(completeFilePath);
		this.getRequest().getSession(true).setAttribute("completeFilePath",
				completeFilePath);

		workbook.write(fileOut);
		fileOut.flush();
		fileOut.close();
		return completeFilePath;
	}
	
	 /**
	  * 将列的索引换算成ABCD字母,这个方法要在插入公式时用到。
	  * @param colIndex 列索引。
	  * @return ABCD字母。
	  */
	 private String getColLetter(int colIndex)
	 {
	  String ch = "";
	     if (colIndex  < 26)
	         ch = "" + (char)((colIndex) + 65);
	     else
	        ch = "" + (char)((colIndex) / 26 + 65 - 1) + (char)((colIndex) % 26 + 65);
	     return ch;
	 }

你可能感兴趣的:(Excel,hssf,HSSFWorkbook,CellFormula)