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

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

java代码如下:

首先是方法的创建

public void createExcel(){

//创建Excel类的对象,可以自定义带参构造,传入参数
//我的项目里传入了三个参数,大家可以参考自己的需求
//selectedYear,selectedMonth,monthDay
final 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;
    }

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值