国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【JAVA】easyexcel 導(dǎo)出excel文件帶多個(gè)圖片

這篇具有很好參考價(jià)值的文章主要介紹了【JAVA】easyexcel 導(dǎo)出excel文件帶多個(gè)圖片。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

最終效果

easyexcel 導(dǎo)出圖片,【JAVA】,java,excel,easyexcel,導(dǎo)出圖片列,圖片導(dǎo)出excel

?pom版本

 <developer>    
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.5</version>
 </developer>

實(shí)現(xiàn)代碼

package com.alibaba.easyexcel.test.demo.write;

import com.alibaba.easyexcel.test.util.TestFileUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.metadata.data.ClientAnchorData;
import com.alibaba.excel.metadata.data.ImageData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.util.FileUtils;
import com.alibaba.excel.write.style.column.AutoColumnWidthStyleStrategy;
import org.apache.commons.collections4.CollectionUtils;
import org.junit.Test;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;

/**
 * 圖片導(dǎo)出
 *
 * @author dqh
 * @date 2022/11/3 15:20
 */
public class ImageExportTest {

    /**
     * 圖片導(dǎo)出
     * <p>
     * 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link ImageDemoData}
     * <p>
     * 2. 直接寫即可
     */
    @Test
    public void imageWrite() throws Exception {
        //文件最后生成的路徑
        String fileName = TestFileUtil.getPath() + "imageWrite.xlsx";
        System.out.println(fileName);

        //測(cè)試用的圖片路徑
        String imagePath = TestFileUtil.getPath() + "converter" + File.separator + "img.jpg";
        String imagePath2 = TestFileUtil.getPath() + "converter" + File.separator + "img2.jpeg";

        //數(shù)據(jù)列表Demo
        List<ImageDemoData> demoDataList = new ArrayList<>();

        //圖片路徑
        List<String> path1 = new ArrayList<>();
        path1.add(imagePath);

        List<String> path2 = new ArrayList<>();
        path2.add(imagePath);
        path2.add(imagePath2);

        List<String> path3 = new ArrayList<>();
        path3.add(imagePath);
        path3.add(imagePath);
        path3.add(imagePath2);

        List<String> path4 = new ArrayList<>();
        path4.add(imagePath);
        path4.add(imagePath2);
        path4.add(imagePath);
        path4.add(imagePath2);

        demoDataList.add(new ImageDemoData("王離", path1));
        demoDataList.add(new ImageDemoData("楊開(kāi)", path2));
        demoDataList.add(new ImageDemoData("歐陽(yáng)微微", path3));
        demoDataList.add(new ImageDemoData("上官婉兒", path4));
        genImageExcel(demoDataList, fileName);

    }

