生成excel文件(有备注和表头的情况)

news2025/1/1 18:48:54

要使用 Java 导出 Excel 文件,并且通过 @ExcelProperty 注解进行列的映射,可以利用 EasyExcel 库。EasyExcel 是阿里巴巴开源的一款高性能 Excel 读写工具,它支持通过注解将类与 Excel 的列进行映射,简化了 Excel 操作的复杂性。

前提准备

  • 添加 EasyExcel 依赖到 pom.xml 文件中:
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.1.0</version> <!-- 请根据需要选择合适的版本 -->
</dependency>

Excel 导出实现

  1. 定义导出数据的 Java 类 首先,需要定义一个类来映射 Excel 表格中的每一列。
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.WriteStyle;

import java.io.Serializable;

public class EmployeeExcel implements Serializable {

    // 第一行备注信息
    @ExcelProperty("工号")
    private String employeeId;  // 工号(6位文本)

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

    @ExcelProperty("操作类型")
    private String operationType;

    @ExcelProperty("部门全称")
    private String departmentName;

    @ExcelProperty("汇报上级")
    private String supervisor;

    @ExcelProperty("工作城市")
    private String workCity;

    @ExcelProperty("社保城市")
    private String socialSecurityCity;

    @ExcelProperty("职位全称")
    private String positionTitle;

    @ExcelProperty("HC编码")
    private String hcCode;

    @ExcelProperty("群组")
    private String group;

    @ExcelProperty("一级部门")
    private String firstLevelDepartment;

    @ExcelProperty("二级部门")
    private String secondLevelDepartment;

    @ExcelProperty("三级部门")
    private String thirdLevelDepartment;

    @ExcelProperty("四级部门")
    private String fourthLevelDepartment;

    @ExcelProperty("五级部门")
    private String fifthLevelDepartment;

    @ExcelProperty("六级部门")
    private String sixthLevelDepartment;

    @ExcelProperty("七级部门")
    private String seventhLevelDepartment;

    @ExcelProperty("汇报上级工号")
    private String supervisorEmployeeId;

    @ExcelProperty("汇报上级姓名")
    private String supervisorName;

    @ExcelProperty("工作城市")
    private String workCity2;  // 注意列名可以重复,需要做区分

    @ExcelProperty("社保城市(无需填写)")
    private String socialSecurityCity2;

    @ExcelProperty("岗位ID编号")
    private String positionId;

    @ExcelProperty("是否带编调整")
    private String isAdjustment;

    @ExcelProperty("HC编码(非带编调整则该项是必填)")
    private String hcCodeForAdjustment;

    @ExcelProperty("校验未通过原因")
    private String validationFailureReason;

    // Getter and Setter methods
    public String getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(String employeeId) {
        this.employeeId = employeeId;
    }

    // 其他字段的 Getter 和 Setter 方法

}
  1. 使用 EasyExcel 导出数据 然后,可以利用 EasyExcel 库来导出数据。接下来是 Excel 导出的核心代码。
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.style.AbstractCellStyleStrategy;
import com.alibaba.excel.write.style.FillPatternType;
import com.alibaba.excel.write.style.HorizontalAlignmentStyleStrategy;
import org.apache.poi.ss.usermodel.*;

import java.util.ArrayList;
import java.util.List;

public class ExcelExportExample {

    public static void main(String[] args) {
        // 数据列表
        List<EmployeeExcel> employeeExcelList = new ArrayList<>();
        
        // 模拟添加数据
        EmployeeExcel employee = new EmployeeExcel();
        employee.setEmployeeId("123456");
        employee.setName("张三");
        employee.setOperationType("新增");
        // 填充其他字段...
        
        employeeExcelList.add(employee);

        // 导出 Excel 文件
        exportExcel(employeeExcelList);
    }

    public static void exportExcel(List<EmployeeExcel> data) {
        // Excel 文件路径
        String fileName = "员工信息.xlsx";
        
        // 创建 ExcelWriter
        EasyExcel.write(fileName, EmployeeExcel.class)
                .sheet("员工信息")
                .doWrite(data);
    }
}
  1. 添加备注信息 如果 Excel 的第一行是备注信息(如工号为6位文本格式等),可以在写入 Excel 时手动插入备注行。备注行可以通过自定义样式进行设置,如背景颜色。

  2. 设置单元格合并和背景颜色 如果需要合并单元格或者设置背景颜色,你可以使用 WriteStyleCellStyle 来设置样式。示例如下:

 

java

import com.alibaba.excel.write.style.AbstractCellStyleStrategy;
import org.apache.poi.ss.usermodel.*;

