poi导出execl

来源:互联网 发布:水晶机巧矩阵黄晶 编辑:程序博客网 时间:2024/05/19 16:49
 package com.project.framework.bean;

/**
 * 系统数据导出Excel 生成器
 * @version 1.0
 */


import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Map;
import java.util.Set;

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.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.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.CellRangeAddress;

public class ExcelFileGenerator {

private final int SPLIT_COUNT = 15; //Excel每个工作簿的行数

private ArrayList<String> fieldName = null; //excel标题数据集

private ArrayList<ArrayList<String>> fieldData = null; //excel数据内容
    
private String name=null;//excel中间的大标题
private Map<Integer, Integer> map=null;
private HSSFWorkbook workBook = null;

/**
* 构造器
* @param name 
* @param fieldName 结果集的字段名
* @param data
*/
public ExcelFileGenerator(Map<Integer, Integer> map,String name, ArrayList<String> fieldName, ArrayList<ArrayList<String>> fieldData) {
this.map=map;
        this.name=name;
this.fieldName = fieldName;
this.fieldData = fieldData;
}

/**
* 创建HSSFWorkbook对象
* @return HSSFWorkbook
*/
public HSSFWorkbook createWorkbook() {

workBook = new HSSFWorkbook();//创建一个工作薄对象
int rows = fieldData.size();//总的记录数
int sheetNum = 0;           //指定sheet的页数

if (rows % SPLIT_COUNT == 0) {
sheetNum = rows / SPLIT_COUNT;
} else {
sheetNum = rows / SPLIT_COUNT + 1;
}

for (int i = 1; i <= sheetNum; i++) {//循环2个sheet的值
HSSFSheet sheet = workBook.createSheet("Page " + i);//使用workbook对象创建sheet对象
if(map.size()>0){
Set<Integer> set = map.keySet();
for(Integer key:set){
 sheet.setColumnWidth(key, map.get(key)* 256);
}
}
 Row row0 = sheet.createRow(0);//创建行
 row0.setHeightInPoints(30);
 //合并第一行 并居中显示
 Cell cell0=row0.createCell(0);
 cell0.setCellValue(name);
 sheet.addMergedRegion(new CellRangeAddress(0, 0,0,fieldName.size()-1));//起始行//结束行//起始列//结束列
 HSSFFont font = workBook.createFont();
 font.setFontName("宋体");
              font.setFontHeightInPoints((short) 20);// 设置字体大小
 CellStyle style=workBook.createCellStyle();//创建单元格样式
 style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
 style.setFont(font);
 cell0.setCellStyle(style);
   CellStyle style1=workBook.createCellStyle();
    style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style1.setBorderBottom(CellStyle.BORDER_THIN);
style1.setBorderLeft(CellStyle.BORDER_THIN);
style1.setBorderRight(CellStyle.BORDER_THIN);
style1.setBorderTop(CellStyle.BORDER_THIN);
 HSSFRow headRow = sheet.createRow((short) 1); //创建行,0表示第一行(本例是excel的标题)
for (int j = 0; j < fieldName.size(); j++) {//循环excel的标题
HSSFCell cell = headRow.createCell( j);//使用行对象创建列对象,0表示第1列
/**************对标题添加样式begin********************/
/**
//设置列的宽度/
sheet.setColumnWidth(j, 6000);
HSSFCellStyle cellStyle = workBook.createCellStyle();//创建列的样式对象
HSSFFont font = workBook.createFont();//创建字体对象
//字体加粗
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
//字体颜色变红
font.setColor(HSSFColor.RED.index);
//如果font中存在设置后的字体,并放置到cellStyle对象中,此时该单元格中就具有了样式字体
cellStyle.setFont(font);
*/
/**************对标题添加样式end********************/
//添加样式
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
if(fieldName.get(j) != null){
//将创建好的样式放置到对应的单元格中
/**cell.setCellStyle(cellStyle);*/
cell.setCellValue((String) fieldName.get(j));//为标题中的单元格设置值
cell.setCellStyle(style1);
}else{
cell.setCellValue("-");
cell.setCellStyle(style1);
}
}
//分页处理excel的数据,遍历所有的结果
for (int k = 0; k < (rows < SPLIT_COUNT ? rows : SPLIT_COUNT); k++) {
if (((i - 1) * SPLIT_COUNT + k) >= rows)//如果数据超出总的记录数的时候,就退出循环
break;
HSSFRow row = sheet.createRow((short) (k + 2));//创建1行
//分页处理,获取每页的结果集,并将数据内容放入excel单元格
ArrayList<String> rowList = (ArrayList<String>) fieldData.get((i - 1) * SPLIT_COUNT + k);
for (int n = 0; n < rowList.size(); n++) {//遍历某一行的结果
HSSFCell cell = row.createCell( n);//使用行创建列对象
if(rowList.get(n) != null){
cell.setCellValue((String) rowList.get(n).toString());
cell.setCellStyle(style1);
}else{
cell.setCellValue("");
cell.setCellStyle(style1);
}
}
}
}
return workBook;
}

public void expordExcel(OutputStream os) throws Exception {
workBook = createWorkbook();
workBook.write(os);//将excel中的数据写到输出流中,用于文件的输出
os.close();
}

}
0 0
原创粉丝点击