    /**
     * 生成有圖片的excel
     *
     * @param demoDataList 數(shù)據(jù)列表
     * @param fileName     生成文件路徑
     */
    private void genImageExcel(List<ImageDemoData> demoDataList, String fileName) {
        if (CollectionUtils.isEmpty(demoDataList)) {
            return;
        }

        //圖片列最大圖片數(shù)
        AtomicReference<Integer> maxImageSize = new AtomicReference<>(0);
        demoDataList.forEach(item -> {
            if (CollectionUtils.isNotEmpty(item.getImagePathList()) && item.getImagePathList().size() > maxImageSize.get()) {
                maxImageSize.set(item.getImagePathList().size());
            }
        });

        //設(shè)置列長(zhǎng)度所用類
        AutoColumnWidthStyleStrategy longWidth = new AutoColumnWidthStyleStrategy();

        demoDataList.forEach(item -> {
            WriteCellData<Void> writeCellData = new WriteCellData<>();
            if (CollectionUtils.isNotEmpty(item.getImagePathList())) {
                //每張圖片間距
                Integer splitWidth = 2;
                //每張圖片的長(zhǎng)度
                Integer imageWidth = 80;
                //圖片列的最大長(zhǎng)度
                Integer sumWidth = maxImageSize.get() * (imageWidth + splitWidth);

                List<ImageData> imageDataList = new ArrayList<>();
                List<String> imagePathList = item.getImagePathList();
                for (int i = 1; i <= imagePathList.size(); i++) {
                    String path = imagePathList.get(i - 1);
                    Integer left = imageWidth * (i - 1) + i * splitWidth;
                    Integer right = sumWidth - imageWidth - left;
                    ImageData imageData = new ImageData();
                    try {
                        imageData.setImage(FileUtils.readFileToByteArray(new File(path)));
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    imageData.setImageType(ImageData.ImageType.PICTURE_TYPE_PNG);
                    //距離單元格頂部距離
                    imageData.setTop(1);
                    //距離單元格底部距離
                    imageData.setBottom(1);
                    //距離單元格左邊距離
                    imageData.setLeft(left);
                    //距離單元格右邊距離
                    imageData.setRight(right);
                    imageData.setAnchorType(ClientAnchorData.AnchorType.DONT_MOVE_DO_RESIZE);
                    imageDataList.add(imageData);
                }
                writeCellData.setImageDataList(imageDataList);

                Map<String, Integer> zdyColumnWidth = new HashMap<>();
                //圖片列名稱,對(duì)應(yīng)導(dǎo)出對(duì)象的列名稱,圖片列長(zhǎng)度
                zdyColumnWidth.put("上傳圖片", sumWidth / 6);
                longWidth.setZdyColumnWidth(zdyColumnWidth);
            }
            item.setWriteCellDataFile(writeCellData);
        });

        //寫入數(shù)據(jù)
        EasyExcel.write(fileName, ImageDemoData.class).registerWriteHandler(longWidth).sheet().doWrite(demoDataList);

    }


}

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-596019.html

package com.alibaba.easyexcel.test.demo.write;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.metadata.data.WriteCellData;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;

import java.util.List;

/**
 * 圖片導(dǎo)出類
 *
 * @author Jiaju Zhuang
 */
@Getter
@Setter
@EqualsAndHashCode
@ContentRowHeight(40)
public class ImageDemoData {
    /**
     * 根據(jù)文件導(dǎo)出 并設(shè)置導(dǎo)出的位置。
     *
     * @since 3.0.0-beta1
     */
    @ExcelProperty(value = "用戶名稱")
    private String test;
    /**
     * 圖片路徑
     */
    @ExcelIgnore
    private List<String> imagePathList;
    /**
     * 圖片列
     */
    @ExcelProperty(value = "上傳圖片")
    private WriteCellData<Void> writeCellDataFile;

    public ImageDemoData() {
    }

    public ImageDemoData(String test, List<String> imagePathList) {
        this.test = test;
        this.imagePathList = imagePathList;
    }

    public ImageDemoData(List<String> imagePathList) {
        this.imagePathList = imagePathList;
    }
}
package com.alibaba.excel.write.style.column;

import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.util.MapUtils;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.usermodel.Cell;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 自動(dòng)列寬
 */
public class AutoColumnWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {


    private static final int MAX_COLUMN_WIDTH = 255;

    //自定義列的列寬
    private Map<String, Integer> zdyColumnWidth = MapUtils.newHashMapWithExpectedSize(2);


    private final Map<Integer, Map<Integer, Integer>> cache = MapUtils.newHashMapWithExpectedSize(8);

    @Override
    protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<WriteCellData<?>> cellDataList, Cell cell,
                                  Head head,
                                  Integer relativeRowIndex, Boolean isHead) {
        boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);
        if (!needSetWidth) {
            return;
        }

