POI導出Excel工具類

package com.jesse.commons;

import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;

import java.lang.reflect.Field;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;

/**
 * @author wpx
 * @date: 2019/10/21
 */
public class ExportExcelUtil {

    /**
     * 固定列寬
     */
    private static final Integer WIDTH = 5120;

    /**
     * 導出excel
     * @param title  sheet標題
     * @param rowNames 第一行
     * @param dataList 數據列表
     * @param <T> 封裝數據
     * @return
     * @throws Exception
     */
    public static <T> XSSFWorkbook export(String title, LinkedHashMap<String, String> rowNames, List<T> dataList) throws Exception{
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet(title);
        //產生標題行
        XSSFRow rowm = sheet.createRow(0);
        XSSFCell cellTitle = rowm.createCell(0);

        //sheet樣式定義【】
        XSSFCellStyle columnTopStyle = getColumnTopStyle(workbook);
        sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (rowNames.size() - 1)));
        cellTitle.setCellStyle(columnTopStyle);
        cellTitle.setCellValue(title);

        // 定義所需列數
        int columnNum = rowNames.size();
        XSSFRow rowRowName = sheet.createRow(2);

        // 將列頭設置到sheet的單元格中
        Set<String> keySet = rowNames.keySet();
        Iterator<String> iterator = keySet.iterator();
        for (int n = 0; n < columnNum; n++) {
            XSSFCell cell = rowRowName.createCell(n);
            sheet.setColumnWidth(n, WIDTH);
            XSSFRichTextString text = new XSSFRichTextString(rowNames.get(iterator.next()));
            cell.setCellValue(text);
            cell.setCellStyle(columnTopStyle);
        }

        // 將查詢到的數據設置到sheet對應的單元格中
        XSSFCellStyle style = getStyle(workbook);
        for (int i = 0; i < dataList.size(); i++) {
            T t = dataList.get(i);
            XSSFRow row = sheet.createRow(i + 3);
            Class<?> aClass = t.getClass();
            int cellCount = 0;
            for (String s : keySet) {
                XSSFCell cell = row.createCell(cellCount);
                Field field = aClass.getDeclaredField(s);
                field.setAccessible(true);
                cell.setCellValue(field.get(t) == null ? "" : field.get(t).toString());
                cell.setCellStyle(style);
                cellCount++;
            }
        }
        return workbook;
    }

    /**
     * 列頭單元格樣式
     * @param workbook
     * @return
     */
    public static XSSFCellStyle getColumnTopStyle(XSSFWorkbook workbook) {
        // 設置字體
        XSSFFont font = workbook.createFont();

        // 設置字體大小
        font.setFontHeightInPoints((short) 11);
        // 字體加粗
        font.setBold(true);
        // 設置字體名字
        font.setFontName("Courier New");
        // 設置樣式
        XSSFCellStyle style = workbook.createCellStyle();
        // 在樣式中應用設置的字體
        style.setFont(font);
        // 設置自動換行
        style.setWrapText(true);
        // 設置水平對齊的樣式爲居中對齊;
        style.setAlignment(HorizontalAlignment.CENTER);
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        return style;

    }

    /**
     * 其餘列樣式
     * @param workbook
     * @return
     */
    public static XSSFCellStyle getStyle(XSSFWorkbook workbook) {
        // 設置字體
        XSSFFont font = workbook.createFont();
        // 設置字體大小
        font.setFontHeightInPoints((short) 10);
        // 字體加粗
        font.setBold(true);
        // 設置字體名字
        font.setFontName("Courier New");
        // 設置樣式;
        XSSFCellStyle style = workbook.createCellStyle();
        // 在樣式用應用設置的字體;
        style.setFont(font);
        // 設置自動換行;
        style.setWrapText(true);
        // 設置水平對齊的樣式爲居中對齊;
        style.setAlignment(HorizontalAlignment.CENTER);
        // 設置垂直對齊的樣式爲居中對齊;
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        return style;
    }



}

實體類:

package com.jesse.dao.entity;


/**
 * @author wpx
 * @date: 2019/10/21
 */
public class ResubmitData {
    public ResubmitData(String enName, String name, String mobile, String classCode, String courseType, String resubmitPerson, String classTeacherName, String appealData, String reviewDate) {
        this.enName = enName;
        this.name = name;
        this.mobile = mobile;
        this.classCode = classCode;
        this.courseType = courseType;
        this.resubmitPerson = resubmitPerson;
        this.classTeacherName = classTeacherName;
        this.appealData = appealData;
        this.reviewDate = reviewDate;
    }

    /**
     * 學員英文名
     */
     private String enName;
    /**
     * 學員中文名
     */
     private String name;
    /**
     * 學員手機號
     */
     private String mobile;
    /**
     * 班級編號
     */
     private String classCode;
    /**
     * 課程類型
     */
     private String courseType;
    /**
     * 續報關係人
     */
     private String resubmitPerson;
    /**
     * 班級班主任
     */
     private String classTeacherName;
    /**
     * 是否爲申訴數據
     */
     private String appealData;
    /**
     * 審覈時間
     */
     private String reviewDate;

    public String getEnName() {
        return enName;
    }

    public void setEnName(String enName) {
        this.enName = enName;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getClassCode() {
        return classCode;
    }

    public void setClassCode(String classCode) {
        this.classCode = classCode;
    }

    public String getCourseType() {
        return courseType;
    }

    public void setCourseType(String courseType) {
        this.courseType = courseType;
    }

    public String getResubmitPerson() {
        return resubmitPerson;
    }

    public void setResubmitPerson(String resubmitPerson) {
        this.resubmitPerson = resubmitPerson;
    }

    public String getClassTeacherName() {
        return classTeacherName;
    }

    public void setClassTeacherName(String classTeacherName) {
        this.classTeacherName = classTeacherName;
    }

    public String getAppealData() {
        return appealData;
    }

    public void setAppealData(String appealData) {
        this.appealData = appealData;
    }

    public String getReviewDate() {
        return reviewDate;
    }

    public void setReviewDate(String reviewDate) {
        this.reviewDate = reviewDate;
    }

    @Override
    public String toString() {
        return super.toString();
    }
}

測試類:

public class PoiTest {
@Test
public void test3() {
    String title = "續報數據列表";
    //首行
    LinkedHashMap<String, String> rowNames = new LinkedHashMap<>();
    rowNames.put("enName", "學員英文名");
    rowNames.put("name", "學員中文名");
    rowNames.put("mobile", "學員手機號");
    rowNames.put("classCode", "班級編號");
    rowNames.put("courseType", "課程類型");
    rowNames.put("resubmitPerson", "續報關係人");
    rowNames.put("classTeacherName", "班級班主任");
    rowNames.put("appealData", "是否爲申訴數據");
    rowNames.put("reviewDate", "審覈時間");
    List<ResubmitData> resubmitDatas = new ArrayList<>();
    for (int i = 0 ; i < 5; i++) {
        String value = i + "";
        ResubmitData resubmitData = new ResubmitData("123456789258656255165456456", value, value, value, value, value, value, value, null);
        resubmitDatas.add(resubmitData);
    }

    try {
        FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\wangp\\Desktop\\test.xlsx");
        XSSFWorkbook export = ExportExcelUtil.export(title, rowNames, resubmitDatas);
        export.write(fileOutputStream);
    } catch (Exception e) {
        e.printStackTrace();
    }

}

}

結果爲:

 

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