最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java easyPOI實現(xiàn)導(dǎo)出一對多數(shù)據(jù)

 更新時間:2023年12月06日 08:49:35   作者:Xiao5xiao122  
這篇文章主要為大家詳細(xì)介紹了java如何利用easyPOI實現(xiàn)導(dǎo)出一對多數(shù)據(jù),并且可以設(shè)置邊框、字體和字體大小,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

java easyPOI導(dǎo)出一對多數(shù)據(jù),設(shè)置邊框,字體,字體大小

需求總是千奇百怪,解決的方式也可以是多種多樣。

今天碰到導(dǎo)出excel是一對多結(jié)構(gòu)的,以往導(dǎo)出的數(shù)據(jù)都是一條一條的,所以采用的是比較方便簡單的方法easyExcel,今天猛然碰到一對多導(dǎo)出雖然用easyExcel也可以,但是相對比較麻煩,沒有easyPOI快捷,之前有自己寫過導(dǎo)出excel一個表格一個表格畫,但是太麻煩。今天正好需求不急,就慢慢研究用easypoi導(dǎo)出,寫出通用方法,以后遇到類似的就好辦多了,直接調(diào)方法。廢話不多說,先上效果圖:

首先是實體中設(shè)置:

public class YjwzStockInVO extends TYjwzStockIn implements Serializable {
	//注意:needMerge = true 必加,不然合并的單元格,邊框不會合并,需要導(dǎo)出的實體加@Excel注解,不需要導(dǎo)出的字段加@ExcelIgnore注解排除
    @Excel(needMerge = true,name = "狀態(tài)名稱")
    @ApiModelProperty(value = "狀態(tài)名稱")
    private String ztmc;

    @Excel(needMerge = true,name = "一級品類")
    @ApiModelProperty(value = "一級物資名稱")
    private String wzOnemc;

    @Excel(needMerge = true,name = "二級品類")
    @ApiModelProperty(value = "二級物資名稱")
    private String wzTwomc;

    @Excel(needMerge = true,name = "三級品類")
    @ApiModelProperty(value = "三級物資名稱")
    private String wzThreemc;

    @Excel(needMerge = true,name = "四級品類")
    @ApiModelProperty(value = "四級物資名稱")
    private String wzRourmc;

    @Excel(needMerge = true,name = "數(shù)據(jù)來源")
    @ApiModelProperty(value = "數(shù)據(jù)來源:1:市應(yīng)急平臺,2:人工新增")
    @DataBindDict(sourceField = "#sjly", sourceFieldCombination = "sjly")
    private String sjlymc;

    @ExcelCollection(name = "應(yīng)急物資明細(xì)")
    @ApiModelProperty(value = "應(yīng)急物資詳情")
    private List<YjwzStockInDtlVO> dtlList;
}

子類:

public class YjwzStockInDtlVO extends TYjwzStockInDtl implements Serializable {

    @Excel(name = "單據(jù)類型")
    @ApiModelProperty(value = "單據(jù)類型:1:采購入庫,2:調(diào)撥入庫")
    @DataBindDict(sourceField = "#djlx", sourceFieldCombination = "lx")
    private String djlxmc;

    @Excel(name = "入庫質(zhì)檢")
    @ApiModelProperty(value = "入庫質(zhì)檢:1:已檢驗入庫,2:未檢驗入庫")
    @DataBindDict(sourceField = "#rkzj", sourceFieldCombination = "zjlx")
    private String rkzjmc;

    @Excel(name = "質(zhì)檢結(jié)果")
    @ApiModelProperty(value = "質(zhì)檢結(jié)果:1:合格,2:不合格")
    @DataBindDict(sourceField = "#zjjg", sourceFieldCombination = "zjjg")
    private String zjjgmc;

    @Excel(name = "存儲期單位")
    @ApiModelProperty(value = "存儲期單位:1:年,2:月")
    @DataBindDict(sourceField = "#ccqdw", sourceFieldCombination = "ccqdw")
    private String ccqdwmc;
}

