用上myexcel,百万数据导出也不怕

简介: 用上myexcel,百万数据导出也不怕

myexcel是一款Java的Excel处理工具,主要用于读取、写出、转换Excel文件,支持Excel文件的多种格式和大数据处理。它是开源项目,代码托管在GitHub上。该工具有以下特点:

  1. 功能丰富:支持Excel文件的读取、写出、转换、导出PDF、HTML、Word、CSV等格式,支持大数据处理。
  2. 简单易用:采用链式调用,API简单,使用方便,便于快速构建Excel文件。
  3. 高效可靠:采用Apache POI作为Excel的底层实现,保证了高效性和可靠性。
  4. 安全性强:使用com.fasterxml.jackson作为json序列化/反序列化工具,可以有效防止XSS攻击。

依赖信息

Maven 仓库地址:

    https://mvnrepository.com/artifact/com.github.liaochong/myexcel 。

    Maven :

    <dependency>
        <groupId>com.github.liaochong</groupId>
        <artifactId>myexcel</artifactId>
        <version>4.3.0.RC5</version>
    </dependency>

    Gradle :

    implementation 'com.github.liaochong:myexcel:4.3.0.RC5'




    1. 读取 Excel 文件

    java复制代码

    // 创建 ExcelReadContext 对象
    ExcelReadContext context = ExcelReadContext.builder()
                                       .excelTypeEnum(ExcelTypeEnum.XLS)
                                       .file(new File("example.xls"))
                                       .sheetName("Sheet1")
                                       .build();
    // 读取 Excel 数据
    List<List<Object>> excelData = ExcelUtils.readExcel(context);

    2. 写入 Excel 文件

    java复制代码

    // 创建 ExcelWriteContext 对象
    ExcelWriteContext context = ExcelWriteContext.builder()
                                        .excelTypeEnum(ExcelTypeEnum.XLSX)
                                        .file(new File("example.xlsx"))
                                        .build();
    // 定义 Excel 头部
    List<List<String>> header = new ArrayList<>();
    header.add(Arrays.asList("姓名", "年龄", "性别"));
    // 定义 Excel 内容
    List<List<Object>> data = new ArrayList<>();
    data.add(Arrays.asList("Tom", 20, "男"));
    data.add(Arrays.asList("Lucy", 22, "女"));
    data.add(Arrays.asList("Mike", 25, "男"));
    // 写入 Excel 数据
    ExcelUtils.writeExcel(context, header, data);

    3. 操作 Excel 单元格

    java复制代码

    // 创建 ExcelReadContext 对象
    ExcelReadContext context = ExcelReadContext.builder()
                                        .excelTypeEnum(ExcelTypeEnum.XLSX)
                                        .file(new File("example.xlsx"))
                                        .sheetName("Sheet1")
                                        .build();
    // 读取指定单元格数据
    Object cellData = ExcelUtils.readCell(context, 1, 1);
    System.out.println(cellData);
    // 更新指定单元格数据
    ExcelUtils.writeCellValue(context, 1, 1, "new value");
    // 保存更新后的 Excel
    ExcelUtils.writeExcel(context, null, null);

    com.github.liaochong:myexcel 还提供了更多的 API,例如支持多 sheet 处理、数据格式转换、Excel 样式设置等功能。你可以查阅官方文档来了解更多信息。



    4.myexcel  设置颜色格式

    2023/7/10 上午11:45:48

    com.github.liaochong:myexcel是一个基于Apache POI封装的Java操作Excel文件工具类库,支持Excel文件的读取、修改、写入等操作。在该工具类库中,可以通过CellStyle类来设置Excel单元格的格式,包括颜色格式等。下面是一个设置单元格背景颜色的示例代码:

    // 创建工作簿和工作表
    Workbook workbook = new XSSFWorkbook();
    Sheet sheet = workbook.createSheet("Sheet1");
    // 创建样式对象
    CellStyle style = workbook.createCellStyle();
    // 设置背景颜色为红色
    style.setFillForegroundColor(IndexedColors.RED.getIndex());
    style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    // 创建行和单元格,并设置单元格样式
    Row row = sheet.createRow(0);
    Cell cell = row.createCell(0);
    cell.setCellValue("This is a red cell!");
    cell.setCellStyle(style);
    // 保存文件
    FileOutputStream out = new FileOutputStream("test.xlsx");
    workbook.write(out);
    out.close();
    workbook.close();

    5.myexcel  100万数据导出


    myexcel使用流式API来导出大规模的数据,可以支持100万数据导出的需求。以下是一个使用myexcel实现100万数据导出的示例代码:

    java复制代码

    public class ExcelExportTest {
        public static void main(String[] args) {
            int rowCount = 1000000; // 导出数据量
            List<TestBean> dataList = new ArrayList<>(); // 准备数据
            for (int i = 0; i < rowCount; i++) {
                dataList.add(new TestBean("Name " + i, i, new Date()));
            }
            try (ExcelWriter writer = ExcelUtil.getWriterWithSheet()) {
                // 写入表头
                writer.addHeaderAlias("name", "姓名");
                writer.addHeaderAlias("age", "年龄");
                writer.addHeaderAlias("date", "时间");
                // 写入数据
                writer.write(dataList, true);
                // 输出Excel
                writer.flush(Files.newOutputStream(Paths.get("test.xlsx")));
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        @Data
        @AllArgsConstructor
        public static class TestBean {
            private String name;
            private int age;
            private Date date;
        }
    }

    该示例中,我们定义了一个包含姓名、年龄、时间三个字段的TestBean类,并准备了100万条数据。然后我们使用ExcelUtil工具类创建一个Excel导出器,设置表头别名后写入数据,最后通过文件输出流将数据写入Excel文件。

    需要注意的是,针对大规模的数据导出,我们可以采用分页、异步等方式提高导出性能,避免占用过多内存和时间。

    目录
    相关文章
    |
    消息中间件 算法 Java
    Flink流式处理百万数据量CSV文件(上)
    Flink流式处理百万数据量CSV文件(上)
    511 0
    Flink流式处理百万数据量CSV文件(上)
    |
    26天前
    |
    存储 前端开发 搜索推荐
    ClkLog基于ClickHouse 的百万日活实测报告
    自 ClkLog 上线以来,我们不断吸纳用户需求,提升产品的支持能力。今年下半年,我们遇到了日活跃用户数达到百万级别的客户。为了给 ClkLog 用户提供可靠的技术建议和解决方案,同时也为了节省成本,在Clickhouse官方支持下,我们在阿里云上对 ClickHouse 社区版、企业版进行了详细测试和成本分析。
    |
    4月前
    Navicat——如何导出百万以上的数据
    Navicat——如何导出百万以上的数据
    142 0
    |
    6月前
    |
    消息中间件 监控 druid
    思源:秒级体验百亿级数据量监控钻取
    思源:秒级体验百亿级数据量监控钻取
    |
    缓存 Java easyexcel
    如何高效的导出 百万级别的数据量 到 Excel?
    如何高效的导出 百万级别的数据量 到 Excel?
    243 0
    |
    存储 关系型数据库 MySQL
    百万数据怎么入库mysql mysql百万级数据
          1、连接数据库的问题:建立连接和关闭连接的次数太多,导致IO访问次数太频繁。        2、应该使用批量插入和批量修改的方法,而不是有一条数据就进行插入,这样会导致访问数据库的实际特别的慢。
    |
    7月前
    |
    存储 分布式计算 MaxCompute
    Hologres RoaringBitmap实践:千亿级画像数据秒级分析
    Hologres RoaringBitmap实践:千亿级画像数据秒级分析
    842 2
    |
    存储 分布式计算 MaxCompute
    Hologres RoaringBitmap实践,千亿级画像数据秒级分析
    本文将会分享Hologres RoaringBitmap 方案在画像分析的应用实践,实现更快更准的画像分析。
    |
    存储 SQL 运维
    单表 1000 万条数据,TDengine 助力麦当劳中国实现 PERCENTILE 秒级查询优化
    今天我们为大家分享一个关于 TDengine 在 PERCENTILE 函数性能优化上的真实案例。
    152 0
    |
    存储 Oracle JavaScript
    百万数据的导入导出解决方案
    百万数据的导入导出解决方案