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

【案例實戰(zhàn)】SpringBoot整合EasyExcel實現(xiàn)列表導(dǎo)出功能

這篇具有很好參考價值的文章主要介紹了【案例實戰(zhàn)】SpringBoot整合EasyExcel實現(xiàn)列表導(dǎo)出功能。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

這篇文章會給大家實操一個關(guān)于列表導(dǎo)出成excel表格的功能,相信大家在日常工作中也會遇到列表導(dǎo)出的需求,看完本篇文章那么你就可以輕松的去整合列表導(dǎo)出的功能。

【案例實戰(zhàn)】SpringBoot整合EasyExcel實現(xiàn)列表導(dǎo)出功能

本次使用的導(dǎo)出工具是阿里巴巴開源的EasyExcel,關(guān)于EasyExcel我這里簡單的介紹一下:

我們知道Java解析、生成Excel比較有名的框架有Apache poi、jxl。但他們都存在一個嚴重的問題就是非常的耗內(nèi)存,poi有一套SAX模式的API可以一定程度的解決一些內(nèi)存溢出的問題,但POI還是有一些缺陷,比如07版Excel解壓縮以及解壓后存儲都是在內(nèi)存中完成的,內(nèi)存消耗依然很大。

easyexcel重寫了poi對07版Excel的解析,一個3M的excel用POI sax解析依然需要100M左右內(nèi)存,改用easyexcel可以降低到幾M,并且再大的excel也不會出現(xiàn)內(nèi)存溢出;03版依賴POI的sax模式,在上層做了模型轉(zhuǎn)換的封裝,讓使用者更加簡單方便。

【案例實戰(zhàn)】SpringBoot整合EasyExcel實現(xiàn)列表導(dǎo)出功能

ok,下面我們就開始實操整合一下EasyExcel,實現(xiàn)導(dǎo)出功能。

第一步:我們先創(chuàng)建Maven項目,整合成SpringBoot的項目。

  • 加入依賴,創(chuàng)建測試接口,確保項目能夠運行。
  • pom.xml加入依賴
		<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
        </dependency>
    </dependencies>
  • 定義主類
/**
 * @author lixiang
 * @date 2023/5/26 16:02
 */
@SpringBootApplication
public class ExcelApplication {
    public static void main(String[] args) {
        SpringApplication.run(ExcelApplication.class, args);
    }
}
  • 創(chuàng)建控制器
/**
 * @author lixiang
 * @date 2023/5/26 16:00
 */
@RestController
@RequestMapping("/excel")
public class ExcelController {

    @GetMapping("/create")
    public String create(){
        String msg = "SUCCESS";
        return msg;
    }

}
  • 測試運行

【案例實戰(zhàn)】SpringBoot整合EasyExcel實現(xiàn)列表導(dǎo)出功能

第二步:引入EasyExcel依賴,封裝工具類

        <dependency>
            <groupId>com.pig4cloud.excel</groupId>
            <artifactId>excel-spring-boot-starter</artifactId>
            <version>0.5.0</version>
        </dependency>
package com.lixiang.util;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder;
import com.alibaba.excel.write.handler.RowWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

/**
 * 導(dǎo)出excel 表格 工具類
 * @author lixiang
 * @date 2023/5/26 10:18 
 */
public class EasyExcelUtil implements RowWriteHandler {

    private int mergeRowIndex;//從哪一行開始合并
    private int[] mergeColumnIndex;//excel合并的列
    private int[] signNum;//合并的唯一標識
    private int total;//總行數(shù)
    private int lastRow;
    private int firstCol;
    private int lastCol;
    private int firstRow;
    private int mergeCount = 1;

    private EasyExcelUtil(){}

    private EasyExcelUtil(int mergeRowIndex, int[] mergeColumnIndex, int[] signNum, int total) {
        this.mergeRowIndex = mergeRowIndex;
        this.mergeColumnIndex = mergeColumnIndex;
        this.signNum = signNum;
        this.total = total;
    }

    /**
     * 導(dǎo)出excel
     * @param response
     * @param fileName 文件名稱
     * @param exportList 導(dǎo)出數(shù)據(jù)
     * @param clazz 導(dǎo)出實體bean class對象
     * @param <T>
     * @throws IOException
     */
    public static <T> void createExcel(HttpServletResponse response, String fileName, List<T> exportList,
      Class<T> clazz)
      throws IOException {
        createExcel(response,fileName,exportList,clazz,null);
    }