然后是工具類準(zhǔn)備:

1)首先是設(shè)置字體樣式的工具類:

package com.sydata.zt.common.excel;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.afterturn.easypoi.excel.entity.params.ExcelForEachParams;
import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler;
import org.apache.poi.ss.usermodel.*;
/**
 * @Author xx
 * @Date 2023/12/5 17:37
 * @Description: poi導(dǎo)出excel樣式設(shè)置工具
 * @Version 1.0
 */
public class ExcelStyleUtil implements IExcelExportStyler {
    private static final short STRING_FORMAT = (short) BuiltinFormats.getBuiltinFormat("TEXT");
    private static final short FONT_SIZE_TEN = 9;
    private static final short FONT_SIZE_ELEVEN = 10;
    private static final short FONT_SIZE_TWELVE = 10;
    /**
     * 大標(biāo)題樣式
     */
    private CellStyle headerStyle;
    /**
     * 每列標(biāo)題樣式
     */
    private CellStyle titleStyle;
    /**
     * 數(shù)據(jù)行樣式
     */
    private CellStyle styles;
    public ExcelStyleUtil(Workbook workbook){
        this.init(workbook);
    }
    /**
     * 初始化樣式
     * @param workbook
     */
    private void init(Workbook workbook) {
        this.headerStyle = initHeaderStyle(workbook);
        this.titleStyle = initTitleStyle(workbook);
        this.styles = initStyles(workbook);
    }
    /**
     * 初始化大標(biāo)題樣式
     *
     * @param workbook
     * @return
     */
    private CellStyle initHeaderStyle(Workbook workbook) {
        CellStyle style = getBaseCellStyle(workbook);
        style.setFont(getFont(workbook,FONT_SIZE_ELEVEN,Boolean.TRUE));
        return style;
    }
    /**
     * 初始化小標(biāo)題樣式
     * @param workbook
     * @return
     */
    private CellStyle initTitleStyle(Workbook workbook) {
        CellStyle style = getBaseCellStyle(workbook);
        style.setFont(getFont(workbook,FONT_SIZE_ELEVEN,Boolean.TRUE));
        return style;
    }
    /**
     * 數(shù)據(jù)行樣式
     * @param workbook
     * @return
     */
    private CellStyle initStyles(Workbook workbook) {
        CellStyle style = getBaseCellStyle(workbook);
        style.setDataFormat(STRING_FORMAT);
        return style;
    }
    /**
     * 大標(biāo)題樣式
     * @param color
     * @return
     */
    @Override
    public CellStyle getHeaderStyle(short color) {
        return headerStyle;
    }
    /**
     * 每列標(biāo)題樣式
     * @param color
     * @return
     */
    @Override
    public CellStyle getTitleStyle(short color) {
        return titleStyle;
    }
    /**
     * 數(shù)據(jù)行樣式
     * @param b
     * @param excelExportEntity
     * @return
     */
    @Override
    public CellStyle getStyles(boolean b, ExcelExportEntity excelExportEntity) {
        return styles;
    }
    /**
     * 獲取行樣式方法
     * @param cell
     * @param i
     * @param entity
     * @param o
     * @param o1
     * @return
     */
    @Override
    public CellStyle getStyles(Cell cell, int i, ExcelExportEntity entity, Object o, Object o1) {
        return getStyles(true,entity);
    }
    @Override
    public CellStyle getTemplateStyles(boolean b, ExcelForEachParams excelForEachParams) {
        return null;
    }
    /**
     * 基礎(chǔ)樣式
     * @param workbook
     * @return
     */
    private CellStyle getBaseCellStyle(Workbook workbook) {
        CellStyle style = workbook.createCellStyle();
        //下邊框
        style.setBorderBottom(BorderStyle.THIN);
        //左邊框
        style.setBorderLeft(BorderStyle.THIN);
        //右邊框
        style.setBorderRight(BorderStyle.THIN);
        //上邊框
        style.setBorderTop(BorderStyle.THIN);
        //水平居中
        style.setAlignment(HorizontalAlignment.CENTER);
        //上下居中
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        //設(shè)置自動換行
        style.setWrapText(Boolean.TRUE);
        return style;
    }
    /**
     * 字體樣式
     * @param workbook
     * @param size
     * @param isBold
     * @return
     */
    private Font getFont(Workbook workbook,short size,boolean isBold){
        Font font = workbook.createFont();
        //字體大小
        font.setFontHeightInPoints(size);
        //字體是否加粗
        font.setBold(isBold);
        //設(shè)置字體
//        font.setFontName("");
        return font;
    }
}

