Excel导出组件

  在浙江移动的一个项目中开发的用于EXCEL导出的组件。由于时间仓促,功能并不是很齐全,希望大指给于指正。
  Excel-export1.0是用于将JAVA中的数据结构导出为excel文件的工具组件,该组件目前版本为1.0,基于POI3.6,支持office2007和office2003,调用该组件将会在服务端生成两个文件,一个是office2007xls,一个是office2003.xls ,由于开发时间仓促,该组件目前功能并不强大,希望广大程序员朋友都能加入到这一组件的开发团队中来。
  目前Excel解析组件(EPE1.0)由于视图查询功能开发未完备,所以暂不加入到该平台中。 Excel-export组件目前主要优点为:
  一、 使用简单
  二、 稳定
  三、 速度较快
  缺点为: 生成的列头顺序需要手工调整model或者是dto中的字段,对列头顺序的支持不是很好。
  Excel-export1.0依懒以下JAR包,使用时请将以下JAR拷贝到lib目前中,另外将excel-export1.0.jar包拷入lib中
  
  下面贴上关键代码
  package com.zjmcc.excel.comm;
  import java.io.FileNotFoundException;
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.lang.reflect.Field;
  import java.util.ArrayList;
  import java.util.Date;
  import java.util.List;
  import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  import org.apache.poi.ss.usermodel.Cell;
  import org.apache.poi.ss.usermodel.CellStyle;
  import org.apache.poi.ss.usermodel.IndexedColors;
  import org.apache.poi.ss.usermodel.Row;
  import org.apache.poi.ss.usermodel.Sheet;
  import org.apache.poi.ss.usermodel.Workbook;
  import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  import org.slf4j.LoggerFactory;
  /**
  * Excel导出类 该类用于导出List数据集中的数据,list中的对象可由用户自行定义。
  * 在List类中定义打印的列。可以EXCEL中输出。
  *
  * @author 李声波
  *
  * @param
  * 泛型
  */
  public class OutPutExcel {
  private org.slf4j.Logger log=LoggerFactory.getLogger(this.getClass());
  public OutPutExcel() {
  super();
  }
  private short headBackgroundColor;
  /**
  * 读取数据源
  *
  * @param serverPath
  * 服务器路径
  * @param dataList
  * 数据源
  * @param headCellList
  * 列头
  * @return
  */
  public boolean readyDataSource(String serverPath,
  List dataList, List headCellList) {
  boolean b=false;
  Workbook[] wbs = new Workbook[] { new HSSFWorkbook(),
  new XSSFWorkbook() };
  for (int i = 0; i headCellList) {
  Sheet s = wb.createSheet();
  if (obj.getClass() == ArrayList.class) {
  Field[] fields = null;
  ArrayList list = (ArrayList) obj;
  List listExcel = new ArrayList();
  // 获取数据总行数
  for (int i = 0; i classObj = list.get(i).getClass();
  fields = classObj.getDeclaredFields();
  // 获取字段总数
  for (int cellnum = 0; cellnum cellType = valueObj.getClass();
  excel.setFieldValue(valueObj.toString());
  excel.setCellType(String.class);
  if (cellType == String.class) {
  excel
  .setFieldValue(valueObj
  .toString());
  excel.setCellType(String.class);
  }
  if (cellType == Integer.class) {
  excel
  .setFieldValue(valueObj
  .toString());
  excel.setCellType(Integer.class);
  }
  if (cellType == Double.class) {
  excel
  .setFieldValue(valueObj
  .toString());
  excel.setCellType(Double.class);
  }
  if (cellType == Date.class) {
  excel
  .setFieldValue(valueObj
  .toString());
  excel.setCellType(Double.class);
  }
  if (cellType == Float.class) {
  excel
  .setFieldValue(valueObj
  .toString());
  excel.setCellType(Float.class);
  }
  if (cellType == int.class) {
  excel
  .setFieldValue(valueObj
  .toString());
  excel.setCellType(int.class);
  }
  }
  else {
  excel.setFieldValue("");
  excel.setCellType(Object.class);
  }
  listExcel.add(excel);
  }
  } catch (IllegalArgumentException e) {
  e.printStackTrace();
  } catch (IllegalAccessException e) {
  e.printStackTrace();
  }
  }
  }
  }
  /************************* 打印二维表 **************************************/
  // 打印表头
  Row r0 = s.createRow(0);
  int x = 0;
  try
  {
  // 获取总行数
  for (int j = 1; j cellType=excel.getCellType();
  // 创建单元格数据
  Cell c = r1.createCell(h);
  if (cellType == String.class) {
  c.setCellValue(excel.getFieldValue());
  }
  if (cellType == Integer.class) {
  c.setCellValue(Integer.parseInt(excel.getFieldValu e()));
  }
  if (cellType == Double.class) {
  c.setCellValue(Double.parseDouble(excel.getFieldVa lue()));
  }
  if (cellType == Date.class) {
  c.setCellValue(Date.parse(excel.getFieldValue()));
  }
  if (cellType == Float.class) {
  c.setCellValue(Float.parseFloat(excel.getFieldValu e()));
  }
  if (cellType == int.class) {
  c.setCellValue((int)Integer.parseInt(excel.getFiel dValue()));
  }
  ++x;
  }
  }
  log.info("打印了"+listExcel.size()+"单元格");
  log.info("打印了"+list.size()+"行数据");
  log.info("每行打印了"+headCellList.size()+"列");
  }
  catch (Exception e) {
  e.printStackTrace();
  log.info("没有生成EXCEL");
  log.info(e.getMessage().toString());
  }
  }
  }
  private Class isType(Class obj) {
  if (obj == String.class) {
  return String.class;
  }
  if (obj == Integer.class) {
  return Integer.class;
  }
  if (obj == Double.class) {
  return Double.class;
  }
  if (obj == Date.class) {
  return Date.class;
  }
  if (obj == Float.class) {
  return Float.class;
  }
  if (obj == int.class) {
  return int.class;
  } else {
  return Object.class;
  }
  }
  /**
  * 得到表头背景色
  * @return
  */
  public short getHeadBackgroundColor() {
  return headBackgroundColor;
  }
  /**
  * 设置表头背景色
  * @param headBackgroundColor
  */
  public void setHeadBackgroundColor(short headBackgroundColor) {
  this.headBackgroundColor = headBackgroundColor;
  }
  }

你可能感兴趣的:(技术杂绘)