Java操作Excel的3种方式

后端 潘老师 6个月前 (11-16) 231 ℃ (0) 扫码查看

本文主要讲解关于Java如何优雅的操作Excel相关内容,其中包含Java操作Excel的3种方式,让我们来一起学习下吧!

在Java开发中,我们经常需要读取或写入Excel文件。市面上有很多操作Excel的工具库,今天来介绍三个我在项目中用过的库,他们分别是:POI、JExcelAPI和EasyExcel,它们让你能够优雅的完成Excel操作!

这里我们只做简单介绍,不做深入讲解,如需深入,可以看各自官方文档!这里更推荐使用easyexcel工具包哦!

POI

POI是Apache下一个功能强大的Java库,用于处理各种Microsoft Office格式的文档,特别是Excel文档。它支持.xls和.xlsx格式的文件,能够处理复杂的数据,如图表、公式等。

查看POI官方文档地址

依赖坐标

<dependency>
    <groupId>org.apache.poigroupId>
    <artifactId>poi-ooxmlartifactId>
    <version>4.1.2version>
<dependency>

Java示例

以下是一个基于Apache POI库读取Excel文件的Java代码示例:

public class ExcelReader {  
    public static void main(String[] args) {  
        String excelFilePath = "path/to/excel/file.xlsx";  
        FileInputStream inputStream = null;  
        Workbook workbook = null;  
        Sheet sheet = null;  
        Row row = null;  
        Cell cell = null;  
        try {  
            inputStream = new FileInputStream(new File(excelFilePath));  
            workbook = new XSSFWorkbook(inputStream);  
            sheet = workbook.getSheetAt(0); // 读取第一个工作表  
            for (row = sheet.getRow(0); row != null; row = row.getNextRow()) { // 逐行读取  
                for (cell = row.getFirstCell(); cell != null; cell = cell.getNextCell()) { // 逐列读取  
                    switch (cell.getCellType()) { // 根据单元格类型获取单元格值  
                        case STRING:  
                            System.out.print(cell.getStringCellValue() + "\t");  
                            break;  
                        case NUMERIC:  
                            System.out.print(cell.getNumericCellValue() + "\t");  
                            break;  
                        case BOOLEAN:  
                            System.out.print(cell.getBooleanCellValue() + "\t");  
                            break;  
                        default:  
                            System.out.print(cell + "\t");  
                    }  
                }  
                System.out.println(); // 换行  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            if (workbook != null) {  
                try {  
                    workbook.close(); // 关闭工作簿对象和输入流对象  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }  
            if (inputStream != null) {  
                try {  
                    inputStream.close(); // 关闭输入流对象  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
    }  
}

JExcelAPI

JExcelAPI是一个较老但仍然广泛使用的库,主要用于处理.xls格式的Excel文件。它的API简单直观,适合需要快速开发的场景。

注意:

  1. 仅支持 2003 版本的Excel 也就是 后缀名为 xls 的文件
  2. 采用流式处理模型,逐行读取和写入 ——因此 可以处理大量数据,一般不会出现OOM

点此查看JExcelAPI官网

依赖坐标

dependency>
    <groupId>net.sourceforge.jexcelapigroupId>
    <artifactId>jxlartifactId>
    <version>2.6.12version>
dependency>

Java示例

以下是一个基于JExcelAPI库读取Excel文件的Java代码示例:

public class ReadExcelDemo {
    public static void main(String[] args) {
        try {
            // 1. 打开 Excel 文件
            String filePath = ExcelConstant.EXCEL_PATH_XLS;
            Workbook workbook = Workbook.getWorkbook(new java.io.File(filePath));

            // 2. 获取第一个工作表
            Sheet sheet = workbook.getSheet(0);
            /**
             * -Xms64m -Xmx64m
             * row = 4000 col = 50
             * 正常读
             */
            // 3. 遍历每一行,并读取数据
            for (int row = 0; row < sheet.getRows(); row++) {
                for (int col = 0; col < sheet.getColumns(); col++) {
                    Cell cell = sheet.getCell(col, row);
                    String content = cell.getContents();
                    content += cell.getCellFormat().getBackgroundColour().getDescription();
                    System.out.print(content+"\t");
                }
                System.out.println();
            }

            // 4. 关闭工作簿
            workbook.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

EasyExcel

EasyExcel是一个基于POI的库,但它针对大数据量的Excel文件进行了优化。它的API更简洁,且在处理大数据量时表现更好。

点此查看EasyExcel官网

依赖坐标

dependency>
    <groupId>com.alibabagroupId>
    <artifactId>easyexcelartifactId>
    <version>2.2.6version>
dependency>

Java示例

以下是一个基于EasyExcel库读写Excel文件的Java代码示例:

public class ExcelReaderWriter {  
    public static void main(String[] args) {  
        // 读取Excel文件  
        String readFilePath = "path/to/excel/file.xlsx"; // 替换为实际的文件路径  
        List<Data> dataList = EasyExcel.read(readFilePath, new NoModelDataListener()).sheet().doRead();  
  
        // 写入Excel文件  
        String writeFilePath = "path/to/excel/file_copy.xlsx"; // 替换为实际的文件路径  
        EasyExcel.write(writeFilePath)  
                .sheet("Sheet1") // 设置工作表名称  
                .doWrite(dataList); // 写入数据  
    }  
  
    // 定义一个数据类,用于保存读取到的Excel文件中的数据  
    static class Data {  
        private String name;  
        private int age;  
  
        public Data(String name, int age) {  
            this.name = name;  
            this.age = age;  
        }  
  
        public String getName() {  
            return name;  
        }  
  
        public int getAge() {  
            return age;  
        }  
    }  
  
    // 自定义一个数据监听器,用于将读取到的Excel数据转换成自定义的Data列表  
    static class NoModelDataListener implements EasyExcel.ReadListener<Data> {  
        @Override  
        public Data adapt(String headName, int headIndex, String cellContent) {  
            return new Data(headName, Integer.parseInt(cellContent)); // 将单元格内容转换成整数并返回Data对象  
        }  
    }  
}

总结

POI是功能最全面的库,适合处理复杂的Excel文件。JExcelAPI虽然老旧,但在处理.xls文件时仍然有效。EasyExcel是一个现代化的库,API更加简单易用。大家可以根据自己的情况来选择合适的工具库。

以上就是关于Java如何优雅的操作Excel的3种方式相关的全部内容,希望对你有帮助。欢迎持续关注潘子夜个人博客,学习愉快哦!


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/back/11311.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】