1. 程式人生 > >通過註解實現通用匯出Excel

通過註解實現通用匯出Excel

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, "使用者資訊");

效果

這裡寫圖片描述

原始碼正在更新,匯入匯出全部完成在上傳原始碼。