【工具篇】java導出excel工具類,多種模式自動配置,絕對值得你收藏

小夥伴們工作中有沒有導出excel需求呀,這裏爲大家獻上一個風騷的導出excel的工具類。具體怎麼風騷,請看下文分析。

項目環境:

  • SpringBoot: 2.2.6.RELEASE
  • JDK: 1.8
  • POI: 4.1.2
  • lombok: 1.16.18

實現功能:

  • 導出簡單的excel
  • 導出多sheet的excel
  • 導出多sheet頁,每個sheet頁多個表格區域
  • 支持主題切換,通過配置ExportExcelBean下的theme實現,主題詳情見 ExportExcelTheme
  • 支持表格的相同標題行合併,通過配置ExportExcelBean下的horizontalMergerColumnHeaders實現
  • 支持表格的相同數據列合併,通過配置ExportExcelBean下的verticalMergerColumnHeaders實現
  • 支持sheet頁數據加密,通過配置ExportExcelBean下的protectSheet實現
  • 支持自動生成數據的序號

什麼,你不信? 先上一波效果圖吧

在這裏插入圖片描述

怎麼樣,跟你說,小楓我從不吹牛皮。該關注的關注,該點讚的點贊哈!!!

什麼?你用不着該功能,都是一個圈子,說不準哪天就用到了,還是先收藏着吧,不佔空間,又不佔內存。

工具類實現

廢話不多說,上代碼

定義參數bean:ExportExcelBean.java

package com.maple.common.excel;

import lombok.Data;
import java.util.List;
import java.util.Map;

/**
 * 導出excel的bean定義
 * @author ZhangFZ
 * @date 2019/12/10 10:55
 **/
@Data
public class ExportExcelBean {

    /**
     * 表格標題名
     * 使用域:table
     */
    private String title;

    /**
     * 表格屬性列名List。如果需要序號,則在該數組第一個位置爲'序號',否則不生成序號
     * 使用域:table
     */
    private List<String> headers;

    /**
     * 數據Map集合中的對應的key,key在List中的位置與headers相對應。如果headers需要序號,則keys=headers.size-1
     * 使用域:table
     */
    private List<String> keys;

    /**
     * 需要顯示的數據集合,集合內的數組必須爲map,對應keys的值。
     * 使用域:table
     */
    private List<Map<String, Object>> dataList;

    /**
     * 水平(橫向)合併的列 (僅用於標題區域,數據不會自動合併)
     * Headers不爲空時,該Headers一樣且連續,將會自動橫向合併
     * 注意:僅用於標題,數據不會自動合併
     * 使用域:table標題區域
     */
    private List<String> horizontalMergerColumnHeaders;

    /**
     * 垂直(豎向)合併的列 (僅用於數據區域,數據不會自動合併)
     * Headers不爲空時,該Headers的數據一樣,將會自動豎向合併
     * 注意:重名列也會開啓合併
     * 使用域:table數據區域
     */
    private List<String> verticalMergerColumnHeaders;

    /**
     * sheet頁名稱,如果一個excel有多個sheet頁,該值不可以重複
     * 使用域:sheet頁
     */
    private String sheetName;

    /**
     * 單sheet頁對應多table
     * 使用域:sheet頁
     */
    private List<ExportExcelBean> list;

    /**
     * 如果爲空,不受保護,任意修改;
     * 如果有值,則受保護,傳入的數據爲密碼
     * 使用域:sheet頁
     */
    private String protectSheet;

    /**
     * 生成excel的主題顏色
     * 使用域:sheet頁
     */
    private ExportExcelTheme theme;
}

定義導出excel的表格主題:ExportExcelTheme.java

package com.maple.common.excel;

import lombok.AllArgsConstructor;
import org.apache.poi.xssf.usermodel.DefaultIndexedColorMap;
import org.apache.poi.xssf.usermodel.XSSFColor;

import java.awt.*;

/**
 * 定義導出excel的樣式主題
 * @author ZhangFZ
 * @date 2020/5/7 18:01
 **/
@AllArgsConstructor
public enum ExportExcelTheme {

