#### 2.4 注解變種-更自由的導出
這天老師又把路飛喊道的辦公室,要求路飛導出班級學生的整體信息
~~~
@Excel(name = "學生姓名", height = 20, width = 30, isImportField = "true_st")
private String name;
@Excel(name = "學生性別", replace = { "男_1", "女_2" }, suffix = "生", isImportField = "true_st")
private int sex;
@Excel(name = "出生日期", databaseFormat = "yyyyMMddHHmmss", format = "yyyy-MM-dd", isImportField = "true_st", width = 20)
private Date birthday;
@Excel(name = "進校日期", databaseFormat = "yyyyMMddHHmmss", format = "yyyy-MM-dd")
private Date registrationDate;
~~~
路飛飛快的用到上面的學到的知識搞定了,這這時有一個老師把路飛叫去,說想要導出一個不要出生日期的Excel,感覺用戶需求很無奈,路飛又造兩個一個bean,把這個注解去掉了,來導出
~~~
@Excel(name = "學生姓名", height = 20, width = 30, isImportField = "true_st")
private String name;
@Excel(name = "學生性別", replace = { "男_1", "女_2" }, suffix = "生", isImportField = "true_st")
private int sex;
@Excel(name = "進校日期", databaseFormat = "yyyyMMddHHmmss", format = "yyyy-MM-dd")
private Date registrationDate;
~~~
雖然解決了老師的需求,但這個并不是一個完美的解決方案,下面介紹一個更自由的解決方案
注解的導出,規定我們必須把model寫好,并且注解寫好,每次導出的Excel都是固定的,無法動態控制導出的列,雖然可以通過id來處理一個案例,但是自由度遠遠不夠,這里介紹個變種支持,基本支持注解所有的功能
基于List 的導出,ExcelExportEntity是注解經過處理翻譯成的實體類,兩者幾乎是一對的,所以如果我們要動態自定義導出列,我們只要動態拼裝ExcelExportEntity就可以了 下面我們看下這個類
~~~
/**
* 如果是MAP導出,這個是map的key
*/
private Object key;
private double width = 10;
private double height = 10;
/**
* 圖片的類型,1是文件,2是數據庫
*/
private int exportImageType = 0;
/**
* 排序順序
*/
private int orderNum = 0;
/**
* 是否支持換行
*/
private boolean isWrap;
/**
* 是否需要合并
*/
private boolean needMerge;
/**
* 單元格縱向合并
*/
private boolean mergeVertical;
/**
* 合并依賴
*/
private int[] mergeRely;
/**
* 后綴
*/
private String suffix;
/**
* 統計
*/
private boolean isStatistics;
private String numFormat;
private List<ExcelExportEntity> list;
~~~
基本上是和注解對應的, **List list 這個是對應的一對多的導出,相當于集合,其他基本上都是和注解保持一致** 下面給出正常的demo
~~~
public void test() {
try {
List<ExcelExportEntity> entity = new ArrayList<ExcelExportEntity>();
//構造對象等同于@Excel
ExcelExportEntity excelentity = new ExcelExportEntity("姓名", "name");
excelentity.setNeedMerge(true);
entity.add(excelentity);
entity.add(new ExcelExportEntity("性別", "sex"));
excelentity = new ExcelExportEntity(null, "students");
List<ExcelExportEntity> temp = new ArrayList<ExcelExportEntity>();
temp.add(new ExcelExportEntity("姓名", "name"));
temp.add(new ExcelExportEntity("性別", "sex"));
//構造List等同于@ExcelCollection
excelentity.setList(temp);
entity.add(excelentity);
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
//把我們構造好的bean對象放到params就可以了
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("測試", "測試"), entity,
list);
FileOutputStream fos = new FileOutputStream("D:/excel/ExcelExportForMap.tt.xls");
workbook.write(fos);
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
~~~
路飛想到了這個方案,并且用上面做了測試可以完美解決所以他把之前的代碼改為了(**代碼有刪減,基本上都是和注解對應的**)
~~~
List<ExcelExportEntity> beanList = new ArrayList<ExcelExportEntity>();
beanList .add(new ExcelExportEntity(new ExcelExportEntity("學生姓名", "name"));
beanList .add(new ExcelExportEntity("學生性別", "sex"));
beanList .add(new ExcelExportEntity("進校日期", "registrationDate"));
if(needBirthday()){
beanList .add(new ExcelExportEntity("出生日期", "birthday"));
}
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("測試", "測試"), beanList ,list);
~~~
用同一套代買完美了支持了老師的需求,心滿意足的回宿舍了^^
- 1.前傳
- 1.1前言
- 1.2 Autopoi 介紹
- 1.3 使用
- 1.4 測試項目
- 1.5 快速文檔
- 1.6 示例
- 1.6.1 單表數據導出多表頭示例
- 單表數據多表頭導入注意bak
- 1.6.2 單表數據導出多sheet示例
- 1.6.3 excel根據模板導出
- 1.6.4 一對多導出needMerge示例
- 1.6.5 大數據導出示例
- 1.7 導出自定義選擇列導出
- 2. Excel 注解版
- 2.0 @excel注解的使用
- 2.1 Excel導入導出
- 2.2 注解
- 2.3 注解導出,導入
- 2.3.1 對象定義
- 2.3.2 集合定義
- 2.3.3 圖片的導出
- 2.3.4 Excel導入介紹
- 2.3.5 Excel導入小功能
- 2.3.6 圖片的導入
- 2.3.7 Excel多Sheet導出
- 2.4 注解變種-更自由的導出
- 2.5 Map導入,自由發揮
- 2.6 Excel的樣式自定義
- 2.7 如何自定義數據處理
- 2.8 Excel導入校驗(暫不支持)
- 2.9 Excel 大批量讀取
- 2.10 Excel大數據導出
- 2.11 groupname和ExcelEntity的name屬性
- 3. Excel 模板版
- 3.1 模板 指令介紹
- 3.2 基本導出
- 3.3 模板當中使用注解
- 3.4 圖片導出
- 3.5 橫向遍歷
- 4. Excel<->Html
- 4.1 Excel 的Html預覽
- 4.2 html轉Excel更神奇的導出
- 5. Word
- 5.1 word模板導出
- 6. PDF
- 7. Spring MVC
- 7.1 View 介紹
- 7.2 大數據導出View的用法
- 7.3 注解導出View用法
- 7.4 注解變種Map類型的導出View
- 7.5Excel模板導出View
- 7.6 PoiBaseView.render view的補救
- 8.問題歸檔
- 9.大數據量處理
- 10.autopoi升級4.0版本修改記錄