使用Java导入、导出excel详解(附有封装好的工具类)

这篇具有很好参考价值的文章主要介绍了使用Java导入、导出excel详解(附有封装好的工具类)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 😜           :是江迪呀
  • ✒️本文关键词JavaExcel导出工具类后端
  • ☀️每日   一言:有些事情不是对的才去坚持,而是坚持了它才是对的!

前言

我们在日常开发中,一定遇到过要将数据导出为Excel的需求,那么怎么做呢?在做之前,我们需要思考下Excel的组成。Excel是由四个元素组成的分别是:WorkBook(工作簿)Sheet(工作表)Row(行)Cell(单元格),其中包含关系是从左至右,,一个WorkBook可以包含多个Sheet,一个Sheet又是由多个Row组成,一个Row是由多个Cell组成。知道这些后那么我们就使用java来将数据以Excel的方式导出。让我们一起来学习吧✏️!


一、引入Apache POI依赖

使用Java实现将数据以Excel的方式导出,需要依赖第三方的库。我们需要再pom.xml中引入下面的依赖:

 <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
 </dependency>
 <dependency>
     <groupId>org.apache.poi</groupId>
     <artifactId>poi-ooxml</artifactId>
     <version>4.1.2</version>
 </dependency>

二、用法&步骤

2.1 创建Excel的元素

(1)创建WokrBook

Workbook workbook = new XSSFWorkbook();

(2)创建Sheet

 Sheet sheet = workbook.createSheet();

设置sheet的名称

 Sheet sheet = workbook.createSheet("sheet名称");

(3)创建行Row

Row row = sheet.createRow(0);

(4)创建单元格Cell

Cell cell = row.createCell(0, CellType.STRING);

可以指定单元格的类型,支持的类型有下面7种:

    _NONE(-1),
    NUMERIC(0),
    STRING(1),
    //公式
    FORMULA(2),
    BLANK(3),
    //布尔
    BOOLEAN(4),
    ERROR(5);

(5) 填充数据

 cell.setCellValue("苹果");

2.3 样式和字体

如果我们需要导出的Excel美观一些,如设置字体的样式加粗颜色大小等等,就需要创建样式和字体。
创建样式:

CellStyle cellStyle = workbook.createCellStyle();

(1)左右垂直居中

//左右居中
excelTitleStyle.setAlignment(HorizontalAlignment.CENTER);
// 设置垂直居中
excelTitleStyle.setVerticalAlignment(VerticalAlignment.CENTER);

(2)字体加粗、颜色

创建加粗样式并设置到CellStyle 中:

Font font = workbook.createFont();
//字体颜色为红色
font.setColor(IndexedColors.RED.getIndex());
//字体加粗
font.setBold(true);
cellStyle.setFont(font);

指定Cell单元格使用该样式:

cell.setCellStyle(style);

(3)调整列宽和高

Sheet sheet = workbook.createSheet();
//自动调整列的宽度来适应内容
sheet.autoSizeColumn(int column); 
// 设置列的宽度
sheet.setColumnWidth(2, 20 * 256); 

autoSizeColumn()传递的参数就是要设置的列索引。setColumnWidth()第一个参数是要设置的列索引,第二参数是具体的宽度值,宽度 = 字符个数 * 256(例如20个字符的宽度就是20 * 256)

(4)倾斜、下划线

Font font = workbook.createFont();
font.setItalic(boolean italic); 设置倾斜
font.setUnderline(byte underline); 设置下划线

2.4 进阶用法

(1)合并单元格

Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet(fileName);
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 5));
  • CellRangeAddress()方法四个参数分别是fristRow:起始行、lastRow:结束行、fristCol:起始列、lastCol:结束列。
    如果你想合并从第一行到第二行从一列到第十列的单元格(一共合并20格),那么就是CellRangeAddress(0,1,0,10)

(2)字段必填