    /**
     * 默認主題
     */
    DEFAULT("DEFAULT", new XSSFColor[]{
            new XSSFColor(new Color(165, 165, 165), new DefaultIndexedColorMap()),
            new XSSFColor(new Color(250, 250, 250), new DefaultIndexedColorMap()),
            new XSSFColor(new Color(250, 250, 250), new DefaultIndexedColorMap()),
            new XSSFColor(new Color(250, 250, 250), new DefaultIndexedColorMap())
    }
    ),
    /**
     * 藍色主題
     */
    BLUE("BLUE", new XSSFColor[]{
            new XSSFColor(new Color(91, 155, 213), new DefaultIndexedColorMap()),
            new XSSFColor(new Color(250, 250, 250), new DefaultIndexedColorMap()),
            new XSSFColor(new Color(221, 235, 247), new DefaultIndexedColorMap()),
            new XSSFColor(new Color(189, 215, 238), new DefaultIndexedColorMap())
    }
    ),
    /**
     * 綠色主題
     */
    GREEN("GREEN", new XSSFColor[]{
            new XSSFColor(new Color(112, 173, 71), new DefaultIndexedColorMap()),
            new XSSFColor(new Color(250, 250, 250), new DefaultIndexedColorMap()),
            new XSSFColor(new Color(226, 239, 218), new DefaultIndexedColorMap()),
            new XSSFColor(new Color(198, 224, 180), new DefaultIndexedColorMap())
    }
    ),
    /**
     * 橙色主題
     */
    ORANGE("ORANGE", new XSSFColor[]{
            new XSSFColor(new Color(237, 125, 49), new DefaultIndexedColorMap()),
            new XSSFColor(new Color(250, 250, 250), new DefaultIndexedColorMap()),
            new XSSFColor(new Color(252, 228, 214), new DefaultIndexedColorMap()),
            new XSSFColor(new Color(248, 203, 173), new DefaultIndexedColorMap())
    }
    );

    public String code;

    /**
     * 該數組有且只能有4個值
     * theme[0]: 標題欄背景色
     * theme[1]: 標題欄字體顏色
     * theme[2]: 數據隔行色,淺
     * theme[3]: 數據隔行色,深
     */
    public XSSFColor[] theme;
}

顏色設置可以直接在idea裏面選擇,挺方便的

在這裏插入圖片描述

【重點】導出excel的工具類:ExportExcelUtil.java

package com.maple.common.excel;

import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 導出excel的工具類,目前實現功能如下:
 * 導出簡單的excel
 * 導出多sheet的excel
 * 導出多sheet頁,每個sheet頁多個表格區域
 * 支持主題切換,通過配置ExportExcelBean下的theme實現,主題詳情見 ExportExcelTheme
 * 支持表格的相同標題行合併,通過配置ExportExcelBean下的horizontalMergerColumnHeaders實現
 * 支持表格的相同數據列合併,通過配置ExportExcelBean下的verticalMergerColumnHeaders實現
 * 支持sheet頁數據加密,通過配置ExportExcelBean下的protectSheet實現
 * 支持自動生成數據的序號
 *
 * @author ZhangFZ
 * @date 2019/12/9 17:36
 **/
public class ExportExcelUtil {

    /**
     * 這是一個通用的方法,導出excel2007版,後綴爲.xlsx。
     * 單Sheet頁導出
     * @param out     可以將EXCEL文檔導出到本地文件或者網絡中
     */
    public static void exportExcel(ExportExcelBean excel, OutputStream out) {
        List<ExportExcelBean> list = new ArrayList<>();
        List<ExportExcelBean> exportExcelBeans = new ArrayList<>();
        exportExcelBeans.add(excel);
        ExportExcelBean exportExcelBean = new ExportExcelBean();
        exportExcelBean.setSheetName(excel.getSheetName());
        exportExcelBean.setList(exportExcelBeans);
        list.add(exportExcelBean);
        exportExcelMoreSheetMoreTable(list, out);
    }