2)然后導(dǎo)出excel工具類

package com.sydata.zt.common.excel;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import com.alibaba.excel.util.ListUtils;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.T;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.util.CollectionUtils;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.net.URLEncoder;
import java.util.*;
/**
 * @author hm
 * @date 2023/3/14 17:33
 */
public class EasyExcelGeneralUtil {
    /**
     * 設(shè)置response編碼
     */
    public static void setResponseContentType(HttpServletResponse response, String fileName) throws UnsupportedEncodingException {
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8") + ".xlsx");
        response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
    }
    public static void exportExcelByEasyPoi(HttpServletResponse response, String fileName, List<Object> vos, Class<?> classType) throws IOException {
        ExportParams exportParams = new ExportParams();
        // 設(shè)置sheet得名稱
        exportParams.setSheetName(fileName);
        //設(shè)置邊框,字體,字體大小
        exportParams.setStyle(ExcelStyleUtil.class);
        Map<String, Object> map = new HashMap<>();
        // title的參數(shù)為ExportParams類型,目前僅僅在ExportParams中設(shè)置了sheetName
        map.put("title", exportParams);
        // 模版導(dǎo)出對應(yīng)得實體類型的class文件
        map.put("entity", classType);
        // sheet中要填充得數(shù)據(jù)
        map.put("data", vos);
        List<Map<String, Object>> sheetsList = new ArrayList<>();
        sheetsList.add(map);
        //創(chuàng)建excel文件的方法
        Workbook workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF);
        //通過response輸出流直接輸入給客戶端
        ServletOutputStream outputStream = response.getOutputStream();
        workbook.write(outputStream);
        outputStream.flush();
        outputStream.close();
    }
}

準(zhǔn)備工作已完成,接下來就可以愉快的導(dǎo)出了:

@SneakyThrows
    @PostMapping("/export")
    @ApiOperation(value = "導(dǎo)出")
    public void export(HttpServletRequest request, HttpServletResponse response,@RequestBody YjwzStockInDTO yjwzStockInDTO){
        request.getSession();
        String fileName = "文件名稱";
        EasyExcelGeneralUtil.setResponseContentType(response,fileName);
		//設(shè)置的分頁最多能導(dǎo)出10000條數(shù)據(jù)
        yjwzStockInDTO.setPageNum(1);
        yjwzStockInDTO.setPageSize(10000);
		//查庫得到需要導(dǎo)出的數(shù)據(jù)
        List<Object> vos = (List<Object>) stockInService.page(yjwzStockInDTO).getRows();
        EasyExcelGeneralUtil.exportExcelByEasyPoi(response,fileName,vos,YjwzStockInVO.class);
    }

好了,完整的過程就是這樣了,直接掉接口導(dǎo)出就可以了。