import java.util.List;

public class CustomCellStyleStrategy extends AbstractCellStyleStrategy {

    @Override
    protected void initCellStyle(Workbook workbook) {
        super.initCellStyle(workbook);
        // 设置备注行的背景颜色
        Sheet sheet = workbook.getSheetAt(0);
        Row row = sheet.createRow(0);
        row.createCell(0).setCellValue("工号为6位文本格式");
        row.createCell(1).setCellValue("变更前信息(不用填写,系统自动填充)");

        // 合并单元格
        sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 1));

        // 设置背景颜色
        CellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        row.getCell(0).setCellStyle(cellStyle);
        row.getCell(1).setCellStyle(cellStyle);
    }

    @Override
    protected void setColumnWidth(Sheet sheet) {
        super.setColumnWidth(sheet);
        sheet.setColumnWidth(0, 6000); // 设置列宽
    }
}

EasyExcel.write() 方法中加入该自定义样式:

EasyExcel.write(fileName, EmployeeExcel.class)
          .sheet("员工信息")
          .registerWriteHandler(new CustomCellStyleStrategy())
          .doWrite(data);

总结

  • @ExcelProperty 注解用于将 Java 类的字段映射到 Excel 的列。
  • 通过 EasyExcel,可以轻松实现 Excel 文件的导出,支持数据模型与表格列的直接绑定。
  • 在导出时,可以添加备注行、合并单元格、设置背景颜色等自定义样式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2267721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

若依定时任务

