生成Excel 我这里是用的POI 的jar包 请尊重原创,转载时请标明出处 谢谢
需要的jar包 请自行下载
commons-beanutils-1.7.1.jar
commons-lang-2.1.jar
poi-3.10.jar
实体类:
import java.util.Date;
public class Student {
private String name;
private String sex;
private Date age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getAge() {
return age;
}
public void setAge(Date age) {
this.age = age;
}
}
测试类:
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class ExportExcelMain {
public static String xlsFile="F:\\excel\\test.xls"; //产生的Excel文件的名称
/**
*
* 方法描述: main方法
* @param args void
* @author Andy 2014-4-29 下午05:42:03
*/
public static void main(String[] args) {
try {
FileOutputStream os = new FileOutputStream(xlsFile);
String[] strMeaning={"名称","性别","年龄"};
String[] strName={"name","sex","age"};
List<Student> ls=new ArrayList<Student>();
for(int i=0;i<3;i++){
Student s=new Student();
s.setName("我的名称"+i);
s.setSex("我的性别"+i);
s.setAge(new Date());
ls.add(s);
}
System.out.println("进入导出方法");
ExportExcel.exportExcel(strMeaning, strName, ls, os);
} catch (Exception e1){
e1.getStackTrace();
}
}
}
生成Excel类:
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
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;
public class ExportExcel {
private static SimpleDateFormat SDF = null;
/**
*
* 方法描述:生成调用的方法
* @param strMeaning 表头的数组
* @param strName 表字段数组
* @param collection 表数据集合
* @param os 输出流
* @throws Exception void
* @author Andy 2014-4-29 下午05:40:57
*/
public static void exportExcel(String[] strMeaning,String[] strName,Collection<?> collection,OutputStream os) throws Exception{
HSSFWorkbook wb = ExportExcel.generateExcelforObject(strMeaning,strName,"",collection);
wb.write(os);
}
private static HSSFWorkbook generateExcelforObject(String[] strMeaning,String[] strName,String str,Collection<?> collection) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
HSSFWorkbook wb = new HSSFWorkbook();
if(collection==null || collection.size()<1)return wb; //无数据侧返回
if(strMeaning==null || strMeaning.length<1)return wb; //表头为空侧返回
if(strName==null || strName.length<1)return wb; //字段侧返回
if(strMeaning.length!=strName.length)return wb; //两个数组长度不同侧返回
HSSFRow row=null;
short rowNum = 0;
//设置工作簿的名称
String sheetTitle=StringUtils.isEmpty(str)?"Sheet1":str;
HSSFSheet sheet = wb.createSheet();
wb.setSheetName(0,sheetTitle);
//设置标题
row = sheet.createRow(rowNum);
setTitle(row, strMeaning,wb);
for (Iterator<?> iter = collection.iterator(); iter.hasNext();) {
Object exportEle = iter.next();
// 行对象
row = sheet.createRow(++rowNum);
//设置对应值
setRow(row, strName, exportEle);
}
return wb;
}
/**
* 方法描述: 为Excel页中的每个横行设置标题
* @param row
* @param strMeaning
* @param wb
* @throws IllegalAccessException
* @throws InvocationTargetException
* @throws NoSuchMethodException void
* @author Andy 2014-4-29 下午05:45:45
*/
@SuppressWarnings("deprecation")
private static void setTitle(HSSFRow row,String[] strMeaning,HSSFWorkbook wb) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{
HSSFCellStyle style = wb.createCellStyle();
// 设置这些样式
style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.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); //设置单元格字符居中
//生成一个字体
HSSFFont font = wb.createFont();
// font.setColor(HSSFColor.WHITE.index); //设置字体颜色
font.setFontHeightInPoints((short)10);
// font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //设置字体加粗
// 把字体应用到当前的样式
style.setFont(font);
for (int k = 0; k < strMeaning.length; k++) {
HSSFCell cell = row.createCell((short)k);
cell.setCellStyle(style);
cell.setCellValue(strMeaning[k]);
}
}
/**
*
* 方法描述: 为Excel页中的每个横行设置值
* @param row
* @param strName
* @param exportModel
* @throws IllegalAccessException
* @throws InvocationTargetException
* @throws NoSuchMethodException void
* @author Andy 2014-4-29 下午05:44:02
*/
@SuppressWarnings("deprecation")
private static void setRow(HSSFRow row,String[] strName,Object exportModel) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{
Object temp=null;
for (int k = 0; k < strName.length; k++) {
// Cell对象
HSSFCell cell = row.createCell((short) k);
//设置对应值
try {
//检查该实体是否有这个属性
temp = PropertyUtils.getProperty(exportModel, strName[k]);
} catch (Exception e) {
e.getStackTrace();
continue;
}
if(temp==null){
cell.setCellValue(StringUtils.EMPTY);
}else{
if(temp instanceof Date){
cell.setCellValue(getDateTimeFormat().format(Date.class.cast(temp)));
}else if(NumberUtils.isNumber(temp.toString())){
cell.setCellValue(Double.parseDouble(temp.toString()));
}else{
cell.setCellValue(temp.toString());
}
}
}
}
/**
* 方法描述: 获取系统时间格式
* @return SimpleDateFormat
* @author Andy 2014-4-29 下午05:44:39
*/
public static SimpleDateFormat getDateFormat(){
if(SDF==null){SDF=new SimpleDateFormat("yyyy-MM-dd");}
return SDF;
}
/**
* 方法描述: 获取系统精确时间格式
* @return SimpleDateFormat
* @author Andy 2014-4-29 下午05:44:27
*/
public static SimpleDateFormat getDateTimeFormat(){
if(SDF==null){SDF=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");}
return SDF;
}
}
请尊重原创,转载时请标明出处 . O(∩_∩)O谢谢~