wicket框架下如何将表格数据导出Excel

来源:互联网 发布:编程打印菱形 编辑:程序博客网 时间:2024/05/20 08:22

将页面一的表格导出Excel,需要专门写一个Excel类和几个附属操作类,同时,在页面一的java代码里面写一个方法,此过程比较复杂,不过大部分代码copy就可以用,只需要改自己要替换的内容就可以了。

java代码如下:

首先是方法的创建

public void createExcel(){//创建Excel类的对象,可以自定义带参构造,传入参数//我的项目里传入了三个参数,大家可以参考自己的需求//selectedYear,selectedMonth,monthDayfinal ExportPersonalPageExcel excelExport = new ExportPersonalPageExcel(selectedYear,selectedMonth,monthDay);//国际化文件,里面是自定义中文索引,nav.report.userWorkday的内容为导出Excel的文件名String filename =new ResourceModel("nav.report.userWorkday").getObject()+".xls";//通过数据库查询将结果放入集合中(此步骤只是为了说明要获取数据,里面的集合泛型和数据获取方法不讨论,大家根据自己需求设计)final List<PersonalProElement> personalProElements = personalservice.getResult(selectedYear,selectedMonth,monthDay);getRequestCycle().scheduleRequestHandlerAfterCurrent(new ExcelRequestHandler(filename, new Function<byte[]>() {                        @Override                        public byte[] apply() {                            return excelExport.getExcelData(personalProElements);                        }                    }));}

Excel类的创建

public class ExportPersonalPageExcel {    private List<PersonalProElement> list;    private HSSFRow hssf_w_r = null;//创建一行    private HSSFCell hssf_w_c = null;//每个单元格    HSSFWorkbook hssf_w_wk = null;    HSSFSheet hssf_w_s = null;    int j = 0;    private Integer selectedYear;    private Integer selectedMonth;    private int monthday;    public ExportPersonalPageExcel(Integer selectedYear,Integer selectedMonth,int monthday){        this.selectedYear=selectedYear;        this.selectedMonth=selectedMonth;        this.monthday=monthday;    }    public byte[] getExcelData(List<PersonalProElement> list) {        this.list = list;        ExcelWorkbook workbook = createWorkbook();        try {            return PoiUtil.getWorkbookAsBytes(workbook);        } catch (IOException e) {            return new byte[0];        }    }    private ExcelWorkbook createWorkbook() {        ExcelWorkbook workbook = new ExcelWorkbook();        Excelbookshell.setExcelbook("your_name");        List<String> head = new ArrayList<String>();        //设计Excel的表头名称,同样用的是国际化文件        head.add(new ResourceModel("daysQuery.table.project").getObject());        head.add(new ResourceModel("daysQuery.stage").getObject());        head.add(new ResourceModel("printMonth.help.header").getObject());        head.add(new ResourceModel("op.lock.admin.affectedUsers.name.label").getObject());        head.add(new ResourceModel("personProject.trueWorkDay").getObject());        head.add(new ResourceModel("personProject.resources").getObject());        try {            hssf_w_s = workbook.createSheet(new ResourceModel("nav.report.userWorkday").getObject());            //填写内容            int col_count = 0;            int row_count = 0;            row_count = list.size();            col_count = head.size();            //标题            int titleRows = 0; //标题占据的行数            hssf_w_r = hssf_w_s.createRow(0);            //第一行写入标题行            hssf_w_r = hssf_w_s.createRow(0+titleRows);            for(int i = 0; i < col_count; i++){                hssf_w_c = hssf_w_r.createCell((short)i);                hssf_w_c.setCellType(HSSFCell.CELL_TYPE_STRING);                HSSFRichTextString hssfString = new HSSFRichTextString(head.get(i));                hssf_w_c.setCellValue(hssfString);//                hssf_w_s.autoSizeColumn((short)i);            }            //第二行开始写入数据            hssf_w_s.setColumnWidth(0,5000);            hssf_w_s.setColumnWidth(1,5000);            hssf_w_s.setColumnWidth(2,5000);            hssf_w_s.setColumnWidth(3,16000);            hssf_w_s.setColumnWidth(4,5000);            hssf_w_s.setColumnWidth(5,5000);            //遍历表格的每一行,依次写入数据            for(int i = 1; i <= row_count; i++){                hssf_w_r = hssf_w_s.createRow(i+titleRows);                PersonalProElement element = list.get(i-1);                //大家根据自己传过来的集合取出对象来get出属性填充每一行数据                setStringStyle(element.getProject());                setStringStyle(element.getProjectStage();               }        } catch (Exception e) {            e.printStackTrace();        }        return workbook;    }    private void setStringStyle(String value) {        hssf_w_c = hssf_w_r.createCell((short)j);        j++;        hssf_w_c.setCellType(HSSFCell.CELL_TYPE_STRING);        if(value==null) {            value="";        }        HSSFRichTextString hssfString = new HSSFRichTextString(value);        hssf_w_c.setCellValue(hssfString);    }

同时,还要写三个操作类
第一个操作类:

public class ExcelWorkbook {    private static final String FONT_NAME = "Arial";    private Map<CellStyle, HSSFCellStyle> pregeneratedStyles;    private HSSFWorkbook workbook;    private HSSFWorkbook workbook1;    public ExcelWorkbook() {        init();    }    private void init() {        workbook = new HSSFWorkbook();        pregenerateStyles(workbook);    }    private void pregenerateStyles(HSSFWorkbook workbook) {        pregeneratedStyles = new HashMap<CellStyle, HSSFCellStyle>();        CellStyle[] styleses = CellStyle.values();        HSSFFont font = workbook.createFont();        font.setFontName(FONT_NAME);        for (CellStyle stylese : styleses) {            HSSFCellStyle cellStyle = workbook.createCellStyle();            cellStyle.setFont(font);            stylese.apply(workbook, cellStyle);            pregeneratedStyles.put(stylese, cellStyle);        }    }    public HSSFCellStyle getCellStyle(CellStyle forCellStyle) {        return pregeneratedStyles.get(forCellStyle);    }    public HSSFSheet createSheet(String sheetName) {        return workbook.createSheet(sheetName);    }    public HSSFSheet createSheet1(String sheetName) {        return workbook.createSheet(sheetName);    }    public int addPicture(byte[] image, int imageType) {        return workbook.addPicture(image, imageType);    }    public void write(ByteArrayOutputStream output) throws IOException {        workbook.write(output);    }}

第二个操作类:

public class PoiUtil{    public static byte[] getWorkbookAsBytes(ExcelWorkbook workbook) throws IOException    {        ByteArrayOutputStream output = new ByteArrayOutputStream();        workbook.write(output);        return output.toByteArray();    }    public static int getImageType(String type)    {        if (type.equalsIgnoreCase("png"))        {            return HSSFWorkbook.PICTURE_TYPE_PNG;        }        else        {            return HSSFWorkbook.PICTURE_TYPE_JPEG;        }    }}

第三个操作类:

public class Excelbookshell {    private static String Excelbook ="";    public static String getExcelbook() {        return Excelbook;    }    public static void setExcelbook(String excelbook) {        Excelbook = excelbook;    }}
原创粉丝点击