以上就是java easyPOI實現(xiàn)導(dǎo)出一對多數(shù)據(jù)的詳細(xì)內(nèi)容,更多關(guān)于java easyPOI導(dǎo)出數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringCloud微服務(wù)之Hystrix組件實現(xiàn)服務(wù)熔斷的方法

    SpringCloud微服務(wù)之Hystrix組件實現(xiàn)服務(wù)熔斷的方法

    微服務(wù)架構(gòu)特點就是多服務(wù),多數(shù)據(jù)源,支撐系統(tǒng)應(yīng)用。這樣導(dǎo)致微服務(wù)之間存在依賴關(guān)系。這篇文章主要介紹了SpringCloud微服務(wù)之Hystrix組件實現(xiàn)服務(wù)熔斷的方法,需要的朋友可以參考下
    2019-08-08
  • spring boot如何指定啟動端口

    spring boot如何指定啟動端口

    這篇文章主要介紹了spring boot如何指定啟動端口,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • MyBatis框架之mybatis逆向工程自動生成代碼

    MyBatis框架之mybatis逆向工程自動生成代碼

    Mybatis屬于半自動ORM,在使用這個框架中,工作量最大的就是書寫Mapping的映射文件,由于手動書寫很容易出錯,我們可以利用Mybatis-Generator來幫我們自動生成文件。本文主要給大家介紹mybatis逆向工程自動生成代碼,感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04
  • Maven多模塊項目調(diào)試與問題排查的完整指南

    Maven多模塊項目調(diào)試與問題排查的完整指南

    在現(xiàn)代企業(yè)級Java開發(fā)中,Maven多模塊項目因其清晰的代碼組織,依賴管理和高效的構(gòu)建流程已成為主流架構(gòu)模式,本文深入剖析多模塊項目的四大核心痛點解決方案,感興趣的小伙伴可以跟隨小編一起了解下
    2025-06-06
  • springboot 如何取消starter的自動注入

    springboot 如何取消starter的自動注入

    這篇文章主要介紹了springboot 如何取消starter的自動注入操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java項目日志脫敏解決方案

    Java項目日志脫敏解決方案

    為了保護(hù)客戶的敏感信息,我們提出了四種日志脫敏處理方案,需要根據(jù)實際項目需求和情況進(jìn)行選擇,新項目或重構(gòu)的項目,對于項目標(biāo)準(zhǔn)化要求較高的,推薦使用方案四,感興趣的朋友參考下本文
    2024-10-10
  • JAVA如何使用Math類操作數(shù)據(jù)

    JAVA如何使用Math類操作數(shù)據(jù)

    這篇文章主要介紹了JAVA如何使用Math類操作數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot如何實現(xiàn)緩存預(yù)熱

    SpringBoot如何實現(xiàn)緩存預(yù)熱

    緩存預(yù)熱是指在 Spring Boot 項目啟動時,預(yù)先將數(shù)據(jù)加載到緩存系統(tǒng)(如 Redis)中的一種機(jī)制,本文主要介紹了SpringBoot如何實現(xiàn)緩存預(yù)熱,感興趣的可以了解下
    2024-12-12
  • Spring boot配置多數(shù)據(jù)源代碼實例

    Spring boot配置多數(shù)據(jù)源代碼實例

    這篇文章主要介紹了Spring boot配置多數(shù)據(jù)源代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • java/word+fusionchart生成圖表深入分析

    java/word+fusionchart生成圖表深入分析

    本文將以java/word+fusionchart生成圖表問題深入解析,有興趣的朋友可以參考下
    2012-11-11

最新評論

曲沃县| 南投县| 巨野县| 彭山县| 昌乐县| 平谷区| 太湖县| 清远市| 徐水县| 霍城县| 桂林市| 佛坪县| 和平县| 松桃| 大余县| 溧阳市| 普格县| 焦作市| 江达县| 佛冈县| 新和县| 屏东市| 东宁县| 墨竹工卡县| 彭水| 台中市| 中卫市| 天柱县| 郎溪县| 哈巴河县| 偏关县| 若羌县| 香格里拉县| 崇左市| 磐安县| 建宁县| 津南区| 奉新县| 石棉县| 台中市| 温州市|