java语言将数据导出成excel代码

1.需要引入的maven依赖
		<dependency>
		    <groupId>org.apache.poi</groupId>
		    <artifactId>poi-ooxml</artifactId>
		    <version>3.9</version>
		    </dependency>
		<dependency>
		  <groupId>org.apache.poi</groupId>
		  <artifactId>com.springsource.org.apache.poi</artifactId>
		  <version>3.9.0.FINAL</version>
		</dependency>
2.具体的代码如下
package com.bj58.jxedt.app.util;

import java.io.File;
import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;

/**
 * 该类为数据导出成excel工具类
 * @version 2017/08/23
 * @author gongxiaohai
 *
 */
public class ExportExcelUtil {

	/**
	 * 创建一个excel文件
	 */
	private HSSFWorkbook wb = null;
	
	/**
	 * 创建一个excel工作表
	 */
	private HSSFSheet sheet = null;
	
	/**
	 * 无参构造函数
	 */
	public ExportExcelUtil() {
		this(new HSSFWorkbook());
	}
	
	/**
	 * 一个参数的构造函数(ps:不存在只有sheet的构造函数,因为sheet是从wb中创建而来的)
	 * @param wb
	 */
	public ExportExcelUtil(HSSFWorkbook wb){
		this(wb,wb.createSheet());
	}
	
	/**
	 * 双参构造函数
	 * @param wb		excel文件
	 * @param sheet		工作表
	 */
	public ExportExcelUtil(HSSFWorkbook wb,HSSFSheet sheet){
		this.wb = wb;
		this.sheet = sheet;
	}
	
	/**
	 * @return 		wb
	 */
	public HSSFWorkbook getWb() {
		return wb;
	}

	/**
	 * @param wb	set wb to this.wb
	 */
	public void setWb(HSSFWorkbook wb) {
		this.wb = wb;
	}

	/**
	 * @return		sheet
	 */
	public HSSFSheet getSheet() {
		return sheet;
	}

	/**
	 * @param sheet		set sheet to this.sheet
	 */
	public void setSheet(HSSFSheet sheet) {
		this.sheet = sheet;
	}
	
	/**
	 * 创建通用excel头部
	 * @param headString	头部显示的字符串
	 * @param colSum		该报表列数
	 */
	public void createNormalHead(String headString,int colSum){
		HSSFRow row = sheet.createRow(0);
		//设置第一行
		HSSFCell cell = row.createCell(0);
		
		//合并第一行前colSum列
		sheet.addMergedRegion(new CellRangeAddress(0,0,0,colSum - 1));
		//CellRangeAddress类用来替代org.apache.poi.hssf.util.Region,sheet中使用Region的一系列方法都已过期。
		//CellRangeAddress中四个参数的意思为,以参数为1,2,3,4为例:将从第0行到第1行,从第2列到第3列的单元格合并。
		
		//定义单元格为字符串类型
		cell.setCellType(HSSFCell.ENCODING_UTF_16);//中文处理
		cell.setCellValue(new HSSFRichTextString(headString));//设置单元格的值
		
		//定义单元格格式,添加单元格表样式,并添加到工作簿
		HSSFCellStyle cellStyle = wb.createCellStyle();
		//设置单元格对齐类型
		cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//指定单元格水平居中对齐
		cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//指定单元格垂直居中对齐
		cellStyle.setWrapText(true);//指定单元格自动换行
		cellStyle.setLeftBorderColor(HSSFColor.BLACK.index);//设置左边框颜色
		cellStyle.setBorderLeft((short)1);//设置左边框大小
		cellStyle.setRightBorderColor(HSSFColor.BLACK.index);//设置右边框颜色
		cellStyle.setBorderRight((short)1);//设置右边框大小
		
		//设置单元格字体
		HSSFFont font = wb.createFont();
		
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//设置内容加粗
		font.setFontName("宋体");//设置字体
		font.setFontHeight((short)600);//设置字体高度
		//font.setFontHeightInPoints((short)10);//设置字体大小
		
		cellStyle.setFont(font);
		cell.setCellStyle(cellStyle);
		
	}
	
	/**
	 * 创建通用excel第二行
	 * @param params	用来表示第二行中小标题内容的数组
	 */
	public void createNormalTwoRow(String[] params){
		//创建第二行
		HSSFRow row = sheet.createRow(1);
		row.setHeight((short)400);
		
		HSSFCell cell = row.createCell(0);
		
		cell.setCellType(HSSFCell.ENCODING_UTF_16);
		cell.setCellValue(new HSSFRichTextString("" + ""));
		
		
		//定义单元格格式,添加单元格样式表,并添加到工作簿
		HSSFCellStyle cellStyle = wb.createCellStyle();
		cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置单元格水平居中
		cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//设置单元格垂直居中
		cellStyle.setWrapText(true);//设置单元格自动换行
		
		//设置单元格字体
		HSSFFont font = wb.createFont();
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		font.setFontName("宋体");
		font.setFontHeight((short)250);
		
		cell.setCellStyle(cellStyle);
		
		for(int i = 0 ; i < params.length ; i ++){
			cell = row.createCell(i);
			
			cell.setCellValue(params[i]);
		}
	}
	
	/**
	 * 设置工作表列宽
	 * @param arg	每列宽度
	 */
	public void setSheetColumnWidth(int arg[]) throws Exception{
		for(int i = 0 ;i < arg.length; i ++ ){
			//设置工作表列宽
			sheet.setColumnWidth(i, arg[i]);
		}
	}
	/**
	 * 设置excel标题
	 * @param columHeader	标题字符串数组
	 */
	public void createColumHeader(String[] columHeader){
		
		//设置列头,在第三行
		HSSFRow row = sheet.createRow(2);
		
		//指定行高
		row.setHeight((short)600);
		
		//设置单元格格式,添加单元格样式,并添加到工作簿
		HSSFCellStyle cellStyle = wb.createCellStyle();
		cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置单元格水平居中
		cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//设置单元格垂直居中
		cellStyle.setWrapText(true);//设置单元格自动换行
		
		//单元格字体
		HSSFFont font = wb.createFont();
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//设置字体加粗
		font.setFontName("宋体");//设置字体格式
		font.setFontHeight((short)250);
		cellStyle.setFont(font);
		
		//设置单元格背景色
		cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);
		cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
		
		HSSFCell cell = null;
		
		//从第二行开头开始创建单元格,并给每一个单元格赋值
		for(int item = 0 ; item < columHeader.length; item ++){
			cell = row.createCell(item);
			cell.setCellType(HSSFCell.ENCODING_UTF_16);
			cell.setCellStyle(cellStyle);
			cell.setCellValue(new HSSFRichTextString(columHeader[item]));
		}
	}
	
	/**
	 * 创建内容单元格
	 * @param wb		HSSFWorkbook
	 * @param row		HSSFRow
	 * @param col		short型的列索引
	 * @param align		对齐方式
	 * @param val		列值
	 */
	public void createCell(HSSFWorkbook wb,HSSFRow row,int col,short align,String val){
		//根据该行的第几列创建单元格
		HSSFCell cell = row.createCell(col);
		//设置单元格格式
		cell.setCellType(HSSFCell.ENCODING_UTF_16);
		cell.setCellValue(new HSSFRichTextString(val));//设置单元格值
		
		//设置单元格样式,添加样式到工作簿
		HSSFCellStyle cellStyle = wb.createCellStyle();
		cellStyle.setAlignment(align);//设置单元格对齐
		cell.setCellStyle(cellStyle);
	}
	
	/**
	 * 创建合计行
	 * @param colSum		需要合并到的列索引
	 * @param cellValue		列值
	 */
	public void createLastSumRow(int colSum,String[] cellValue){
		
		HSSFCellStyle cellStyle = wb.createCellStyle();
		cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置单元格水平居中
		cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//设置单元格垂直居中
		cellStyle.setWrapText(true);//设置单元格自动换行
		
		//单元格字体
		HSSFFont font = wb.createFont();
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		font.setFontName("宋体");
		font.setFontHeight((short)250);
		cellStyle.setFont(font);
		
		//获取工作表最后一行
		HSSFRow lastRow = sheet.createRow((short)(sheet.getLastRowNum() + 1));
		HSSFCell sumCell = lastRow.createCell(0);
		
		sumCell.setCellValue("合计");//设置单元格内容
		sumCell.setCellStyle(cellStyle);
		
		//合并  最后一行的第零列 至 最后一行的第一列
		sheet.addMergedRegion(new CellRangeAddress(sheet.getLastRowNum(),sheet.getLastRowNum() - 1
				,sheet.getLastRowNum(),colSum));
		
		for(int item = 2 ; item < (cellValue.length + 2) ; item++){
			//定义最后一行的第三列
			sumCell = lastRow.createCell(item);
			sumCell.setCellStyle(cellStyle);
			
			//定义数组,从0开始
			sumCell.setCellValue(new HSSFRichTextString(cellValue[item - 2]));
		}
	}
	
	/**
	 * 将数据输入到excel文件
	 * @param fileName		文件名
	 */
	public void outputExcel(String fileName){
		//定义文件输出流
		FileOutputStream fos = null;
		try{
			fos = new FileOutputStream(new File(fileName));
			wb.write(fos);//将数据写入文件中
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			//防止资源的浪费,保证了即使出错也会回收资源
			try{
				fos.close();
			}catch(Exception e2){
				e2.printStackTrace();
			}
		}
	}
	
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章