文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【EasyExcel】的一些用法

2023-09-05 22:36

关注

一、AnalysisEventListener监听类,可以用来解析Excel

用来进行监听,一方面,它可以处理空数据的检查,重复数据的检查等一些数据筛查工作。另一方面,也可以做数据的存储,如果在此做数据存储,那么数据的转换也是可以在这里完成的。

在该监听器中,通过重写AnalysisEventListener的方法来获得解析的数据、表头信息,以及解析完毕之后执行的操作信息。

public class ExcelListener extends AnalysisEventListener<UserData> {  public void invoke(UserData data, AnalysisContext analysisContext) {  System.out.println("****" + data); }  public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {  System.out.println("表头" + headMap); }  public void doAfterAllAnalysed(AnalysisContext analysisContext) {  System.out.println("读取Excel完毕"); }}

调用:

public class EasyExcelReadDemo { public static void main(String[] args) {  // 实现excel写操作  //1.设置写入文件夹地址和excel文件名称  String fileName = "/Users/zzs/temp/excel/write.xlsx";  //调用easyExcel里面的方法实现写操作  //2个参数,第一个参数是文件名称,第二个参数是实体类  EasyExcel.read(fileName, UserData.class, new ExcelListener()).sheet().doRead(); }}

二、自定义转化器

通过自定义转换器,比如将1、0转换成男、女的实例:

public class SexConverter implements Converter<Integer> {    public Class<Integer> supportJavaTypeKey() {        return Integer.class;    }    public CellDataTypeEnum supportExcelTypeKey() {        return CellDataTypeEnum.STRING;    }    public Integer convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {        return "男".equals(cellData.getStringValue()) ? 1 : 0;    }    public CellData<String> convertToExcelData(Integer integer, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {        return new CellData<>(integer.equals(1) ? "男" : "女");    }}

使用:

@ExcelProperty(value="性别",converter = SexConverter.class)private Integer sex;

再次生成Excel,性别字段内容便显示为:男、女字样。

三、保留两位小数

比如体重需要保留两位小数,可通过@NumberFormat 注解实现:

@ExcelProperty(value = "体重KG")@NumberFormat("0.##") // 会以字符串形式生成单元格,要计算的列不推荐private BigDecimal weight;

另外一种方法是使用@ContentStyle注解:这样也能达到保留两位小数的效果。
当然,也可以使用实现Converter接口的方式实现(同性别实现)。

@ContentStyle(dataFormat = 2)private BigDecimal weight2;

四、排除指定Excel列

在很多场景下,Excel的列与实体类可能并不完全一致,这时就需要排除一些实体类的字段。
方式一:类上加注解 @ExcelIgnoreUnannotated,过滤属性没有@ExcelProperty注解的字段

@Data@ToString@AllArgsConstructor@NoArgsConstructor  // 一定要有无参构造方法@ExcelIgnoreUnannotatedpublic class UserData {    .....}

方式二:指定字段加@ExcelIgnore注解

@ExcelIgnore // 该字段不生成excelprivate String remark;

方式三:代码指定过滤字段,通过excludeColumnFiledNames方法,这种方法的好处是:同一Excel可以在调用方法时排除不同的数据列。

EasyExcel.write(fileName, UserData.class).sheet("学生信息表").excludeColumnFiledNames(Arrays.asList("remark")).doWrite(getData());

参考链接:https://jsnds.cn/2021/07/29/104400.html

来源地址:https://blog.csdn.net/m0_46459413/article/details/128659592

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