//创建数据验证
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
//创建要添加校验的单元格对象
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 10);
//创建必填校验规则
DataValidationConstraint constraint = validationHelper.createCustomConstraint("NOT(ISBLANK(A1))");
//设置校验
DataValidation validation = dvHelper.createValidation(constraint, addressList);
//校验不通过 提示
validation.setShowErrorBox(true);
sheet.addValidationData(validation);
  • CellRangeAddressList()方法传递四个参数,分别是:fristRow:起始行、lastRow:结束行、fristCol:起始列、lastCol:结束列。CellRangeAddressList(0, 0, 0, 10)表示的就是给第一行从第一列开始到第十列一共十个单元格添加数据校验。

(3)添加公式

  • SUM:求和函数
//创建SUM公式
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Cell sumCell = row.createCell(0);
sumCell.setCellFormula("SUM(A1:A10)");
//计算SUM公式结果
Cell sumResultCell = row.createCell(1);
sumResultCell.setCellValue(evaluator.evaluate(sumCell).getNumberValue());
  • AVERAGE:平均数函数
//创建AVERAGE公式
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Cell averageCell = row.createCell(0);
averageCell.setCellFormula("AVERAGE(A1:A10)");

//计算AVERAGE公式结果
Cell averageResultCell = row.createCell(1);
averageResultCell.setCellValue(evaluator.evaluate(averageCell).getNumberValue());
  • COUNT:计数函数
//创建COUNT公式
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Cell countCell = row.createCell(0);
countCell.setCellFormula("COUNT(A1:A10)");

//计算COUNT公式结果
Cell countResultCell = row.createCell(1);
countResultCell.setCellValue(evaluator.evaluate(countCell).getNumberValue());

  • IF:条件函数
//创建IF公式
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Cell ifCell = row.createCell(0);
ifCell.setCellFormula("IF(A1>B1,\"Yes\",\"No\")");

//计算IF公式结果
Cell ifResultCell = row.createCell(1);
ifResultCell.setCellValue(evaluator.evaluate(ifCell).getStringValue());

  • CONCATENATE:连接函数
//创建CONCATENATE公式
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Cell concatenateCell = row.createCell(0);
concatenateCell.setCellFormula("CONCATENATE(A1,\" \",B1)");

//计算CONCATENATE公式结果
Cell concatenateResultCell = row.createCell(1);
concatenateResultCell.setCellValue(evaluator.evaluate(concatenateCell).getStringValue());

(4)下拉选择

//下拉值
private List<String> grade = Arrays.asList("高", "中", "低");
(此处省略n行代码)
Sheet sheet = workbook.createSheet("sheet");
DataValidation dataValidation = this.addPullDownConstraint(i, sheet, grade );
sheet.addValidationData(dataValidation);

(5)设置单元格的数据类型

  • 数字格式
// 设置单元格样式 - 数字格式
CellStyle numberCellStyle = workbook.createCellStyle();
numberCellStyle.setDataFormat(workbook.createDataFormat().getFormat("#,##0.00"));
//指定单元格
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellStyle(numberCellStyle);
  • 日期格式
// 设置单元格样式 - 日期格式
CellStyle dateCellStyle = workbook.createCellStyle();
dateCellStyle.setDataFormat(workbook.createDataFormat().getFormat("yyyy-MM-dd"));
//指定单元格
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellStyle(dateCellStyle);

三、导出完整示例

下面的示例使用SpringBoot项目来演示:
pom.xml依赖:

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.16</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.21</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>

Controller层代码:

package shijiangdiya.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import shijiangdiya.utils.ExportUtils;
import javax.servlet.http.HttpServletResponse;

@RestController
@RequestMapping("/sync")
public class ExportController {
}

