您的位置:首页 > 编程语言 > Java开发

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

2017-06-07 14:05 459 查看
将页面一的表格导出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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java wicket excel 框架