        if (zdyColumnWidth.containsKey(cell.toString())) {
            writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), zdyColumnWidth.get(cell.toString()) * 256);
            return;
        }

        Map<Integer, Integer> maxColumnWidthMap = cache.get(writeSheetHolder.getSheetNo());
        if (maxColumnWidthMap == null) {
            maxColumnWidthMap = new HashMap<Integer, Integer>(16);
            cache.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);
        }
        Integer columnWidth = dataLength(cellDataList, cell, isHead);
        if (columnWidth < 0) {
            return;
        }
        if (columnWidth > MAX_COLUMN_WIDTH) {
            columnWidth = MAX_COLUMN_WIDTH;
        }
        Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());
        if (maxColumnWidth == null || columnWidth > maxColumnWidth) {
            maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);
            writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 256);
        }
    }

    private Integer dataLength(List<WriteCellData<?>> cellDataList, Cell cell, Boolean isHead) {
        if (isHead) {
            return cell.getStringCellValue().getBytes().length;
        }
        WriteCellData<?> cellData = cellDataList.get(0);
        CellDataTypeEnum type = cellData.getType();
        if (type == null) {
            return -1;
        }
        switch (type) {
            case STRING:
                return cellData.getStringValue().getBytes().length;
            case BOOLEAN:
                return cellData.getBooleanValue().toString().getBytes().length;
            case NUMBER:
                return cellData.getNumberValue().toString().getBytes().length;
            default:
                return -1;
        }
    }

    public void setZdyColumnWidth(Map<String, Integer> zdyColumnWidth) {
        this.zdyColumnWidth = zdyColumnWidth;
    }
}

