• 数据库导出到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

  • 相关阅读:
    [Automation] 自动化测试工具和测试框架大集合
    C#借助API实现黑盒自动化测试工具的编写
    C#实现RSA加密解密
    Uipath开发过程中最常见的5类错误
    tqdm介绍及常用方法
    Top-1准确率和Top-5准确率
    focal loss焦点损失
    【深度学习】卷积神经网络中Dropout、BatchNorm的位置选择
    数据增强——mixup
    数据增强之mixup算法详解
  • 原文地址:https://www.cnblogs.com/tuifeideyouran/p/4630312.html
Copyright © 2020-2023  润新知