(1)代码

    @Autowired
    private HttpServletResponse response;

    @PostMapping("/export")
    public void export() {
    	//模拟json数据
        String data = "[{\n" +
                "    \"studentId\": \"20210101\",\n" +
                "    \"name\": \"Alice\",\n" +
                "    \"age\": 20,\n" +
                "    \"credit\": 80\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210102\",\n" +
                "    \"name\": \"Bob\",\n" +
                "    \"age\": 21,\n" +
                "    \"credit\": 85\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210103\",\n" +
                "    \"name\": \"Charlie\",\n" +
                "    \"age\": 22,\n" +
                "    \"credit\": 90\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210104\",\n" +
                "    \"name\": \"David\",\n" +
                "    \"age\": 20,\n" +
                "    \"credit\": 75\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210105\",\n" +
                "    \"name\": \"Emily\",\n" +
                "    \"age\": 21,\n" +
                "    \"credit\": 82\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210106\",\n" +
                "    \"name\": \"Frank\",\n" +
                "    \"age\": 22,\n" +
                "    \"credit\": 88\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210107\",\n" +
                "    \"name\": \"Grace\",\n" +
                "    \"age\": 20,\n" +
                "    \"credit\": 81\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210108\",\n" +
                "    \"name\": \"Henry\",\n" +
                "    \"age\": 21,\n" +
                "    \"credit\": 89\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210109\",\n" +
                "    \"name\": \"Isaac\",\n" +
                "    \"age\": 22,\n" +
                "    \"credit\": 92\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210110\",\n" +
                "    \"name\": \"John\",\n" +
                "    \"age\": 20,\n" +
                "    \"credit\": 78\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210111\",\n" +
                "    \"name\": \"Kelly\",\n" +
                "    \"age\": 21,\n" +
                "    \"credit\": 84\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210112\",\n" +
                "    \"name\": \"Linda\",\n" +
                "    \"age\": 22,\n" +
                "    \"credit\": 87\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210113\",\n" +
                "    \"name\": \"Mike\",\n" +
                "    \"age\": 20,\n" +
                "    \"credit\": 77\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210114\",\n" +
                "    \"name\": \"Nancy\",\n" +
                "    \"age\": 21,\n" +
                "    \"credit\": 83\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210115\",\n" +
                "    \"name\": \"Oscar\",\n" +
                "    \"age\": 22,\n" +
                "    \"credit\": 91\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210116\",\n" +
                "    \"name\": \"Paul\",\n" +
                "    \"age\": 20,\n" +
                "    \"credit\": 76\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210117\",\n" +
                "    \"name\": \"Queen\",\n" +
                "    \"age\": 21,\n" +
                "    \"credit\": 86\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210118\",\n" +
                "    \"name\": \"Rachel\",\n" +
                "    \"age\": 22,\n" +
                "    \"credit\": 94\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210119\",\n" +
                "    \"name\": \"Sarah\",\n" +
                "    \"age\": 20,\n" +
                "    \"credit\": 79\n" +
                "  },\n" +
                "  {\n" +
                "    \"studentId\": \"20210120\",\n" +
                "    \"name\": \"Tom\",\n" +
                "    \"age\": 21,\n" +
                "    \"credit\": 80\n" +
                "  }\n" +
                "]\n";
        ExportUtils.exportExcel("学生信息", data, Student.class, response);
    }