到了這里,關(guān)于【JAVA】easyexcel 導(dǎo)出excel文件帶多個(gè)圖片的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java 導(dǎo)出Excel表格生成下拉框-EasyExcel
  • Java實(shí)現(xiàn)導(dǎo)出多個(gè)excel表打包到zip文件中,供客戶端另存為窗口下載

    Java實(shí)現(xiàn)導(dǎo)出多個(gè)excel表打包到zip文件中,供客戶端另存為窗口下載

    業(yè)務(wù)需求:從數(shù)據(jù)庫(kù)查詢多個(gè)list集合信息封裝excel,每個(gè)excel都有2個(gè)sheet頁(yè),填充不同的信息,最后將所有excel打包成zip文件,以流的形式返回給客戶端,供客戶端另存為窗口下載。 只發(fā)出一次請(qǐng)求 每個(gè)excel表中到數(shù)據(jù)記錄不能超過(guò)2條 excel文件或者zip包不會(huì)上傳服務(wù)器,而是

    2024年02月06日
    瀏覽(20)
  • Java根據(jù)excel模版導(dǎo)出Excel(easyexcel、poi)——含項(xiàng)目測(cè)試?yán)幽脕?lái)即用

    Java根據(jù)excel模版導(dǎo)出Excel(easyexcel、poi)——含項(xiàng)目測(cè)試?yán)幽脕?lái)即用

    一般列表導(dǎo)出以及個(gè)性化樣式設(shè)置請(qǐng)看下面的文章: JAVA導(dǎo)出Excel通用工具類——第一篇:詳細(xì)介紹POI 導(dǎo)出excel的多種復(fù)雜情況,包括動(dòng)態(tài)設(shè)置篩選、動(dòng)態(tài)合并橫向(縱向)單元格等多種復(fù)雜情況. JAVA導(dǎo)出Excel通用工具——第二篇:使用EasyExcel導(dǎo)出excel的多種情況的例子介紹.

    2024年04月29日
    瀏覽(24)
  • java-EasyExcel導(dǎo)出excel設(shè)置單元格為文本格式(含代碼)

    java-EasyExcel導(dǎo)出excel設(shè)置單元格為文本格式(含代碼)

    java-EasyExcel導(dǎo)出excel設(shè)置單元格為文本格式(含代碼) 在使用EasyExcel導(dǎo)出excel模板時(shí)。我們會(huì)發(fā)現(xiàn)導(dǎo)出的日期和大長(zhǎng)度數(shù)字都會(huì)自動(dòng)更換格式,不是文本格式。并且在空白單元格輸入日期也是格式有問(wèn)題的,如下所示,可以看到當(dāng)輸入相同的日期時(shí),格式會(huì)變成自適應(yīng),不是文

    2023年04月15日
    瀏覽(24)
  • Java 使用 easyexcel 讀取 excel 文件

    Java 使用 easyexcel 讀取 excel 文件

    easyexcel 官網(wǎng):EasyExcel官方文檔 - 基于Java的Excel處理工具 | Easy Excel 1. 引入依賴并給出示例 excel ? ? 2. 兩種讀取的方式 ? ? ? ? (1)確定表頭:建立對(duì)象,和表頭形成映射。(這里以此為例) ? ? ? ? (2)不確定表頭:每一行映射為 MapString, Object。 3. 先創(chuàng)建 excel 中表頭對(duì)應(yīng)

    2024年02月12日
    瀏覽(32)
  • EasyExcel導(dǎo)出Excel文件

    方法一 導(dǎo)入EasyExcel依賴 創(chuàng)建實(shí)體類 OrderServiceImpl 如果希望多個(gè)sheet導(dǎo)出那么可以 測(cè)試類 方法二 導(dǎo)入EasyExcel依賴 編寫ExcelUtil 編寫Service層代碼 controller層代碼 方法一與方法二都使用了EasyExcel進(jìn)行Excel的導(dǎo)出,區(qū)別在于方法一建立了實(shí)體類進(jìn)行Excel的導(dǎo)出,這樣的好處是可以直

    2024年02月14日
    瀏覽(25)
  • Java EasyExcel高效讀取保存excel文件

    阿里開(kāi)源出一款易上手,且比較節(jié)省內(nèi)存的Excel操作框架:EasyExcel。EasyExcel是一行一行進(jìn)行讀取,再大的excel也不會(huì)出現(xiàn)OOM。 Java解析、生成Excel比較有名的框架有Apache poi、jxl。但他們都存在一個(gè)嚴(yán)重的問(wèn)題就是非常的耗內(nèi)存,poi有一套SAX模式的API可以一定程度的解決一些內(nèi)存

    2024年02月16日
    瀏覽(27)
  • java導(dǎo)出excel(帶圖片)

    java導(dǎo)出excel(帶圖片)

    先看一下導(dǎo)出效果, controller 表頭數(shù)據(jù)一定要放在最前面 ListObject head = Arrays.asList(\\\"姓名\\\",\\\"年齡\\\",\\\"性別\\\",\\\"證件類別\\\",\\\"證件號(hào)\\\",\\\"聯(lián)系電話\\\",\\\"地區(qū)\\\",\\\"詳細(xì)地址\\\",\\\"報(bào)名時(shí)間\\\",\\\"所屬分組\\\",\\\"年度\\\",\\\"參賽類別1\\\",\\\"作品名稱1\\\",\\\"作品1\\\",\\\"參賽類別2\\\",\\\"作品名稱2\\\",\\\"作品2\\\"); ListListObject sheetDataList = new

    2024年02月11日
    瀏覽(20)
  • EasyExcel實(shí)現(xiàn)Excel文件導(dǎo)入導(dǎo)出功能

    EasyExcel實(shí)現(xiàn)Excel文件導(dǎo)入導(dǎo)出功能

    Java領(lǐng)域解析、生成Excel比較有名的框架有Apache poi、jxl等。但他們都存在一個(gè)嚴(yán)重的問(wèn)題就是非常的耗內(nèi)存。如果你的系統(tǒng)并發(fā)量不大的話可能還行,但是一旦并發(fā)上來(lái)后一定會(huì)OOM或者JVM頻繁的full gc。 EasyExcel是阿里巴巴開(kāi)源的一個(gè)excel處理框架,以使用簡(jiǎn)單、節(jié)省內(nèi)存著稱。

    2024年02月02日
    瀏覽(23)
  • java中用SXSSFWorkbook把多個(gè)list數(shù)據(jù)和單個(gè)實(shí)體dto導(dǎo)出到excel如何導(dǎo)出到多個(gè)sheet頁(yè)詳細(xì)實(shí)例?(親測(cè))

    以下是一個(gè)詳細(xì)的示例,展示了如何使用SXSSFWorkbook將多個(gè)List數(shù)據(jù)和單個(gè)實(shí)體DTO導(dǎo)出到多個(gè)Sheet頁(yè): import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.apache.poi.xssf.streaming.SXSSFRow; import org.apache.poi.xssf.streaming.SXSSFCell; import java.io.FileOutputStream;

    2024年02月11日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包