码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • springboot+poi 解析excel 按坐标取值


    在工作中,我们经常会遇到一些奇葩的excel格式,例如竖标题的excel

    这个时候我们如果用easyExcel处理有点麻烦,所以我就自己写了一个用poi处理的工具类

    首选我们定义一个自定义注解

    import org.apache.commons.lang3.StringUtils;
    
    import java.lang.annotation.*;
    
    
    /**
     * 指定读取的行和列
     * @date 2022-11-07
     */
    @Target({ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface RecordTemplate {
    
         /**
          * 行号
          */
         int rowNo();
    
         /**
          * 列号
          */
         int columnNo();
    
         /**
          * 字段名称
          */
         String name() default StringUtils.EMPTY;
    }

    用法:用在字段属性上

     

     具体的处理

    /**
     * 解析excel备案数据到对象
     * 这里也可以反射直接给对象赋值 field.setAccessible(true);
     */
    public static Object parseExcelToModel(Sheet sheet,Class dataClass) {
        Field[] declaredFields = dataClass.getDeclaredFields();
        //获取excel的流,前端传入
        HashMap resultMap = new HashMap<>(declaredFields.length);
        for (Field field: declaredFields) {
            if (field.isAnnotationPresent(RecordTemplate.class)) {
                RecordTemplate annotation = field.getAnnotation(RecordTemplate.class);
                //单元格的值
                String value = readCell(sheet, annotation.rowNo(), annotation.columnNo());
                //通过反射把 单元格的值 给对象属性
                resultMap.put(field.getName(),value);
            }
        }
        return resultMap;
    }
    /**
     * 根据坐标读取excel的值
     * @param sheet excel
     * @param rowNo 行数
     * @param columnNo 列数
     * @return 单元格内的值 (String)
     */
    private static String readCell(Sheet sheet,int rowNo, int columnNo){
        int lastRowNum = sheet.getLastRowNum();
        if (rowNo > lastRowNum){
            return null;
        }
        //获取行
        Row row = sheet.getRow(rowNo);
        //获取该行的第2列的单元格
        Cell cell = row.getCell(columnNo);
        //设置单元格类型
        DataFormatter dataFormatter = new DataFormatter();
        return dataFormatter.formatCellValue(cell);
    }
  • 相关阅读:
    macOS查看切换当前用户和shell
    R语言和医学统计学(10):正态性和方差齐性检验
    基于Springboot外卖系统14:菜品新增模块+多个数据表操作+文件上传下载复用
    CentOS7上安装Hadoop2.9.2集群
    从开始学习算法到学习计算机视觉
    基于poi和JavaBean的excel导出
    python—openpyxl操作excel详解
    Scapy样例三则
    JavaScript 51 JavaScript 严格模式
    【批处理DOS-CMD命令-汇总和小结】-Cmd窗口中常用操作符(<、<<、&<、>、>>、&>、&、&&、||、|、()、;、@)
  • 原文地址:https://blog.csdn.net/qq_38377774/article/details/127745132
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号