POI通用導(dǎo)出類

一、概述

構(gòu)建通用Excel導(dǎo)出工具類蛉顽。通過泛型將傳入的對象進(jìn)行導(dǎo)出

二、項目實現(xiàn)

  1. pom依賴
  <!-- POI -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>${poi.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>${poi.ooxml.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml-schemas</artifactId>
                <version>${poi.ooxml-schemas.version}</version>
            </dependency>

2.導(dǎo)出方法

    public void export(List<Long> eventIds, HttpServletResponse response) throws Exception {
        if (eventIds.isEmpty()) {
            throw new Exception("需要導(dǎo)出的數(shù)據(jù)ID為空");
        }
        // 查詢數(shù)據(jù)庫記錄
        List<EventExportDO> eventExportDOS = eventRecordDao.queryExportRecords(eventIds);
        // 數(shù)據(jù)庫字段與Excel字段之間需要做轉(zhuǎn)換
        List<EventExportResult> exportResults = excelDataTransfer(eventExportDOS);

        // excel 構(gòu)建
        SXSSFWorkbook workbook = new SXSSFWorkbook();
        SXSSFSheet sheet = workbook.createSheet("事件庫記錄");
        // excel 標(biāo)題樣式
        CellStyle titleCellStyle = workbook.createCellStyle();
        titleCellStyle.setAlignment(HorizontalAlignment.CENTER);
        Font titleFont = workbook.createFont();
        titleFont.setFontName("微軟雅黑");
        titleCellStyle.setFont(titleFont);
        // 構(gòu)建標(biāo)題
        ExcelUtil.createExcelTitle(ExcelCommonConstans.EVENT_RESOURCE_EXPORT_TITLE, sheet, titleCellStyle);

        // excel 正文樣式
        CellStyle dataCellStyle = workbook.createCellStyle();
        Font cellFont = workbook.createFont();
        cellFont.setFontName("宋體");
        dataCellStyle.setFont(cellFont);

        ExcelUtil.createExcelContent(exportResults, sheet, dataCellStyle);
        String exportFileName = ExcelCommonConstans.EVENT_EXPORT_FILE_NAME;
        exportFileName = URLEncoder.encode(exportFileName, "utf-8");
        OutputStream out = response.getOutputStream();
        response.reset();
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + exportFileName);
        response.addHeader("Pargam", "no-cache");
        response.addHeader("Cache-Control", "no-cache");
        workbook.write(out);
        out.flush();
        out.close();
    }

3.導(dǎo)出工具類

public  class ExcelUtil{
       /**
     * 創(chuàng)建Excel頭部信息
     *
     * @param titles    頭部標(biāo)題
     * @param sheet     表格
     * @param cellStyle 單元格
     */
    public static void createExcelTitle(String[] titles, SXSSFSheet sheet, CellStyle cellStyle) {
        SXSSFRow headerRow = sheet.createRow(0);
        for (int i = 0; i < titles.length; i++) {
            SXSSFCell cell = headerRow.createCell(i);
            if (null != cellStyle) {
                cell.setCellStyle(cellStyle);
            }
            cell.setCellValue(titles[i]);
        }
    }

    /**
     * 表格內(nèi)容
     *
     * @param dataDOs   表格內(nèi)容對象
     * @param sheet     表格
     * @param cellStyle 單元格樣式
     * @param <T>       泛型
     * @throws Exception 異常
     */
    public static <T> void createExcelContent(List<T> dataDOs, SXSSFSheet sheet, CellStyle cellStyle) throws Exception {
        for (int rowIndex = 0; rowIndex < dataDOs.size(); rowIndex++) {
            SXSSFRow row = sheet.createRow(rowIndex + 1);
            // 獲取泛型類
            T clazz = dataDOs.get(0);
            // 獲取對象屬性
            Field[] fields = clazz.getClass().getDeclaredFields();
            int cellSize = fields.length;
            for (int cellIndex = 0; cellIndex < cellSize; cellIndex++) {
                SXSSFCell cell = row.createCell(cellIndex);
                fields[cellIndex].setAccessible(true);
                if (null != cellStyle) {
                    cell.setCellStyle(cellStyle);
                }
                cell.setCellValue(fields[cellIndex].get(clazz) == null ? "" : fields[cellIndex].get(clazz).toString());
            }
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市咪橙,隨后出現(xiàn)的幾起案子聂宾,更是在濱河造成了極大的恐慌果善,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件系谐,死亡現(xiàn)場離奇詭異巾陕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)纪他,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進(jìn)店門鄙煤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茶袒,你說我怎么就攤上這事梯刚。” “怎么了薪寓?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵亡资,是天一觀的道長澜共。 經(jīng)常有香客問我,道長锥腻,這世上最難降的妖魔是什么嗦董? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮瘦黑,結(jié)果婚禮上展懈,老公的妹妹穿的比我還像新娘。我一直安慰自己供璧,他們只是感情好存崖,可當(dāng)我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著睡毒,像睡著了一般来惧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上演顾,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天供搀,我揣著相機(jī)與錄音,去河邊找鬼钠至。 笑死葛虐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的棉钧。 我是一名探鬼主播屿脐,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宪卿!你這毒婦竟也來了的诵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤佑钾,失蹤者是張志新(化名)和其女友劉穎西疤,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體休溶,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡代赁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了兽掰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芭碍。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖禾进,靈堂內(nèi)的尸體忽然破棺而出豁跑,到底是詐尸還是另有隱情廉涕,我是刑警寧澤泻云,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布艇拍,位于F島的核電站,受9級特大地震影響宠纯,放射性物質(zhì)發(fā)生泄漏卸夕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一婆瓜、第九天 我趴在偏房一處隱蔽的房頂上張望快集。 院中可真熱鬧,春花似錦廉白、人聲如沸个初。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽院溺。三九已至,卻和暖如春磅轻,著一層夾襖步出監(jiān)牢的瞬間珍逸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工聋溜, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留谆膳,地道東北人。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓撮躁,卻偏偏與公主長得像漱病,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子把曼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容