    /**
     * 導(dǎo)出excel
     * @param response
     * @param fileName 文件名稱
     * @param exportList 導(dǎo)出數(shù)據(jù)
     * @param clazz 導(dǎo)出實體bean class對象
     * @param cellMerge 單元格合并規(guī)則
     * @param <T>
     * @throws IOException
     */
    public static <T> void createExcel(HttpServletResponse response, String fileName, List<T> exportList,
      Class<T> clazz, CellMerge cellMerge)
      throws IOException {
        // 設(shè)置下載信息
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        fileName = URLEncoder.encode(fileName, "UTF-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");

        //定義ExcelWriterSheetBuilder
        ExcelWriterSheetBuilder excelWriterSheetBuilder = EasyExcel
          .write(response.getOutputStream(), clazz)
          .sheet(fileName);

        //合并單元格
        if (cellMerge != null) {
            // 從那一行開始合并
            int mergeRowIndex = 1;
            EasyExcelUtil
              excelMergeRowByRowStrategy = new EasyExcelUtil(mergeRowIndex, cellMerge.getMergeColumIndex(),
              cellMerge.getMergeRuleColumIndex(), exportList.size());
            excelWriterSheetBuilder.registerWriteHandler(excelMergeRowByRowStrategy);
        }

        //設(shè)置頭樣式
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        //設(shè)置內(nèi)容格式
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
        HorizontalCellStyleStrategy horizontalCellStyleStrategy =
          new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
        //設(shè)計內(nèi)容居中
        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
        contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        //設(shè)置內(nèi)容自動換行
        contentWriteCellStyle.setWrapped(true);
        excelWriterSheetBuilder.registerWriteHandler(horizontalCellStyleStrategy);

        //調(diào)用doWrite方法
        excelWriterSheetBuilder.doWrite(exportList);
    }

    @Override
    public void beforeRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Integer integer, Integer integer1, Boolean aBoolean) {

    }

    @Override
    public void afterRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer integer, Boolean aBoolean) {

    }

    @Override
    public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row,
      Integer relativeRowIndex, Boolean isHead) {
        //當(dāng)前行
        int curRowIndex = row.getRowNum();
        //每一行的最大列數(shù)
        short lastCellNum = row.getLastCellNum();

        if (curRowIndex == 1) {
            //賦初值 第一行
            firstRow = curRowIndex;
        }
        //開始合并位置
        if (curRowIndex > mergeRowIndex && !row.getCell(0).getStringCellValue().equals("")) {
            for (int i = 0; i < lastCellNum; i++) {
                if (i == mergeColumnIndex[i]) {
                    //當(dāng)前行號 當(dāng)前行對象 合并的標識位
                    mergeWithPrevAnyRow(writeSheetHolder.getSheet(), curRowIndex, row, signNum);
                    break;//已經(jīng)進入到合并單元格操作里面了,執(zhí)行一次就行
                }
            }
        }
    }

    public void mergeWithPrevAnyRow(Sheet sheet, int curRowIndex, Row row, int[] signNum) {
        Row preRow = row.getSheet().getRow(curRowIndex - 1);
        List<String> rowDataList = new ArrayList<>();
        List<String> preDataList = new ArrayList<>();

        for (int i : signNum) {
            Object currentData =
              row.getCell(i).getCellTypeEnum() == CellType.STRING ? row.getCell(i).getStringCellValue() :
                row.getCell(i).getNumericCellValue();
            Object preData =
              preRow.getCell(i).getCellTypeEnum() == CellType.STRING ? preRow.getCell(i).getStringCellValue() :
                preRow.getCell(i).getNumericCellValue();
            rowDataList.add(String.valueOf(currentData));
            preDataList.add(String.valueOf(preData));
        }

        String rowDataStr = String.join(",", rowDataList);
        String preDataStr = String.join(",", preDataList);

        //判斷是否合并單元格
        boolean curEqualsPre = rowDataStr.equals(preDataStr);
        //判斷前一個和后一個相同 并且 標識位相同
        if (curEqualsPre) {
            lastRow = curRowIndex;
            mergeCount++;
        }
        //excel過程中合并
        if (!curEqualsPre && mergeCount > 1) {
            mergeSheet(firstRow, lastRow, mergeColumnIndex, sheet);
            mergeCount = 1;
        }

        //excel結(jié)尾處合并
        if (mergeCount > 1 && total == curRowIndex) {
            mergeSheet(firstRow, lastRow, mergeColumnIndex, sheet);
            mergeCount = 1;
        }

        if (!curEqualsPre) {
            firstRow = curRowIndex;
        }

    }

    private void mergeSheet(int firstRow, int lastRow, int[] mergeColumnIndex, Sheet sheet) {
        for (int colNum : mergeColumnIndex) {
            firstCol = colNum;
            lastCol = colNum;
            CellRangeAddress cellRangeAddress = new CellRangeAddress(firstRow, lastRow, firstCol, lastCol);
            sheet.addMergedRegion(cellRangeAddress);
        }
    }

    /**
     * 單元格合并類
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class CellMerge {
        private int[] mergeColumIndex;
        private int[] mergeRuleColumIndex;
    }

    /**
     * 設(shè)置單元格合并規(guī)則
     * @param mergeColumIndex
     * @param mergeRuleColumIndex
     * @return
     */
    public static CellMerge setCellMerge(int[] mergeColumIndex,int[] mergeRuleColumIndex){
        EasyExcelUtil excelUtil = new EasyExcelUtil();
        CellMerge cellMerge = excelUtil.new CellMerge();
        cellMerge.setMergeColumIndex(mergeColumIndex);
        cellMerge.setMergeRuleColumIndex(mergeRuleColumIndex);
        return cellMerge;
    }
}

第三步:模擬測試數(shù)據(jù)

  • 創(chuàng)建學(xué)生實體類

/**
 * @ColumnWidth(20) 這個是設(shè)置單元格長度的
 * @ExcelProperty("")  這個是設(shè)置表格頭部的
 * @author lixiang
 * @date 2023/5/26 16:30
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ColumnWidth(20)
public class Student {

    @ExcelProperty("年級")
    private String gradeName;

    @ExcelProperty("班級")
    private String className;

    @ExcelProperty("姓名")
    private String name;

    @ExcelProperty("年齡")
    private Integer age;

    @ExcelProperty("性別")
    private String sex;

}

  • 模擬學(xué)生數(shù)據(jù)
/**
 * @author lixiang
 * @date 2023/5/26 16:13
 */
@Service
public class StudentService {

    List<String> classNames;

    List<String> gradeNames;

    {
        classNames = new ArrayList<>();
        classNames.add("一班");
        classNames.add("二班");
        classNames.add("三班");
        gradeNames = new ArrayList<>();
        gradeNames.add("2017級");
        gradeNames.add("2018級");
        gradeNames.add("2019級");
    }

    public List<Student> getStudentData(){
        List<Student> list = new ArrayList<>();
        for (int i = 1; i < 20; i++) {
            Student student = new Student();
            student.setName("李祥"+i);
            student.setClassName(getClassName());
            student.setGradeName(getGradeName());
            student.setSex("男");
            student.setAge(18);
            list.add(student);
        }

        return list;
    }

    /**
     * 獲取班級
     * @return
     */
    private String getClassName(){
        Random rand = new Random();
        return classNames.get(rand.nextInt(classNames.size()));
    }

    /**
     * 獲取年級
     * @return
     */
    private String getGradeName(){
        Random rand = new Random();
        return gradeNames.get(rand.nextInt(gradeNames.size()));
    }
}
/**
 * @author lixiang
 * @date 2023/5/26 16:00
 */
@RestController
@RequestMapping("/excel")
public class ExcelController {

    @Autowired
    private StudentService  studentService;

    @GetMapping("/create")
    public List<Student> create(){

        List<Student> studentData = studentService.getStudentData();

        return  studentData;
    }

}

【案例實戰(zhàn)】SpringBoot整合EasyExcel實現(xiàn)列表導(dǎo)出功能

第四步:基于這個數(shù)據(jù)我們進行導(dǎo)出成excel

/**
 * @author lixiang
 * @date 2023/5/26 16:00
 */
@RestController
@RequestMapping("/excel")
public class ExcelController {

    @Autowired
    private StudentService  studentService;

    @GetMapping("/create")
    public void create(HttpServletResponse response) throws Exception{

        List<Student> studentData = studentService.getStudentData();
        String fileName  =  "學(xué)生列表";
        /**
         * 第一個參數(shù):HttpServletResponse
         * 第二個參數(shù):文件名稱
         * 第三個參數(shù):數(shù)據(jù)集
         * 第四個參數(shù):數(shù)據(jù)集實體class對象
         */
        EasyExcelUtil.createExcel(response,fileName,studentData, Student.class);
    }

}

【案例實戰(zhàn)】SpringBoot整合EasyExcel實現(xiàn)列表導(dǎo)出功能
【案例實戰(zhàn)】SpringBoot整合EasyExcel實現(xiàn)列表導(dǎo)出功能

Ok,那么現(xiàn)在 我們想要合并單元格,將同年級的同班級的單元格進行合并。

    @GetMapping("/create")
    public void create(HttpServletResponse response) throws Exception{

        List<Student> studentData = studentService.getStudentData();
        String fileName  =  "學(xué)生列表";
        /**
         * 第一個參數(shù):HttpServletResponse
         * 第二個參數(shù):文件名稱
         * 第三個參數(shù):數(shù)據(jù)集
         * 第四個參數(shù):數(shù)據(jù)集實體class對象
         * 第五個參數(shù):合并單元格的規(guī)則
         *  EasyExcelUtil.setCellMerge(meargeColl, meargeColl);
         *  第一個參數(shù) 是 我們要合并的那些列,第二個是合并的規(guī)則。
         */
        int[] meargeColl = new int[]{0,1};
        EasyExcelUtil.CellMerge cellMerge = EasyExcelUtil.setCellMerge(meargeColl, meargeColl);
        EasyExcelUtil.createExcel(response,fileName,studentData, Student.class,cellMerge);
    }

【案例實戰(zhàn)】SpringBoot整合EasyExcel實現(xiàn)列表導(dǎo)出功能

注意合并的時候,需要將數(shù)據(jù)進行排序,確保年級,班級相同的數(shù)據(jù)都在一起。現(xiàn)在我們先進行數(shù)據(jù)排序。

  • 定義中文排序工具
/**
 * @author lixiang
 * @date 2023/5/26 17:14
 */
public class ChineseNumberUtil {
    public static int chineseNumber2Int(String chineseNumber){
        int result = 0;
        int temp = 1;//存放一個單位的數(shù)字如:十萬
        int count = 0;//判斷是否有chArr
        char[] cnArr = new char[]{'一','二','三','四','五','六','七','八','九'};
        char[] chArr = new char[]{'十','百','千','萬','億'};
        for (int i = 0; i < chineseNumber.length(); i++) {
            boolean b = true;//判斷是否是chArr
            char c = chineseNumber.charAt(i);
            for (int j = 0; j < cnArr.length; j++) {//非單位,即數(shù)字
                if (c == cnArr[j]) {
                    if(0 != count){//添加下一個單位之前,先把上一個單位值添加到結(jié)果中
                        result += temp;
                        temp = 1;
                        count = 0;
                    }
                    // 下標+1,就是對應(yīng)的值
                    temp = j + 1;
                    b = false;
                    break;
                }
            }
            if(b){//單位{'十','百','千','萬','億'}
                for (int j = 0; j < chArr.length; j++) {
                    if (c == chArr[j]) {
                        switch (j) {
                            case 0:
                                temp *= 10;
                                break;
                            case 1:
                                temp *= 100;
                                break;
                            case 2:
                                temp *= 1000;
                                break;
                            case 3:
                                temp *= 10000;
                                break;
                            case 4:
                                temp *= 100000000;
                                break;
                            default:
                                break;
                        }
                        count++;
                    }
                }
            }
            if (i == chineseNumber.length() - 1) {//遍歷到最后一個字符
                result += temp;
            }
        }
        return result;
    }
}
  • service進行排序
public List<Student> getStudentData(){
        List<Student> list = new ArrayList<>();
        for (int i = 1; i < 20; i++) {
            Student student = new Student();
            student.setName("李祥"+i);
            student.setClassName(getClassName());
            student.setGradeName(getGradeName());
            student.setSex("男");
            student.setAge(18);
            list.add(student);
        }
  			//排序邏輯
        list.sort((s1,s2)->{
            Integer flag = Integer.parseInt(s1.getGradeName().substring(0,4)) - Integer.parseInt(s2.getGradeName().substring(0,4));
            if(flag == 0){
                return Integer.compare(ChineseNumberUtil.chineseNumber2Int(s1.getClassName().substring(0,2)),
                        ChineseNumberUtil.chineseNumber2Int(s2.getClassName().substring(0,2)));
            }
            return flag;
        });
        return list;
    }

【案例實戰(zhàn)】SpringBoot整合EasyExcel實現(xiàn)列表導(dǎo)出功能

OK,我們排序完成就可以進行合并啦。

				int[] meargeColl = new int[]{0,1};
        EasyExcelUtil.CellMerge cellMerge = EasyExcelUtil.setCellMerge(meargeColl, meargeColl);
        EasyExcelUtil.createExcel(response,fileName,studentData, Student.class,cellMerge);

【案例實戰(zhàn)】SpringBoot整合EasyExcel實現(xiàn)列表導(dǎo)出功能

我們看到相同的行已經(jīng)被合并啦,ok,excel整合我們就完成啦。文章來源地址http://www.zghlxwxcb.cn/news/detail-474392.html

到了這里,關(guān)于【案例實戰(zhàn)】SpringBoot整合EasyExcel實現(xiàn)列表導(dǎo)出功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【案例實戰(zhàn)】SpringBoot整合Redis實現(xiàn)緩存分頁數(shù)據(jù)查詢

    【案例實戰(zhàn)】SpringBoot整合Redis實現(xiàn)緩存分頁數(shù)據(jù)查詢

    正式觀看本文之前,設(shè)想一個問題,高并發(fā)情況下,首頁列表數(shù)據(jù)怎么做? 類似淘寶首頁,這些商品是從數(shù)據(jù)庫中查出來的嗎?答案肯定不是,在高并發(fā)的情況下,數(shù)據(jù)庫是扛不住的,那么我們要怎么去扛住C端大并發(fā)量呢,這塊我們可以借助Redis,我們知道Redis是一個基于內(nèi)

    2024年02月09日
    瀏覽(23)
  • springboot中使用EasyExcel實現(xiàn)Excel 導(dǎo)入導(dǎo)出

    springboot中使用EasyExcel實現(xiàn)Excel 導(dǎo)入導(dǎo)出

    EasyExcel 是一款基于 Java 的簡單易用的 Excel 文件操作工具。它提供了豐富的 API,可以方便地讀取、寫入和操作 Excel 文件,支持常見的 Excel 操作,如讀取/寫入單元格數(shù)據(jù)、合并單元格、設(shè)置樣式、處理大數(shù)據(jù)量等。EasyExcel能大大減少占用內(nèi)存的主要原因是在解析Excel時沒有將

    2024年02月12日
    瀏覽(40)
  • SpringBoot 集成 EasyExcel 3.x 實現(xiàn) Excel 導(dǎo)出

    SpringBoot 集成 EasyExcel 3.x 實現(xiàn) Excel 導(dǎo)出

    目錄 ? EasyExcel官方文檔 EasyExcel是什么? EasyExcel注解 ?springboot集成EasyExcel 簡單入門導(dǎo)出 : 實體類 ?自定義轉(zhuǎn)換類 測試一下 復(fù)雜表頭一對多導(dǎo)出 :? ?自定義注解 定義實體類 自定義單元格合并策略 ?測試一下 ? ? EasyExcel官方文檔 EasyExcel官方文檔 - 基于Java的Excel處理工具

    2024年02月13日
    瀏覽(16)
  • 【EasyExcel】在SpringBoot+VUE項目中引入EasyExcel實現(xiàn)對數(shù)據(jù)的導(dǎo)出(封裝工具類)

    【EasyExcel】在SpringBoot+VUE項目中引入EasyExcel實現(xiàn)對數(shù)據(jù)的導(dǎo)出(封裝工具類)

    一、引入EasyExcel 通過maven引入,坐標如下: 二、后端代碼演示 下面以權(quán)限系統(tǒng)中的角色列表為案例,演示如何導(dǎo)出數(shù)據(jù) 實體類 工具類 通過@Component把工具類交給spring管理,在需要使用的地方使用@Resource注入即可 將泛型設(shè)置為 \\\" ? \\\",來表示任意類型,可以通過這一個方法完成

    2024年02月16日
    瀏覽(22)
  • SpringBoot 集成 EasyExcel 3.x 優(yōu)雅實現(xiàn) Excel 導(dǎo)入導(dǎo)出

    EasyExcel 是一個基于 Java 的、快速、簡潔、解決大文件內(nèi)存溢出的 Excel 處理工具。它能讓你在不用考慮性能、內(nèi)存的等因素的情況下,快速完成 Excel 的讀、寫等功能。 EasyExcel文檔地址: https://easyexcel.opensource.alibaba.com/ 引入依賴 簡單導(dǎo)出 以導(dǎo)出用戶信息為例,接下來手把手教

    2024年02月15日
    瀏覽(30)
  • springboot集成pagehelper以及easyExcel實現(xiàn)百萬數(shù)據(jù)導(dǎo)出

    1.編寫excel常量類 2.根據(jù)數(shù)據(jù)量的不同,我們選擇不同的導(dǎo)出方法 數(shù)據(jù)量少的(20W以內(nèi)吧):一個SHEET一次查詢導(dǎo)出 數(shù)據(jù)量適中(100W以內(nèi)):一個SHEET分批查詢導(dǎo)出 ?數(shù)據(jù)里很大(幾百萬都行):多個SHEET分批查詢導(dǎo)出 少執(zhí)行sql,優(yōu)化分頁速度,才能更快的導(dǎo)出文件

    2023年04月15日
    瀏覽(32)
  • Springboot基于easyexcel實現(xiàn)一個excel文件包含多個sheet表格的數(shù)據(jù)導(dǎo)出

    Springboot基于easyexcel實現(xiàn)一個excel文件包含多個sheet表格的數(shù)據(jù)導(dǎo)出

    EasyExcel 是一款基于Java的開源Excel操作工具,它提供了簡單且強大的 API,使開發(fā)人員可以輕松地讀寫、操作和生成Excel文件。 EasyExcel 支持 Excel 文件的導(dǎo)入和導(dǎo)出,可以處理大量數(shù)據(jù),具有高性能和低內(nèi)存占用。它可以讀取 Excel 文件中的數(shù)據(jù),并將數(shù)據(jù)轉(zhuǎn)換為 Java 對象,也可

    2024年02月03日
    瀏覽(22)
  • 基于SpringBoot + EasyExcel + Vue + Blob實現(xiàn)導(dǎo)出Excel文件的前后端完整過程

    基于SpringBoot + EasyExcel + Vue + Blob實現(xiàn)導(dǎo)出Excel文件的前后端完整過程

    首先前端發(fā)起HTTP請求之后,后端返回一個Excel輸出流,然后前端用Blob類型接收數(shù)據(jù),并且解析響應(yīng)頭數(shù)據(jù)以及提取源文件名,最后用a標簽完成下載。 一、后端代碼 (1)導(dǎo)入阿里巴巴的EasyExcel依賴(pom.xml) (2)控制層(GameController.java) (3)接口層(IGameService.java) (4)

    2024年02月16日
    瀏覽(23)
  • 【案例實戰(zhàn)】SpringBoot整合阿里云文件上傳OSS

    【案例實戰(zhàn)】SpringBoot整合阿里云文件上傳OSS

    1.需求背景 C端業(yè)務(wù)用戶頭像上傳 海量圖片音頻、視頻存儲 用戶行為日志存儲 (1)阿里云OSS介紹 對象存儲OSS(Object Storage Service)是阿里云提供的海量、安全、低成本、高持久的云存儲服務(wù)。其數(shù)據(jù)設(shè)計持久性不低于99.9999999999%(12個9),服務(wù)設(shè)計可用性不低于99.995%。 OSS具

    2024年02月06日
    瀏覽(26)
  • RabbitMq整合Springboot超全實戰(zhàn)案例+圖文演示+源碼自取

    RabbitMq整合Springboot超全實戰(zhàn)案例+圖文演示+源碼自取

    目錄 介紹 簡單整合 簡單模式 定義 代碼示例 ?work模式 定義 代碼示例 pubsub模式 定義 代碼示例 routing模式? 定義 代碼示例 ?top模式 定義 代碼 下單付款加積分示例 介紹 代碼 ?可靠性投遞示例 介紹 代碼 交換機投遞確認回調(diào)? 隊列投遞確認回調(diào)? ?延遲消息場景示例 介紹 代

    2024年02月03日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包