(2)工具类

  /**
     * 数据导出
     * @param fileName 导出excel名称
     * @param data 导出的数据
     * @param c 导出数据的实体class
     * @param response 响应
     * @throws Exception
     */
    public static void exportExcel(String fileName, String data, Class<?> c, HttpServletResponse response) throws Exception {
        try {
            // 创建表头
            // 创建工作薄
            Workbook workbook = new XSSFWorkbook();
            Sheet sheet = workbook.createSheet();
            // 创建表头行
            Row rowHeader = sheet.createRow(0);
            if (c == null) {
                throw new RuntimeException("Class对象不能为空!");
            }
            Field[] declaredFields = c.getDeclaredFields();
            List<String> headerList = new ArrayList<>();
            if (declaredFields.length == 0) {
                return;
            }
            for (int i = 0; i < declaredFields.length; i++) {
                Cell cell = rowHeader.createCell(i, CellType.STRING);
                String headerName = String.valueOf(declaredFields[i].getName());
                cell.setCellValue(headerName);
                headerList.add(i, headerName);
            }
            // 填充数据
            List<?> objects = JSONObject.parseArray(data, c);
            Object obj = c.newInstance();
            if (!CollectionUtils.isEmpty(objects)) {
                for (int o = 0; o < objects.size(); o++) {
                    Row rowData = sheet.createRow(o + 1);
                    for (int i = 0; i < headerList.size(); i++) {
                        Cell cell = rowData.createCell(i);
                        Field nameField = c.getDeclaredField(headerList.get(i));
                        nameField.setAccessible(true);
                        String value = String.valueOf(nameField.get(objects.get(o)));
                        cell.setCellValue(value);
                    }
                }
            }
            response.setContentType("application/vnd.ms-excel");
            String resultFileName = URLEncoder.encode(fileName, "UTF-8");
            response.setHeader("Content-disposition", "attachment;filename=" + resultFileName + ";" + "filename*=utf-8''" + resultFileName);
            workbook.write(response.getOutputStream());
            workbook.close();
            response.flushBuffer();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

(2)结果

使用Java导入、导出excel详解(附有封装好的工具类)

四、导入完整示例

(1)代码

@PostMapping("/import")
    public void importExcel(@RequestParam("excel") MultipartFile excel){
        Workbook workbook = null;
        try {
            workbook = WorkbookFactory.create(excel.getInputStream());
            Sheet sheet = workbook.getSheetAt(0);
            List<Student> students = new ArrayList<>();
            int i = 0;
            for (Row row : sheet) {
                Row row1 = sheet.getRow(i + 1);
                if(row1 != null){
                    Student data = new Student();
                    data.setStudentId(Integer.parseInt(row1.getCell(0).getStringCellValue()));
                    data.setName(row1.getCell(1).getStringCellValue());
                    data.setAge(Integer.parseInt(row1.getCell(2).getStringCellValue()));
                    data.setCredit(Integer.parseInt(row1.getCell(3).getStringCellValue()));
                    students.add(data);
                }
            }
            System.out.println(students);
            workbook.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

(2)工具类

 /**
     * 导入
     * @param workbook 工作簿
     * @param c 实体类
     * @return 实体类集合
     */
    public static <T> List<T> importExcel(Workbook workbook,Class<?> c){
        List<T> dataList = new ArrayList<>();
        try {
            Sheet sheet = workbook.getSheetAt(0);
            int i = 0;
            T o = null;
            for (Row row : sheet) {
                Row row1 = sheet.getRow(i + 1);
                if(row1 != null){
                    o = (T) c.newInstance();
                    Field[] declaredFields = c.getDeclaredFields();
                    for (int i1 = 0; i1 < declaredFields.length; i1++) {
                        String name = declaredFields[i1].getName();
                        Field declaredField1 = o.getClass().getDeclaredField(name);
                        declaredField1.setAccessible(true);
                        Cell cell = row1.getCell(i1);
                        String type = declaredFields[i1].getType().getName();
                        String value = String.valueOf(cell);
                        if(StringUtils.equals(type,"int") || StringUtils.equals(type,"Integer")){
                            declaredField1.set(o,Integer.parseInt(value));
                        } else if(StringUtils.equals(type,"java.lang.String") || StringUtils.equals(type,"char") || StringUtils.equals(type,"Character") ||
                                StringUtils.equals(type,"byte") || StringUtils.equals(type,"Byte")){
                            declaredField1.set(o,value);
                        } else if(StringUtils.equals(type,"boolean") || StringUtils.equals(type,"Boolean")){
                            declaredField1.set(o,Boolean.valueOf(value));
                        } else if(StringUtils.equals(type,"double") || StringUtils.equals(type,"Double")){
                            declaredField1.set(o,Double.valueOf(value));
                        } else if (StringUtils.equals(type,"long") || StringUtils.equals(type,"Long")) {
                            declaredField1.set(o,Long.valueOf(value));
                        } else if(StringUtils.equals(type,"short") || StringUtils.equals(type,"Short")){
                            declaredField1.set(o,Short.valueOf(value));
                        } else if(StringUtils.equals(type,"float") || StringUtils.equals(type,"Float")){
                            declaredField1.set(o,Float.valueOf(value));
                        }
                    }
                }
                dataList.add(o);
            }
            workbook.close();
            return dataList;
        }catch (Exception e){
            e.printStackTrace();
        }
        return dataList;
    }

注意:导入工具类仅限Java的八大基础数据类型String类型。如果还有其他类型需要自己扩展。

(3)结果

学生信息集合:
使用Java导入、导出excel详解(附有封装好的工具类)文章来源地址https://www.toymoban.com/news/detail-459569.html

到了这里,关于使用Java导入、导出excel详解(附有封装好的工具类)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • excel文件导入或导出Java代码示例

       判断excel的格式,同时兼容2003和2007  获取行数据  //获取excel列表内的对应数据格式 3、以下为可能会用到的导出实例文件,上传文件服务器的过程  File格式转换MultipartFile格式的例子   -------------------------------------以下无正文-----------------------------------------------------------

    2024年02月16日
    浏览(38)
  • Java导出Excel模板,导出数据到指定模板,通过模板导入数据(一)

    本文章主要是介绍阿里巴巴的easyexcel的使用 1. 首先需要我们导入easyexcel的依赖包 2. 前期工作准备 编写相关导出模板和导入模板。在项目的resources下创建文件夹,命名为excel 导出模板(此处仅做示例,字段根据自己项目来):  导入模板(导入时需要哪些字段根据自己项目业

    2024年02月03日
    浏览(45)
  • Easys Excel的表格导入(读)导出(写)-----java

    可以学习一些新知识: EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel excel的一些优点和缺点 java解析excel的框架有很多 : poi jxl,存在问题:非常的消耗内存, easyexcel 我们遇到再大的excel都不会出现内存溢出的问题 能够将一个原本3M excel文件,poi来操作将会占用内存 100MB,

    2024年02月13日
    浏览(55)
  • 关于java操作excel导入导出三种方式

    在平时的业务系统开发中,少不了需要用到导出、导入excel功能,今天我们就一起来总结一下,如果你正为此需求感到困惑,那么阅读完本文,你一定会有所收获! 大概在很久很久以前,微软的电子表格软件 Excel 以操作简单、存储数据直观方便,还支持打印报表,在诞生之初

    2024年02月05日
    浏览(40)
  • Java原生POI实现的Excel导入导出(简单易懂)

    首先是Controller入口方法 这个接口在postman上传参是下面这样的: 注意里面的参数名称要和接口上的一致,不然会拿不到值 还有file那里key的类型要选file类型的,这样就可以在后面value里面选择文件 然后是Service方法 首先是Controller入口 strJson是用来接受其它参数的,一般导出的

    2024年02月11日
    浏览(44)
  • 使用luckysheet实现excel导入导出

    luckysheet-demo: luckysheet-demoexcel导入导出实例 使用组件 1. luckysheet在线excel 2. luckyexcel excel导入插件 3. exceljs 导出excel数据 导出exceljs的二次封装,可直接使用如下

    2024年02月12日
    浏览(45)
  • 使用EasyExcel实现Excel的导入导出

    在真实的开发者场景中,经常会使用excel作为数据的载体,进行数据导入和导出的操作,使用excel的导入和导出有很多种解决方案,本篇记录一下EasyExcel的使用。 EasyExcel是一个开源的项目,是阿里开发的。EasyExcel可以简化Excel表格的导入和导出操作,使用起来简单快捷,易上手

    2023年04月15日
    浏览(47)
  • 使用EasyExcel实现Excel表格的导入导出

    Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。 easyexcel重

    2024年02月12日
    浏览(44)
  • springboot中使用EasyExcel实现Excel 导入导出

    EasyExcel 是一款基于 Java 的简单易用的 Excel 文件操作工具。它提供了丰富的 API,可以方便地读取、写入和操作 Excel 文件,支持常见的 Excel 操作,如读取/写入单元格数据、合并单元格、设置样式、处理大数据量等。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将

    2024年02月12日
    浏览(64)
  • java实现excel的导入导出(带参数校验:非空校验、数据格式校验)

    本次封装引入阿里开源框架EasyExcel,EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。 github地址:GitHub - alibaba/easyexcel: 快速、简洁、解决大文件内存溢出的java处理Excel工具 。 64M内存20秒读取75M(46W行25列)的Excel(3.0.2

    2024年02月01日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包