数据库导出到excel
项目结构同上一篇
泛型通用的写法
ExportExcel.java
package excel; import java.io.OutputStream; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; 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; public class ExportExcel<T> { public void exportExcel(String title, String[] headers, List<T> list, OutputStream out){ //声明一个工作薄 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); //生成一个表格 HSSFSheet sheet = hssfWorkbook.createSheet(title); //设置表格默认列宽度 sheet.setDefaultColumnWidth(15); //生成一个样式 HSSFCellStyle style = hssfWorkbook.createCellStyle(); //设置样式 style.setFillForegroundColor(HSSFColor.SKY_BLUE.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 = hssfWorkbook.createFont(); font.setColor(HSSFColor.VIOLET.index); font.setFontHeightInPoints((short) 12); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 把字体应用到当前的样式 style.setFont(font); //产生表格标题行 HSSFRow row = sheet.createRow(0); for(int i = 0; i < headers.length; i++){ HSSFCell cell = row.createCell(i); cell.setCellStyle(style); HSSFRichTextString text = new HSSFRichTextString(headers[i]); cell.setCellValue(text); } int index = 0; for(T t: list){ index++; row = sheet.createRow(index); Field[] fields = t.getClass().getDeclaredFields(); for(int i = 0; i < fields.length; i++){ HSSFCell cell = row.createCell(i); cell.setCellStyle(style); Field field = fields[i]; String fieldName = field.getName(); String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); try{ Class tCls = t.getClass(); Method getMethod = tCls.getMethod(getMethodName, new Class[] {}); Object value = getMethod.invoke(t, new Object[] {}); String textValue = value.toString(); HSSFRichTextString richString = new HSSFRichTextString(textValue); HSSFFont font3 = hssfWorkbook.createFont(); font3.setColor(HSSFColor.BLUE.index); richString.applyFont(font3); cell.setCellValue(richString); }catch (Exception e) { e.printStackTrace(); } } } try{ hssfWorkbook.write(out); }catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } public void exportExcels(List<T> list, OutputStream out){ //声明一个工作薄 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); //生成一个表格 HSSFSheet sheet = hssfWorkbook.createSheet(); //设置表格默认列宽度 sheet.setDefaultColumnWidth(20); //生成一个样式 HSSFCellStyle style = hssfWorkbook.createCellStyle(); //设置样式 style.setFillForegroundColor(HSSFColor.SKY_BLUE.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 = hssfWorkbook.createFont(); font.setColor(HSSFColor.VIOLET.index); font.setFontHeightInPoints((short) 12); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 把字体应用到当前的样式 style.setFont(font); //产生表格标题行 HSSFRow row = sheet.createRow(0); T x = list.get(0); for(int i = 0; i < x.getClass().getDeclaredFields().length; i++){ HSSFCell cell = row.createCell(i); cell.setCellStyle(style); HSSFRichTextString text = new HSSFRichTextString(x.getClass().getDeclaredFields()[i].getName()); cell.setCellValue(text); } int index = 0; for(T t: list){ index++; row = sheet.createRow(index); Field[] fields = t.getClass().getDeclaredFields(); for(int i = 0; i < fields.length; i++){ HSSFCell cell = row.createCell(i); cell.setCellStyle(style); Field field = fields[i]; String fieldName = field.getName(); String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); try{ Class tCls = t.getClass(); Method getMethod = tCls.getMethod(getMethodName, new Class[] {}); Object value = getMethod.invoke(t, new Object[] {}); String textValue; if(value == null){ continue; } if(value instanceof Date){ Date date = (Date) value; SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd"); textValue = sdf.format(date); }else{ textValue = value.toString(); } HSSFRichTextString richString = new HSSFRichTextString(textValue); HSSFFont font3 = hssfWorkbook.createFont(); font3.setColor(HSSFColor.BLUE.index); richString.applyFont(font3); cell.setCellValue(richString); }catch (Exception e) { // e.printStackTrace(); } } } try{ hssfWorkbook.write(out); }catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }
非泛型硬编码的写法:
package client; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import mysql.mapper.StudentMapper; 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.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import station.mapper.StationApplyMapper; import excel.ExportExcel; import Student.StationApply; import Student.StationApplyExample; import Student.Student; import Student.StudentExample; public class PoiDemo { public static void main(String[] args) throws IOException{ long t1 = System.currentTimeMillis(); ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-dao.xml"); StationApplyMapper stationApplyMapper = (StationApplyMapper) ctx.getBean("stationApplyMapper"); StationApplyExample stationApplyExample = new StationApplyExample(); List<StationApply> list = stationApplyMapper.selectByExample(stationApplyExample); OutputStream out = new FileOutputStream("D://a.xls"); // new ExportExcel<Student>().exportExcel("test", headers, list, out); // new ExportExcel<StationApply>().exportExcels(list, out); exportExcels(list, out); out.close(); System.out.println("success!"); long t2 = System.currentTimeMillis(); System.out.println(t2 - t1); } public static void exportExcels(List<StationApply> list, OutputStream out){ //声明一个工作薄 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); //生成一个表格 HSSFSheet sheet = hssfWorkbook.createSheet(); //设置表格默认列宽度 sheet.setDefaultColumnWidth(20); //生成一个样式 HSSFCellStyle style = hssfWorkbook.createCellStyle(); //设置样式 style.setFillForegroundColor(HSSFColor.SKY_BLUE.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 = hssfWorkbook.createFont(); font.setColor(HSSFColor.VIOLET.index); font.setFontHeightInPoints((short) 12); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 把字体应用到当前的样式 style.setFont(font); //产生表格标题行 HSSFRow row = sheet.createRow(0); StationApply x = list.get(0); for(int i = 0; i < x.getClass().getDeclaredFields().length; i++){ HSSFCell cell = row.createCell(i); cell.setCellStyle(style); HSSFRichTextString text = new HSSFRichTextString(x.getClass().getDeclaredFields()[i].getName()); cell.setCellValue(text); } int index = 0; for(StationApply t: list){ if(t == null){ continue; } index++; row = sheet.createRow(index); HSSFCell cell = row.createCell(0); // SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd"); try{ HSSFRichTextString richString = new HSSFRichTextString(String.valueOf(t.getId())); cell.setCellValue(richString); cell = row.createCell(1); richString = new HSSFRichTextString(String.valueOf(t.getGmtCreate())); cell.setCellValue(richString); cell = row.createCell(2); richString = new HSSFRichTextString(String.valueOf(t.getGmtModified())); cell.setCellValue(richString); cell = row.createCell(3); richString = new HSSFRichTextString(t.getCreator()); cell.setCellValue(richString); cell = row.createCell(4); richString = new HSSFRichTextString(t.getModifier()); cell.setCellValue(richString); cell = row.createCell(5); richString = new HSSFRichTextString(t.getIsDeleted()); cell.setCellValue(richString); cell = row.createCell(6); richString = new HSSFRichTextString(t.getIsDeleted()); cell.setCellValue(richString); cell = row.createCell(7); richString = new HSSFRichTextString(t.getName()); cell.setCellValue(richString); cell = row.createCell(8); richString = new HSSFRichTextString(t.getState()); cell.setCellValue(richString); cell = row.createCell(9); richString = new HSSFRichTextString(t.getApplierName()); cell.setCellValue(richString); cell = row.createCell(10); richString = new HSSFRichTextString(t.getIdenNum()); cell.setCellValue(richString); cell = row.createCell(11); richString = new HSSFRichTextString(t.getMobile()); cell.setCellValue(richString); cell = row.createCell(12); richString = new HSSFRichTextString(t.getCovered()); cell.setCellValue(richString); cell = row.createCell(13); richString = new HSSFRichTextString(t.getProducts()); cell.setCellValue(richString); cell = row.createCell(14); richString = new HSSFRichTextString(t.getLogisticsState()); cell.setCellValue(richString); cell = row.createCell(15); richString = new HSSFRichTextString(t.getDescription()); cell.setCellValue(richString); cell = row.createCell(16); richString = new HSSFRichTextString(t.getFormat()); cell.setCellValue(richString); cell = row.createCell(17); richString = new HSSFRichTextString(t.getAlipayAccount()); cell.setCellValue(richString); cell = row.createCell(18); richString = new HSSFRichTextString(t.getTaobaoNick()); cell.setCellValue(richString); cell = row.createCell(19); richString = new HSSFRichTextString(String.valueOf(t.getStationId())); cell.setCellValue(richString); cell = row.createCell(20); richString = new HSSFRichTextString(String.valueOf(t.getOwnOrgId())); cell.setCellValue(richString); }catch (Exception e) { e.printStackTrace(); } } try{ hssfWorkbook.write(out); }catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }
测试耗时2s左右 测试数据10000条记录 每条记录20个字段
web实例http://www.cnblogs.com/xwdreamer/archive/2011/07/20/2296975.html