通過註解實現通用匯出Excel
阿新 • • 發佈:2018-12-29
Javaweb開發中資料的匯入匯出很常見,每次我們都需要寫很多程式碼,所以我就在想能不能寫一些通用的方法,之前已經在網上
整理過一些通用的方法,最近在網上看到一位牛人封裝的更加簡介,自己拿過來整理了一下。
配置註解
- 之前我們瞭解了Java註解的使用,現在我們正是通過註解的方式來簡化javaweb中繁瑣的Excel上傳和下載兩個功能。由於時間有限今天先實現了Excel的下載(Excel 匯出)。
- 上面的就是我們的註解類的簡化圖。引數的意思分別是指定表頭的名字+表頭所佔列寬度+該列是否明文顯示+加密顯示的方式+特殊文字的格式
資料實體類
- 有了上面的註解我們的實體類非常的簡單,只是在我們平常建的Javabean的屬性欄位上加上我們剛才的註解就行了。
- 其中ExportConfig註解中的屬性值我們可以不設定,不設定就是預設的。這裡設定完成後就開始寫匯出了。
Excel匯出
- 現在該如何獲取我們的註解呢,之前的文章已經介紹了。我們得首先獲得我們的Javabean的欄位。
for (Field field : _class.getDeclaredFields())
- 可能會出現我們的Javabean的資料並不是完全的查出來了。所以這裡我們得先看看這個欄位到底有沒有值。
property = BeanUtils.getProperty(data.get(0), field.getName());
- 在有值得前提下我們在獲取欄位的註解。
ExportConfig config = field.getAnnotation(ExportConfig.class);
- 最後我們開始講註解的資訊存在到資訊類上ExportItem.java
items.add(new ExportItem.$Build()
.setField(field.getName())
.setDisplay(
"field".equals(config.value ()) ? field
.getName() : config.value())
.setWidth(config.width())
.setIsExport(config.isExport())
.setContent(config.blankContent())
.setFieldTypeName(field.getClass().getSimpleName())
.setFormat(config.format())
.create());
- ExportItem 類也很簡單。裡面拷貝了自身的一個類實現了鏈式操作。這裡沒什麼講解的。到這裡我們的表頭顯示設定已經完成了。下面自然就是遍歷list集合資料了。當然遍歷之前先設定表頭樣式。
ExportItem exportItem = items.get(index);
// 首先建立該行指定列的單元格
Cell cell = headRow.createCell(index);
sheet.setColumnWidth(index, (short) (exportItem.getWidth() * 35.7));
cell.setCellValue(exportItem.getDisplay());
CellStyle style = handler.getHeadCellStyle(wb);
if (style != null)
{
cell.setCellStyle(style);
}
- 在設定表身的時候我們得先去註解資訊類中拿到該列顯示的風格(是否是明文)。
if (exportItem.getIsExport())
- 在設定了內容之後我們還要根據註解的單元格格式進行樣式的設定
setStyleByType(wb,exportItem.getFormat());
Excel輸出
fileName += getExcelSuffix(type);
_response.setContentType(getContentType(type));
_response.setHeader(
"Content-disposition",
"attachment; filename="
+ new String(fileName.getBytes("gbk"), "iso8859-1"));
if (out == null)
{
out = _response.getOutputStream();
}
wb.write(out);
out.flush();
out.close();
所需jar
log4j-1.2.17.jar 日誌jar包
servlet-api.jar 正常在web專案中都不需要引入該jar包
poi-3.9.jar 操作表格jar包
pi-ooxml-3.12.jar XSSFWorkbook 處理2007版本及以上的excel
呼叫程式碼
List<ExcelUser> list = adminManageServiceI.getUsers(ConstantUtil.ADMIN_ID);
// 生成Excel並使用瀏覽器下載
ExcelTool.$Brower(ExcelUser.class, response).toExcel(list, "使用者資訊");
效果
原始碼正在更新,匯入匯出全部完成在上傳原始碼。