java生成excel文件--利用easypoi


一、Maven依賴

<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.2.0</version>
</dependency>


二、編輯導出數據對象類,使用注解的形式進行標記各個字段類型,name對應excel表格的表頭,orderNum每一列排序,從左到右,width代表每一列的寬度,具體代碼如下(省略Get和Set方法)
 
        
public class AssetsStatistics {
    @Excel(name = "序號", orderNum = "0",width = 10)
    private String id;

    @Excel(name = "所屬公司", orderNum = "1",width = 20)
    private String provincename;

    @Excel(name = "公司編碼", orderNum = "2",width = 10)
    private String provincecode;

    @Excel(name = "ip", orderNum = "3",width = 15)
    private String ip;

    @Excel(name = "資產URL", orderNum = "4",width = 20)
    private String url;

}

 三、設置excel自定義樣式PoiExportStyle

public class PoiExportStyle extends ExcelExportStylerDefaultImpl implements IExcelExportStyler {

	public PoiExportStyle(Workbook workbook) {
		super(workbook);
	}

	@Override
	public CellStyle getHeaderStyle(short headerColor) {
        CellStyle titleStyle = workbook.createCellStyle();
        Font font = workbook.createFont();
        font.setFontHeightInPoints((short) 20);
        titleStyle.setFont(font);
        titleStyle.setBorderLeft((short) 1); // 左邊框
        titleStyle.setBorderRight((short) 1); // 右邊框
        titleStyle.setBorderBottom((short) 1);
        titleStyle.setBorderTop((short) 1);
        titleStyle.setFillForegroundColor((short) 41); // 填充的背景顏色
        titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND.getCode());
        titleStyle.setAlignment(CellStyle.ALIGN_CENTER);
        titleStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
        return titleStyle;

	}

	@Override
    public CellStyle stringNoneStyle(Workbook workbook, boolean isWarp) {
        CellStyle style = workbook.createCellStyle();
        style.setBorderLeft((short) 1); // 左邊框
        style.setBorderRight((short) 1); // 右邊框
        style.setBorderBottom((short) 1);
        style.setBorderTop((short) 1);
        style.setAlignment(CellStyle.ALIGN_CENTER);
        style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
        style.setDataFormat(STRING_FORMAT);
        if (isWarp) {
            style.setWrapText(true);
        }
        return style;
    }

    @Override
    public CellStyle getTitleStyle(short color) {
        CellStyle titleStyle = workbook.createCellStyle();
        titleStyle.setBorderLeft((short) 1); // 左邊框
        titleStyle.setBorderRight((short) 1); // 右邊框
        titleStyle.setBorderBottom((short) 1);
        titleStyle.setBorderTop((short) 1);
        titleStyle.setFillForegroundColor((short) 41); // 填充的背景顏色
        titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND.getCode());
        titleStyle.setAlignment(CellStyle.ALIGN_CENTER);
        titleStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
        titleStyle.setWrapText(true);
        return titleStyle;
    }

    @Override
    public CellStyle stringSeptailStyle(Workbook workbook, boolean isWarp) {
        return isWarp ? stringNoneWrapStyle : stringNoneStyle;
    }

 四、引用excel自定義樣式封裝成工具類

public class PoiUtil {
          public static void creatExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName,
								   String directory) throws IOException {
		ExportParams exportParams = new ExportParams(title, sheetName);
		exportParams.setHeaderHeight((double)100);
		exportParams.setStyle(PoiExportStyle.class);
		Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);
		if (workbook != null);{
			//將Excel文件放到本地路徑下
		String directory = "D:/data"; // 本地目錄
			FileOutputStream os = new FileOutputStream(directory+fileName);
			workbook.write(os);
			os.close();
		}
	}
}

 

 五、list數據生成excel文件---單個sheet和多個sheet

//單個sheet  
public String creatAssetsQuarterExcel() throws Exception {
        String title = "2020年第1季度資產清單";
        List<AssetsStatistics> list = secAssetsService.selectListByTime();//從數據庫查詢數據
        if(!CollectionUtils.isEmpty(list)) {
            Integer no = 1;
            for (AssetsStatistics v : list) {
                v.setId(String.valueOf(no++));
            }
        }
        PoiUtil.creatExcel(list, title, title, AssetsStatistics.class, title+".xls", excelReport);
        return title+".xls";
    }

 

//多sheet
public String creatMonthExcelByAssets() throws Exception {
        Workbook workBook = null;
        try {
//            主機資產表
            List<AssetsStatistics> hostlist = countHostAssets();
            Map<String, Object> hostExportMap = getSheetMap("主機資產表",hostlist);
//           數據庫資產表
            List<AssetsStatistics> dblist = countDbAssets();
            Map<String, Object> dbExportMap = getSheetMap("數據庫資產表",dblist);

            // 將sheet1、sheet2使用得map進行包裝
            List<Map<String, Object>> sheetsList = new ArrayList<>();
            sheetsList.add(hostExportMap);
            sheetsList.add(dbExportMap);
            workBook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF);
//            String fileName = URLEncoder.encode("資產表.xls", "UTF-8");
            String fileName ="資產表.xls";
            if (workBook != null){
                //將Excel文件放到本地路徑下
                FileOutputStream os = new FileOutputStream(excelReport+fileName);
                workBook.write(os);
                os.close();
            }
            return fileName;

        }catch (Exception e){
            e.printStackTrace();
            return e.getMessage();
        }finally {
            if(workBook != null) {
                try {
                    workBook.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    return e.getMessage();
                }
            }
        }

    }

    /**
     * 設置excel 中 sheet 的參數
     * @param sheetName sheet名稱
     * @param list sheet 數據列表
     * @return
     */
    private Map<String, Object> getSheetMap(String sheetName,List<AssetsProblemStatistics> list) {
        // 創建參數對象(用來設定excel得sheet得內容等信息)
        ExportParams exportParams = new ExportParams();
        exportParams.setHeaderHeight((double)100);
        exportParams.setStyle(PoiExportStyle.class);
        // 設置sheet得名稱
        exportParams.setSheetName(sheetName);
        // 創建sheet1使用得map
        Map<String, Object> sheetExportMap = new HashMap<>();
        // title的參數為ExportParams類型,目前僅僅在ExportParams中設置了sheetName
        sheetExportMap.put("title", exportParams);
        // 模版導出對應得實體類型
        sheetExportMap.put("entity", AssetsProblemStatistics.class);
        // sheet中要填充得數據
        sheetExportMap.put("data", list);

        return sheetExportMap;
    }

 六、結果展示

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM