Java实现一个公共方法解析不同类型的表格

首先是公共方法

    private String getCellValueAsString(Cell cell) {if (cell == null) {return "";}String value = "";switch (cell.getCellType()) {case STRING:value = cell.getStringCellValue();break;case NUMERIC:if (DateUtil.isCellDateFormatted(cell)) {value = cell.getDateCellValue().toString();} else {value = Double.toString(cell.getNumericCellValue());}break;case BOOLEAN:value = Boolean.toString(cell.getBooleanCellValue());break;case FORMULA:value = cell.getCellFormula();break;default:return "";}// 移除所有换行符return value.replaceAll("\\r\\n|\\n|\\r", "");}/*** 解析联锁表表格的公共方法* @param sheetIndex    要解析的第几个表格* @param clazz         解析对象* @param mapper* @param passTitle     需要跳过的表头行数* @param <T>*/public <T> void importJlLsb(Integer sheetIndex, Class<T> clazz, BiFunction<T, Cell, T> mapper, Integer passTitle) throws IOException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {String filePath = "D:/project/联锁表格式.xlsx";List<T> jlLSBList = new ArrayList<>();FileInputStream inputStream = new FileInputStream(new File(filePath));Workbook workbook = new XSSFWorkbook(inputStream);Sheet firstSheet = workbook.getSheetAt(sheetIndex);Iterator<Row> iterator = firstSheet.iterator();// 跳过标题行for (int i = 0; i < passTitle; i++) {iterator.next();}while (iterator.hasNext()) {Row nextRow = iterator.next();T jlLSB = clazz.getDeclaredConstructor().newInstance();// 遍历列for (int i = 0; i < nextRow.getLastCellNum(); i++) {Cell cell = nextRow.getCell(i);if (cell == null || cell.getCellType() == CellType.BLANK) {// 检查是否在合并单元格中for (CellRangeAddress range : firstSheet.getMergedRegions()) {if (range.isInRange(nextRow.getRowNum(), i)) {// 获取合并单元格的第一个单元格的值Row firstRow = firstSheet.getRow(range.getFirstRow());Cell firstCell = firstRow.getCell(range.getFirstColumn());// 设置对象的属性jlLSB = mapper.apply(jlLSB, firstCell);break;}}} else {// 设置对象的属性jlLSB = mapper.apply(jlLSB, cell);}}// 输出对象的属性System.out.println(jlLSB.toString());jlLSBList.add(jlLSB);}workbook.close();inputStream.close();}

然后是是调用方法,这里使用了两个对象,对应两个表格

    public void ImportLcJlLsb() throws IOException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {importJlLsb(0, LcJlLSB.class, (jlLSB, cell) -> {LcJlLSB lcJlLSB = (LcJlLSB) jlLSB;setLcJlLSBProperty(lcJlLSB, cell, cell.getColumnIndex());return lcJlLSB;}, 2);}private void setLcJlLSBProperty(LcJlLSB lcJlLSB, Cell cell, int columnIndex) {// 根据列索引设置对象的属性switch (columnIndex) {case 0:lcJlLSB.setDirectionOne(getCellValueAsString(cell));break;case 1:lcJlLSB.setDirectionTow(getCellValueAsString(cell));break;case 3:lcJlLSB.setJlNumber(getCellValueAsString(cell));break;// ... 其他字段}}public void ImportYxJlLsb() throws IOException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {importJlLsb(1, YxJlLSB.class, (jlLSB, cell) -> {YxJlLSB yxJlLSB = (YxJlLSB) jlLSB;setYxJlLSBProperty(yxJlLSB, cell, cell.getColumnIndex());return yxJlLSB;}, 2);}private void setYxJlLSBProperty(YxJlLSB yxJlLSB, Cell cell, int columnIndex) {// 根据列索引设置对象的属性switch (columnIndex) {case 0:yxJlLSB.setDirectionOne(getCellValueAsString(cell));break;case 1:yxJlLSB.setDirectionTow(getCellValueAsString(cell));break;case 3:yxJlLSB.setJlNumber(getCellValueAsString(cell));break;// ... 其他字段}}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

实操:serverless-step-functions-local

目录 问题 依赖组件 调用流程 代码设置 1、安装依赖插件&#xff1a; 2、serverless.yml配置&#xff0c;我这里只提供stepfunction依赖的配置 3、业务代码中使用本地stepfunction 4、启动serverless offline 5、docker 安装启动stepfunction ⚠️注意 1、docker访问…

【Linux】进程(6):环境变量

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解Linux进程&#xff08;6&#xff09;&#xff1a;环境变量&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 &#xff08;A&#xff09;PATH方法1&#…

水经微图安卓版5.3.0发布

随时随地&#xff0c;微图一下&#xff01; 水经微图&#xff08;以下简称“微图”&#xff09;安卓版&#xff0c;新版已上线。 当前版本 当前版本号为&#xff1a;5.3.0-beta 如果你发现该版本中存在问题&#xff0c;请及时反馈给我们修订。 关于我们产品的版本控制&…

【面向就业的Liux基础】从入门到熟练,探索Linux的秘密(一)

主要帮助大家面向工作过程中Linux系统常用的命令联系&#xff0c;采用极致的实用主义&#xff0c;帮助大家节省时间。 文章目录 前言 一、linux系统 二、linux系统基本命令 1.Linux系统的目录结构 2. 常用命令介绍 3.命令演示 4.作业练习 总结 前言 主要帮助大家面向工作过程中…

微信小程序实现图生图(AI动漫特效)效果代码(触站API)

1.效果 触站AI图生图 2.本次用的是触站平台的API,我申请的适用积分,有水印(博主没钱)。如果需要没有水印的可以去买他们的资源包 3.首先我们需要去触站官网平台注册/登录账号(已注册可跳过该步骤) 4.开通API权限 我们可以在主页看到自己免费获取的500积分,用于接口调用…

微信小程序开发的详细解读

目录 小程序的ID 小程序的项目结构 小程序调试基础库 小程序调试 小程序配置文件 Pages配置 Windows配置 tabbar配置 页面配置 项目配置文件 sitemap文件配置 样式与组件 小程序常用组件 轮播图组件 图片组件 Text组件 跳转方式 滚动方式 字体图表使用 背景…

python入门3

文章目录 前言一、函数为什么要使用函数&#xff1f;函数定义函数定义和调用定义函数返回值定义空函数函数参数传递传递实参位置实参关键词实参默认值实参等效函数调用实参可选传递任意数量的实参任意数量关键字实参任意参数*与** 的区别使用元组和字典传参如果既有实参又有任意…

数据可视化---使用matplotlib绘制高级图表(2)

题目一&#xff1a;绘制人口金字塔图 编写程序。根据第8.6&#xff0c;绘制如下图的人口金字塔图。 运行代码&#xff1a; #绘制人口金字塔图 import numpy as np import pandas as pd import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] SimHei plt.rcParams[…

云服务器安装宝塔Linux面板全流程,新手教程!

云服务器如何宝塔Linux面板&#xff1f;阿小云以阿里云服务器为例安装宝塔Linux面板全流程&#xff0c;非常简单&#xff1a; 使用阿里云服务器安装宝塔面板教程&#xff0c;阿里云服务器网以CentOS操作系统为例&#xff0c;安装宝塔Linux面板&#xff0c;先远程连接到云服务器…

UML静态图-类图

概述 静态图包含类图、对象图和包图的主要目的是在系统详细设计阶段&#xff0c;帮助系统设计人员以一种可视化的方式来理解系统的内部结构和代码结构&#xff0c;包括类的细节、类的属性和操作、类的依赖关系和调用关系、类的包和包的依赖关系。 一、类图的表示法 类图(Cla…

轴承阀门5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

轴承阀门5G智能工厂工业物联数字孪生平台作为其中的佼佼者&#xff0c;以其高效、智能、灵活的特点&#xff0c;为制造业的数字化转型提供了强有力的支撑。数字孪生技术&#xff0c;作为智能制造的重要一环&#xff0c;通过构建虚拟与现实相结合的数字化模型&#xff0c;实现了…

离散数学答疑 1

全功能连接词组&#xff1a; 最小全功能联结词组&#xff1a; C&#xff1a;祈使句 6->8是叫条件转化&#xff08;置换&#xff09;吗 反证法&#xff1a; 结论取反作为条件&#xff0c;并且在推理过程中&#xff0c;既推出有B也有反B&#xff0c;则推理成功 反证法算是间…

轻松追剧不费力:短剧小程序引领观剧新潮流

随着时代的进步和科技的发展&#xff0c;人们的娱乐方式也在不断变化。如今&#xff0c;短视频、短剧等碎片化内容正逐渐成为人们日常生活中的一部分。而短剧小程序&#xff0c;以其便捷、高效、内容丰富的特点&#xff0c;正在引领一场观剧新潮流。 一、短剧小程序的崛起 在快…

能获取淘宝商品简化链接的浏览器书签

零&#xff0e;冗长的商品链接 访问网页版本淘宝时&#xff0c;浏览器的地址栏显示的链接太长就像这样(此链接非真实商品)&#xff1a; 于是使用如下方法 一&#xff0e;使用浏览器书签获取淘宝商品简化链接 1.新建书签 Chrome - 打开书签管理器(CtrlShiftO) - 左侧选择书签…

【python - 函数】

一、纯函数和非纯函数 纯函数&#xff08;Pure functions&#xff09;&#xff1a;函数有一些输入&#xff08;参数&#xff09;并返回一些输出&#xff08;调用返回结果&#xff09;。 >>> abs(-2) 2 可以将内置函数 abs 描述为接受输入并产生输出的小型机器。 ab…

C# Onnx E2Pose人体关键点检测

C# Onnx E2Pose人体关键点检测 目录 效果 模型信息 项目 代码 下载 效果 模型信息 Inputs ------------------------- name&#xff1a;inputimg tensor&#xff1a;Float[1, 3, 512, 512] --------------------------------------------------------------- Outputs ---…

电商API商品数据采集接口||助力电商企业采集商品大数据提高开发效率

提高开发效率&#xff1a;电商API接口允许不同的应用程序之间高效地进行交互&#xff0c;节省了大量的人力物力成本&#xff0c;使得开发者可以将更多时间和精力集中于自身的核心业务。 增加数据安全性&#xff1a;通过对数据进行安全加密&#xff0c;API接口实现了对数据的保护…

JVM参数配置

JVM参数的三种表示方法 在jvm中&#xff0c;jvm虚拟机参数有以下三种表示方法&#xff1a; 标准参数&#xff08;-&#xff09;所有的JVM实现都必须实现这些参数的功能&#xff0c;而且向后兼容非标准参数&#xff08;-X&#xff09;&#xff0c;默认jvm实现这些参数的功能&…

罗永浩创业史!普通人也能逆袭!2024轻资产创业项目!2024普通人的出路! 2024普通人做什么行业赚钱!

罗永浩出身草根&#xff0c;一路打拼至今&#xff0c;虽然屡屡受挫但是从未妥协&#xff0c;罗永浩真正的诠释了什么叫“彪悍的人生不需要解释”&#xff01; 回顾罗永浩的传奇创业史: 1. 从新东方出来做牛博网--失败 2.创办老罗英语培训学校--失败 3.致敬乔布斯做锤子科技-…

写一个盲盒模拟器

最近想写一个小程序&#xff0c;随便写一个玩吧&#xff0c;先想了下功能&#xff1a; 1.有很多盲盒&#xff0c;可以选择模拟开启 2.自定义盲盒&#xff0c;我们可以自定义制作盲盒自己玩 3.用户界面&#xff0c;记录盲盒历史&#xff0c;可以给坏越提意见 所用技术栈&…