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

xiaoxiao2021-02-28  86

将页面一的表格导出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; } }
转载请注明原文地址: https://www.6miu.com/read-42640.html

最新回复(0)