    /**
     * 這是一個通用的方法,導出excel2007版,後綴爲.xlsx。
     * 多Sheet頁導出,多sheet頁中對應多table
     * @param out     可以將EXCEL文檔導出到本地文件或者網絡中
     */
    public static void exportExcelMoreSheetMoreTable(List<ExportExcelBean> list, OutputStream out){
        // 聲明一個工作薄
        XSSFWorkbook workbook = new XSSFWorkbook();
        for (ExportExcelBean exportExcelBeanList : list){
            creatMoreTableSheet(exportExcelBeanList, workbook);
        }
        try {
            workbook.write(out);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 創建excel
     */
    private static void creatMoreTableSheet(ExportExcelBean excelBean, XSSFWorkbook workbook){
        List<ExportExcelBean> list = excelBean.getList();
        // 生成一個表格
        XSSFSheet sheet = workbook.createSheet(excelBean.getSheetName());
        // 設置表格默認列寬度爲16個字節
        sheet.setDefaultColumnWidth(16);

        int listCount = 0;
        for (ExportExcelBean excel : list){
            // 設置主題樣式,默認DEFAULT
            ExportExcelTheme exportExcelTheme = excel.getTheme();
            if(exportExcelTheme == null){
                exportExcelTheme = ExportExcelTheme.DEFAULT;
            }
            XSSFColor[] theme = exportExcelTheme.theme;
            XSSFCellStyle titleStyle = createTitleStyle(workbook, theme[0], theme[1]);
            XSSFCellStyle titleStyleOne = createLineStyle(workbook, theme[2]);
            XSSFCellStyle titleStyleTwo = createLineStyle(workbook, theme[3]);
            // 產生表格標題行
            createTitle(excel, sheet, titleStyle, listCount);

            // 產生表格數據
            createExcelData(excel, sheet, titleStyleOne, titleStyleTwo, listCount);

            // 與下一個表格之間空出兩行
            listCount = listCount + excel.getDataList().size() + 2;
        }

        // 設置sheet頁是否加密
        if(StringUtils.isNotBlank(excelBean.getProtectSheet())){
            sheet.protectSheet(excelBean.getProtectSheet());
        }
    }

    /**
     * 設置表格的標題
     */
    private static void createTitle(ExportExcelBean excel, XSSFSheet sheet, XSSFCellStyle titleStyle, int listCount){
        // 用於標誌橫向合併標題
        Integer horizontalNum = null;
        Object horizontalValue = null;
        XSSFRow row = sheet.createRow(listCount);
        for (int i = 0; i < excel.getHeaders().size(); i++) {
            XSSFCell cell = row.createCell(i);
            // 設置標題樣式
            cell.setCellStyle(titleStyle);

            XSSFRichTextString text = new XSSFRichTextString(excel.getHeaders().get(i));
            cell.setCellValue(text);

            // 橫向合併標題
            if(excel.getHorizontalMergerColumnHeaders() != null
                    && excel.getHorizontalMergerColumnHeaders().contains(excel.getHeaders().get(i))){
                if(horizontalNum == null){
                    horizontalNum = i;
                    horizontalValue = excel.getHeaders().get(i);
                }else{
                    // 當前列與前一列不相等,開啓合併,並重新賦值
                    if(!horizontalValue.equals(excel.getHeaders().get(i))){
                        if(i - horizontalNum > 1){
                            CellRangeAddress cra = new CellRangeAddress(listCount, listCount, horizontalNum, i-1);
                            sheet.addMergedRegion(cra);
                        }
                        horizontalNum = i;
                        horizontalValue = excel.getHeaders().get(i);
                        // 當前爲最後一列,開啓合併
                    }else if(i == excel.getHeaders().size() - 1){
                        if(i - horizontalNum >= 1){
                            CellRangeAddress cra = new CellRangeAddress(listCount, listCount, horizontalNum, i);
                            sheet.addMergedRegion(cra);
                        }
                    }
                }
            }else{
                if(horizontalNum != null && i - horizontalNum > 1){
                    CellRangeAddress cra = new CellRangeAddress(listCount, listCount, horizontalNum, i-1);
                    sheet.addMergedRegion(cra);
                }else{
                    horizontalNum = null;
                    horizontalValue = null;
                }
            }
        }
    }

    /**
     * 設置表格的數據內容
     */
    private static void createExcelData(ExportExcelBean excel, XSSFSheet sheet, XSSFCellStyle titleStyleOne, XSSFCellStyle titleStyleTwo, int listCount){
        // 用於標註豎向合併數據
        Integer[] verticalNum = new Integer[excel.getKeys().size()];
        Object[] verticalValue = new Object[excel.getKeys().size()];
        //循環放置表格中的值
        for (int i = 0; i < excel.getDataList().size(); i++) {
            int line = i + listCount + 1;
            XSSFRow row = sheet.createRow(line);
            //產生序號,1,2,3,4,5...的遞增序號,不需要,header去掉‘序號’就可以了
            if("序號".equals(excel.getHeaders().get(0))){
                XSSFCell cell = row.createCell(0);
                // 設置隔行樣式
                if(i % 2 == 0){
                    cell.setCellStyle(titleStyleOne);
                }else{
                    cell.setCellStyle(titleStyleTwo);
                }
                cell.setCellValue(i + 1 + "");
            }

            Map<String, Object> obj = excel.getDataList().get(i);
            for (int j = 0; j < excel.getKeys().size(); j++) {
                if (obj.get(excel.getKeys().get(j)) != null) {
                    XSSFCell cell = row.createCell(j);
                    // 設置隔行樣式
                    if(i % 2 == 0){
                        cell.setCellStyle(titleStyleOne);
                    }else{
                        cell.setCellStyle(titleStyleTwo);
                    }
                    cell.setCellValue(obj.get(excel.getKeys().get(j)) + "");

                    // 縱向合併數據
                    if(excel.getVerticalMergerColumnHeaders() != null
                            && excel.getVerticalMergerColumnHeaders().contains(excel.getHeaders().get(j))){
                        if(verticalNum[j] == null){
                            verticalNum[j] = line;
                            verticalValue[j] = obj.get(excel.getKeys().get(j));
                        }else{
                            // 當前列與前一列不相等,開啓合併,並重新賦值
                            if(verticalValue[j] != null && ! verticalValue[j].equals(obj.get(excel.getKeys().get(j)))){
                                if(line - verticalNum[j] > 1){
                                    CellRangeAddress cra = new CellRangeAddress(verticalNum[j], line-1, j, j);
                                    sheet.addMergedRegion(cra);
                                }
                                verticalNum[j] = line;
                                verticalValue[j] = obj.get(excel.getKeys().get(j));
                                // 當前爲最後一列,開啓合併
                            }else if(i == excel.getDataList().size() - 1){
                                if(line - verticalNum[j] >= 1){
                                    CellRangeAddress cra = new CellRangeAddress(verticalNum[j], line, j, j);
                                    sheet.addMergedRegion(cra);
                                }
                            }
                        }
                    }else{
                        if(verticalNum[j] != null && line - verticalNum[j] > 1){
                            CellRangeAddress cra = new CellRangeAddress(verticalNum[j], line-1, j, j);
                            sheet.addMergedRegion(cra);
                        }else{
                            verticalNum[j] = null;
                            verticalValue[j] = null;
                        }
                    }
                }
            }
        }
    }

    /**
     * 設置標題的樣式
     */
    private static XSSFCellStyle createTitleStyle(XSSFWorkbook workbook, XSSFColor bgColor, XSSFColor fontColor){
        // 生成一個樣式
        XSSFCellStyle style = workbook.createCellStyle();
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        // 水平居中
        style.setAlignment(HorizontalAlignment.CENTER);
        style.setFillForegroundColor(bgColor);
        createBorder(style);
        // 生成一個字體
        Short fontSize = 13;
        XSSFFont font = createFont(workbook, fontColor, fontSize);
        // 把字體應用到當前的樣式
        style.setFont(font);
        return style;
    }

    /**
     * 設置樣式
     */
    private static XSSFCellStyle createLineStyle(XSSFWorkbook workbook, XSSFColor bgColor){
        // 生成一個樣式
        XSSFCellStyle style = workbook.createCellStyle();
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        style.setFillForegroundColor(bgColor);
        // 垂直居中
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        createBorder(style);
        return style;
    }

    /**
     * 設置邊框
     */
    private static void createBorder(XSSFCellStyle style){
        style.setBorderBottom(BorderStyle.THIN);
        style.setBottomBorderColor(IndexedColors.WHITE1.getIndex());
        style.setBorderLeft(BorderStyle.THIN);
        style.setLeftBorderColor(IndexedColors.WHITE1.getIndex());
        style.setBorderRight(BorderStyle.THIN);
        style.setRightBorderColor(IndexedColors.WHITE1.getIndex());
        style.setBorderTop(BorderStyle.THIN);
        style.setTopBorderColor(IndexedColors.WHITE1.getIndex());
    }

    /**
     * 生成字體樣式
     * @return 字體樣式
     */
    private static XSSFFont createFont(XSSFWorkbook workbook, XSSFColor color, short fontSize){
        XSSFFont font = workbook.createFont();
        font.setColor(color);
        font.setFontHeightInPoints(fontSize);
        font.setBold(true);
        return font;
    }

    /**
     * 根據瀏覽器處理導出文件的名字
     * @param exportFileName 文件名字
     */
    public static void updateNameUnicode(HttpServletRequest request, HttpServletResponse response, String exportFileName) throws UnsupportedEncodingException {
        response.setContentType("application/vnd.ms-excel");
        //根據瀏覽器類型處理文件名稱
        String agent = request.getHeader("USER-AGENT").toLowerCase();
        String firefox = "firefox";
        //若是火狐
        if (agent.contains(firefox)) {
            exportFileName = new String(exportFileName.getBytes(StandardCharsets.UTF_8), "ISO8859-1");
        } else {//其他瀏覽器
            exportFileName = java.net.URLEncoder.encode(exportFileName, "UTF-8");
        }
        //保存導出的excel的名稱
        response.setHeader("Content-Disposition", "attachment;filename=" + exportFileName + ".xlsx");
    }
}

以上代碼就實現了上文中所說的導出excel的種種功能

什麼,還不信? emmm~~~,那就寫個測試吧

測試導出excel

編寫測試controller:ExampleController.java

package com.maple.program.controller;

import com.alibaba.fastjson.JSONObject;
import com.maple.common.excel.ExportExcelBean;
import com.maple.common.bean.R;
import com.maple.common.excel.ExportExcelUtil;
import com.maple.program.utils.ExportExcelTitle;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author ZhangFZ
 * @date 2020/5/7 13:52
 **/
@RestController
@Slf4j
public class ExampleController {

    @GetMapping("/exportSimpleExcel")
    @ApiOperation(value = "導出簡單的excel")
    public R exportSimpleExcel(HttpServletRequest request, HttpServletResponse response){

        List<Map<String, Object>> list = new ArrayList<>();
        int num = 10;
        for (int i = 0; i < num; i++) {
            Map<String, Object> map = new HashMap<>(16);
            map.put("code", "數據名稱" + i);
            map.put("name", "數據編碼" + i);
            map.put("brand", "數據品牌" + i);
            list.add(map);
        }

        try {
            String exportFileName = "簡單的excel ";
            ExportExcelUtil.updateNameUnicode(request, response, exportFileName);
            OutputStream out = response.getOutputStream();
            //保存導出的excel的名稱
            ExportExcelBean table = ExportExcelTitle.table2.getValue();
            table.setDataList(list);
            log.info("導出的數據JSON格式:{}", JSONObject.toJSONString(table));
            ExportExcelUtil.exportExcel(table, out);

            out.flush();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @GetMapping("/exportExcelMoreSheetMoreTable")
    @ApiOperation(value = "導出多sheet,單sheet擁有多表格的excel")
    public R exportExcelMoreSheetMoreTable(HttpServletRequest request, HttpServletResponse response){

        List<ExportExcelBean> excelBean = new ArrayList<>();

        // 模擬數據
        List<Map<String, Object>> list = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            Map<String, Object> map = new HashMap<>(16);
            map.put("name", "名稱" + i);
            map.put("name1", "名稱" + i);
            map.put("code", "2020051400" + i);
            list.add(map);
        }
        List<Map<String, Object>> list2 = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Map<String, Object> map = new HashMap<>(16);
            map.put("name", "數據名稱" + i);
            map.put("code", "數據名稱" + 0);
            map.put("brand", "數據品牌" + i);
            list2.add(map);
        }
        try {
            String exportFileName = "測試數據";
            ExportExcelUtil.updateNameUnicode(request, response, exportFileName);
            OutputStream out = response.getOutputStream();

            // 表格1
            ExportExcelBean table1 = ExportExcelTitle.table1.getValue();
            table1.setDataList(list);

            // 表格2
            ExportExcelBean table2 = ExportExcelTitle.table2.getValue();
            table2.setDataList(list2);

            // sheet1
            ExportExcelBean sheet1 = new ExportExcelBean();

            // sheet1 - 多表格
            List<ExportExcelBean> tables1 = new ArrayList<>();
            tables1.add(table1);
            tables1.add(table2);

            sheet1.setSheetName("測試sheet");
            sheet1.setList(tables1);
            // 設置sheet的密碼,僅作用於當前sheet頁
            sheet1.setProtectSheet("123456");
            excelBean.add(sheet1);

            // sheet2
            ExportExcelBean sheet2 = new ExportExcelBean();

            // sheet2 - 多表格
            List<ExportExcelBean> tables2 = new ArrayList<>();
            tables2.add(table2);
            tables2.add(table1);

            sheet2.setSheetName("測試sheet2");
            sheet2.setList(tables2);
            excelBean.add(sheet2);

            log.info("導出的數據JSON格式:{}", JSONObject.toJSONString(excelBean));
            ExportExcelUtil.exportExcelMoreSheetMoreTable(excelBean, out);
            out.flush();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

定義兩個表格吧:ExportExcelTitle.java

爲了表示我的童叟無欺,就定義一個和上圖一樣的吧。(其實我真的懶~~~)

package com.maple.program.utils;

import com.maple.common.excel.ExportExcelBean;
import com.maple.common.excel.ExportExcelTheme;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.ArrayList;
import java.util.List;

/**
 * @author ZhangFZ
 * @date 2020/5/8 15:24
 **/
public class ExportExcelTitle {

    @Getter
    @AllArgsConstructor
    public enum table1 {

        INDEX("序號", "index"),
        CODE("標題單號", "code"),
        NAME("標題名稱",  "name"),
        NAME1("標題名稱",  "name1");

        /**
         * 中文標題
         */
        private String titleCn;

        /**
         * 查出的值對應Map的key
         */
        private String valueKey;

        /**
         * 獲取excel對應的數據
         */
        public static ExportExcelBean getValue() {
            List<String> titleCn = new ArrayList<>();
            List<String> valueKey = new ArrayList<>();
            for (table1 excel : table1.values()) {
                titleCn.add(excel.titleCn);
                valueKey.add(excel.valueKey);
            }
            ExportExcelBean excelBean = new ExportExcelBean();
            excelBean.setHeaders(titleCn);
            excelBean.setTitle("測試導出信息1");
            excelBean.setSheetName("測試sheet");
            excelBean.setKeys(valueKey);
            excelBean.setTheme(ExportExcelTheme.BLUE);
            excelBean.setVerticalMergerColumnHeaders(titleCn);
            excelBean.setHorizontalMergerColumnHeaders(titleCn);
            return excelBean;
        }
    }

    @Getter
    @AllArgsConstructor
    public enum table2 {

        INDEX("序號", "index"),
        CODE("標題名稱", "code"),
        NAME("標題名稱",  "name"),
        BRAND("數據品牌", "brand");

        /**
         * 中文標題
         */
        private String titleCn;

        /**
         * 查出的值對應Map的key
         */
        private String valueKey;

        /**
         * 獲取excel對應的數據
         */
        public static ExportExcelBean getValue() {
            List<String> titleCn = new ArrayList<>();
            List<String> valueKey = new ArrayList<>();
            for (table2 excel : table2.values()) {
                titleCn.add(excel.titleCn);
                valueKey.add(excel.valueKey);
            }
            ExportExcelBean excelBean = new ExportExcelBean();
            excelBean.setHeaders(titleCn);
            excelBean.setTitle("測試導出信息2");
            excelBean.setSheetName("測試sheet2");
            excelBean.setKeys(valueKey);
            excelBean.setTheme(ExportExcelTheme.ORANGE);
            excelBean.setVerticalMergerColumnHeaders(titleCn);
            // excelBean.setHorizontalMergerColumnHeaders(titleCn);
            return excelBean;
        }
    }
}

好嘍,到此就結束了呀。代碼可以直接拿去用了~~~

看一下測試結果再走吧

測試結果

輸入地址:http://127.0.0.1:8888/exportExcelMoreSheetMoreTable

下載成功後,引入眼瞼的是以下這圖:
在這裏插入圖片描述

不是說可以生成多sheet頁嗎?單sheet頁多table我們見識過了,那就讓我們來看一看sheet2
在這裏插入圖片描述

最後,再多來幾種主題吧。主題通過配置ExportExcelBean下的theme實現。什麼,沒有你喜歡的顏色?青青草原淡綠色都配上了,居然還沒有你喜歡的。算了算了,你自己在 ExportExcelTheme 下面添加自己喜歡的色彩吧
在這裏插入圖片描述

好了,到這裏真的該結束了,如果你還需要其他功能,可以基於現有功能添加,當然也可以貢獻給我們,讓大家一起白嫖。有什麼問題,可以留言或者聯繫我喲~~~

本文到此結束了,後續文章會陸續更新,文檔會同步在CSDN和GitHub保持同步更新。

源碼已上傳至github:https://github.com/hack-feng/maple-common.git/

點個關注再走唄~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章