表结构 目录 quartz框架 SysJobServiceImpl实现类 使用切点,在构造器执行的时候执行定时任务的构建(这个类是交给IOC容器的,所以这个时间点就是项目启动的时候)SysJobServiceImpl实现类的init方法创建任务 /*** 创建定时任务*/public static void createScheduleJob(Scheduler …

LeetCode - Google 校招100题 第5天 双指针(Two Pointers) (11题)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144742777 LeetCode 合计最常见的 112 题: 校招100题 第1天 链表(List) (19题)校招100题 第2天 树(Tree) (21题)校招100题 第3天 动态规划(DP) (20题)

(icml2024)SLAattention,基于原文时序模型进行改进

#代码&#xff1a; https://github.com/xinghaochen/SLAB #论文&#xff1a;https://arxiv.org/pdf/2405.11582 相关工作 1. 高效Transformer架构 背景&#xff1a; Transformer从最初的自然语言处理扩展到计算机视觉领域&#xff08;例如ViT&#xff09;&#xff0c;但由于…

每日小题打卡

目录 幂次方 手机键盘 简单排序 校庆 性感素数 幂次方 题目描述 对任意正整数 N&#xff0c;计算 X^Nmod233333 的值。 输入格式 共一行&#xff0c;两个整数 X 和 N。 输出格式 共一行&#xff0c;一个整数&#xff0c;表示 X^Nmod233333 的值。 数据范围 1≤…

【Spring】 Bean 注入 HttpServletRequest 能保证线程安全的原理

文章目录 前言1. 图示2. 源码坐标后记 前言 今天看了一段老业务代码&#xff0c;HttpServletRequest 被注入后直接用于业务逻辑。 好奇Spring是如何解决线程安全问题。 Controller public class TestController {ResourceHttpServletRequest request;ResponseBodyGetMapping(…

iOS Masonry对包体积的影响

01 Masonry介绍 Masonry是iOS在控件布局中经常使用的一个轻量级框架&#xff0c;Masonry让NSLayoutConstraint使用起来更为简洁。Masonry简化了NSLayoutConstraint的使用方式&#xff0c;让我们可以以链式的方式为我们的控件指定约束。 常用接口声明与实现&#xff1a; 使用方式…

C 实现植物大战僵尸(二)

C 实现植物大战僵尸&#xff08;二&#xff09; 前文链接&#xff0c;C 实现植物大战僵尸&#xff08;一&#xff09; 五 制作启动菜单 启动菜单函数 void startUI() {IMAGE imageBg, imgMenu1, imgMenu2;loadimage(&imageBg, "res/menu.png");loadimage(&am…

sqlserver镜像设置

本案例是双机热备&#xff0c;只设置主体服务器&#xff08;主&#xff09;和镜像服务器&#xff08;从&#xff09;&#xff0c;不设置见证服务器 设置镜像前先检查是否启用了 主从服务器数据库的 TCP/IP协议 和 RemoteDAC &#xff08;1&#xff09;打开SQL Server配置管理器…

springboot503基于Sringboot+Vue个人驾校预约管理系统(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装个人驾校预约管理系统软件来发挥其高效地信息处理的作用&am…

游戏引擎学习第61天

回顾并计划接下来的事情 我们现在的目标是通过创建一个占位符版本的游戏来展示我们所做的工作。这个版本的游戏包含了许多基本要素&#xff0c;目的是快速构建一些东西&#xff0c;进行测试&#xff0c;并观察代码结构的形成。这些代码的实施是为了理解系统如何工作&#xff0…

探索PyTorch:从入门到实践的demo全解析

探索PyTorch:从入门到实践的demo全解析 一、环境搭建:PyTorch的基石(一)选择你的“利器”:安装方式解析(二)步步为营:详细安装步骤指南二、基础入门demo:点亮第一盏灯(一)张量操作:深度学习的“积木”(二)自动求导:模型学习的“幕后英雄”三、数据处理demo:喂饱…

hiprint结合vue2项目实现静默打印详细使用步骤

代码地址是&#xff1a;vue-plugin-hiprint: hiprint for Vue2/Vue3 ⚡打印、打印设计、可视化设计器、报表设计、元素编辑、可视化打印编辑 本地安装包地址&#xff1a;electron-hiprint 发行版 - Gitee.com 1、先安装hipint安装包在本地 2、项目运行npm&#xff08;socket.…

Docker Container 可观测性最佳实践

Docker Container 介绍 Docker Container&#xff08; Docker 容器&#xff09;是一种轻量级、可移植的、自给自足的软件运行环境&#xff0c;它在 Docker 引擎的宿主机上运行。容器在许多方面类似于虚拟机&#xff0c;但它们更轻量&#xff0c;因为它们不需要模拟整个操作系统…

GXUOJ-算法-第二次作业

1.矩阵连&#xff08;链&#xff09;乘 问题描述 GXUOJ | 矩阵连乘 代码解答 #include<bits/stdc.h> using namespace std;const int N50; int m[N][N]; int p[N]; int n;int main(){cin>>n;//m[i][j] 存储的是从第 i 个矩阵到第 j 个矩阵这一段矩阵链相乘的最小…

OpenCV计算机视觉 02 图片修改 图像运算 边缘填充 阈值处理

目录 图片修改&#xff08;打码、组合、缩放&#xff09; 图像运算 边缘填充 ​阈值处理 上一篇文章&#xff1a; OpenCV计算机视觉 01 图像与视频的读取操作&颜色通道 图片修改&#xff08;打码、组合、缩放&#xff09; # 图片打码 import numpy as np a cv2.imre…

不修改内核镜像的情况下,使用内核模块实现“及时”的调度时间片超时事件上报

一、背景 之前的博客 不修改内核镜像的情况下&#xff0c;使用内核模块实现高效监控调度时延-CSDN博客 里&#xff0c;我们讲了不修改内核镜像高效监控每次的调度时延的方法。这篇博客里&#xff0c;我们对于调度时间片也做这么一个不修改内核镜像的改进。关于调度时间片过长的…

Flink定时器

flink的定时器都是基于事件时间&#xff08;event time&#xff09;或事件处理时间&#xff08;processing time&#xff09;的变化来触发响应的。对一部分新手玩家来说&#xff0c;可能不清楚事件时间和事件处理时间的区别。我这里先说一下我的理解&#xff0c;防止下面懵逼。…

使用 OpenCV 绘制线条和矩形

OpenCV 是一个功能强大的计算机视觉库&#xff0c;它不仅提供了丰富的图像处理功能&#xff0c;还支持图像的绘制。绘制简单的几何图形&#xff08;如线条和矩形&#xff09;是 OpenCV 中常见的操作。在本篇文章中&#xff0c;我们将介绍如何使用 OpenCV 在图像上绘制线条和矩形…

【Artificial Intelligence篇】AI 前沿探秘:开启智能学习的超维征程

目录 一、人工智能的蓬勃发展与智能学习的重要性: 二、数据的表示与处理 —— 智能学习的基石: 三、构建一个简单的感知机模型 —— 智能学习的初步探索: 四、神经网络 —— 开启超维征程的关键一步: 五、超维挑战与优化 —— 探索智能学习的深度: 六、可视化与交互 —— …

大数据的尽头是数据中台吗?

大数据的尽头是数据中台吗&#xff1f; 2018年末开始&#xff0c;原市场上各种关于大数据平台的招标突然不见&#xff0c;取而代之的是数据中台项目&#xff0c;建设数据中台俨然成为传统企业数字化转型首选&#xff0c;甚至不少大数据领域的专家都认为&#xff0c;数据中台是…