easyexcel将csv转为excel处理数字问题
使用easyexcel可以将csv格式的文件转为.xlsx文件,但是csv中有很多数字,比如:"123","12.34","-111",默认情况下会将其作为字符串写入.xlsx文件,就如同下面一样,字符类型的数字无法直接在excel中做统计和计算,因此需要将其写入excel时转为数字存储。

我们可以使用自定义转换器识别每个单元格中的内容是否是数字,然后将其转为数值类型。
1.csv转为excel程序
@Async("asyncExcelAnalysisServiceExecutor")public Future<String> csv2Excel(InputStream inputStream, OutputStream outputStream, String sheetName) {try {ExcelWriter writer = EasyExcel.write(outputStream).excelType(ExcelTypeEnum.XLSX)//注册写入时类型转换器.registerConverter(new BigDecimalConvert()).build();EasyExcel.read(inputStream, new EasyExcelGeneralCsvListener(writer, new WriteSheet())).excelType(ExcelTypeEnum.CSV).charset(Charset.forName("UTF-8")).sheet().sheetNo(0).sheetName(sheetName).doRead();writer.finish();outputStream.flush();} catch (Exception e) {log.error("ExcelWriter.finish() -> csv转为excel出错!", e.getMessage());e.printStackTrace();} catch (Error x) {log.error("ExcelWriter.finish() -> csv转为excel出错!", x.getMessage());x.printStackTrace();} catch (Throwable x) {log.error("ExcelWriter.finish() -> csv转为excel出错!", x.getMessage());x.printStackTrace();} finally {if (outputStream != null) {try {outputStream.close();} catch (Exception e) {log.error("outputStream.close() -> csv转为excel出错!", e.getMessage());e.printStackTrace();}}if (inputStream != null) {try {inputStream.close();} catch (Exception e) {log.error("inputStream.close() -> csv转为excel出错!", e.getMessage());e.printStackTrace();}}}return new AsyncResult<>("success");}
2.自定义类型转换器
import java.math.BigDecimal;import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.xxx.xxx.common.utils.ObjectUtil;/*** description:BigDecimalConvert** @author: lgq* @create: 2024-06-04 09:22*/
public class BigDecimalConvert implements Converter<String> {/*** 支持的Java类型** @return*/@Overridepublic Class supportJavaTypeKey() {return String.class;}/*** 支持的excel类型** @return*/@Overridepublic CellDataTypeEnum supportExcelTypeKey() {return CellDataTypeEnum.STRING;}/*** 转换Java支持的类型** @param cellData* @param excelContentProperty* @param globalConfiguration* @return* @throws Exception*/@Overridepublic String convertToJavaData(ReadCellData cellData, ExcelContentProperty excelContentProperty,GlobalConfiguration globalConfiguration) throws Exception {return cellData.getStringValue();}/*** 转换为Excel支持的类型** @param s* @param excelContentProperty* @param globalConfiguration* @return* @throws Exception*/@Overridepublic WriteCellData convertToExcelData(String s, ExcelContentProperty excelContentProperty,GlobalConfiguration globalConfiguration) throws Exception {String convertS = convertBigDecimal(s);if (!ObjectUtil.isEmpty(convertS)) {BigDecimal bigDecimal = new BigDecimal(convertS);return new WriteCellData(bigDecimal);} else {return new WriteCellData(s);}}public static String convertBigDecimal(String str) {if (str == null || str.trim().length() == 0) {return null;}StringBuilder convertS = new StringBuilder();char[] chars = str.toCharArray();int sz = chars.length;int i = (chars[0] == '-') ? 1 : 0;if (i == sz) {return null;}//除了负号,第一位不能为'小数点'if (chars[i] == '.') {return null;}boolean radixPoint = false;for (; i < sz; i++) {boolean isComma = false;if (chars[i] == '.') {if (radixPoint) {return null;}radixPoint = true;} else if (!(chars[i] >= '0' && chars[i] <= '9') && !(isComma = (",".equals(String.valueOf(chars[i]))))) {return null;}//删除数字中间的英文逗号if (!isComma) {convertS.append(chars[i]);}}return convertS.toString();}
}
3.实现效果

相关文章:
easyexcel将csv转为excel处理数字问题
使用easyexcel可以将csv格式的文件转为.xlsx文件,但是csv中有很多数字,比如:"123","12.34","-111",默认情况下会将其作为字符串写入.xlsx文件,就如同下面一样,字符类型的数字…...
DDMA信号处理以及数据处理的流程---随机目标生成
Hello,大家好,我是Xiaojie,好久不见,欢迎大家能够和Xiaojie一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程,本系列文章将从目标生成、信号仿真、测距、测速、cfar…...
爬虫实现思路
现在的人工智能太强大了,只要有问题,输入后就能给出大致的实现思路;我看了下确实没问题,只需要更改一些细节基本就能拿来就用;下面是我实验经历: 问题: c# 书写爬虫爬取按动物名称,…...
神经网络 torch.nn---Non-Linear Activations (ReLU)
ReLU — PyTorch 2.3 documentation torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) 非线性变换的目的 非线性变换的目的是为神经网络引入一些非线性特征,使其训练出一些符合各种曲线或各种特征的模型。 换句话来说,如果模型都是直线特征的…...
【微服务】使用kubekey部署k8s多节点及kubesphere
kubesphere官方部署文档 https://github.com/kubesphere/kubesphere/blob/master/README_zh.md kubuctl命令文档 https://kubernetes.io/zh-cn/docs/reference/kubectl/ k8s资源类型 https://kubernetes.io/zh-cn/docs/reference/kubectl/#%E8%B5%84%E6%BA%90%E7%B1%BB%E5%9E…...
目标检测数据集 - 垃圾桶满溢检测数据集下载「包含VOC、COCO、YOLO三种格式」
数据集介绍:垃圾桶满溢检测数据集,真实场景高质量图片数据,涉及场景丰富,比如城市道边垃圾桶满溢、小区垃圾桶满溢、社区垃圾桶满溢、农村道边垃圾桶满溢、垃圾集中处理点垃圾桶满溢、公园垃圾桶满溢数据等。数据集标注标签划分为…...
6.9总结(省赛排位赛1)
省赛排位赛1省赛排名赛1 - Virtual Judge (vjudge.net) 思路: 其实就是一个斐波拉契数列,当前项前两项之和,先将范围内的数全部存起来放进一个数组,再进行累加查询 代码: #define _CRT_SECURE_NO_WARNINGS 1 #incl…...
58.CountdownLatch
用来进行线程同步协作,等待所有线程完成倒计时。 构造参数用来初始化等待计数值,await方法用来等待计数归零,countDown方法用来让计数减一。 CountdownLatch普通使用 @Slf4j public class CountdownLatchDemo {public static void main(String[] args) {CountDownLatch c…...
Java数据结构准备工作---常用类
文章目录 前言1.包装类1.1.包装类基本知识1.2.包装类的用途1.3.装箱和拆箱1.3.1.装箱:1.3.2.拆箱 1.4 包装类的缓存问题 2.时间处理类2.1.Date 时间类(java.util.Date)2.2.DateFormat 类和 SimpleDateFormat 类2.3.Calendar 日历类 3.其他常用类3.1.Math类3.2.Rando…...
SD 使用教程
SD 换脸步骤 使用Stable Diffusion (SD) 进行换脸的基本步骤可以从以下几个方面概述,这里以一种常见的方式为例,结合了插件的使用来简化流程: 准备工作 安装必要的软件和插件:首先,确保你已经安装了Stable Diffusion…...
Sylar---协程调度模块
协程调度模块: 首先是协程任务类FiberAndThread,包括协程,函数,指定的线程;提供了五个构造函数,只传协程的智能指针,只传函数对象,传协程智能指针的指针,函数对象指针,还…...
iOS Hook 崩溃
0x00 崩溃重现 被 Hook 的类,是这样的: interface ViewController : UIViewController endimplementation ViewController - (void)loadView {[super loadView];NSLog("%s", __func__); }- (void)test {NSLog("%s", __func__); }-…...
区间预测 | Matlab实现LSTM-ABKDE长短期记忆神经网络自适应带宽核密度估计多变量回归区间预测
区间预测 | Matlab实现LSTM-ABKDE长短期记忆神经网络自适应带宽核密度估计多变量回归区间预测 目录 区间预测 | Matlab实现LSTM-ABKDE长短期记忆神经网络自适应带宽核密度估计多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现LSTM-ABKDE长…...
linux内核下rapidio(TSI721)相关笔记汇总
1 驱动的安装 和 主要功能(doorbell, DMA, rionet)的简单测试 linux5.4 下使用rapidio(tsi721)的笔记记录_kernel-rapidio-CSDN博客 2 机理分析 linux内核下,rapidio网络系统建立的过程(枚举 和 发现)_linux rapidio-CSDN博客 linux内核下,(rapidio)T…...
从GPT-4到GPT-4o:人工智能的进化与革命
从GPT-4到GPT-4o:人工智能的进化与革命 近期,OpenAI推出了最新版本的人工智能模型——GPT-4o,引发了广泛的关注和讨论。在这篇文章中,我们将对GPT-4o进行全面评价,包括与前一版本GPT-4的对比分析,GPT-4o的…...
【Java】/*抽象类和接口*/
目录 一、抽象类和抽象方法 1.1 概念 1.2 特性 1.3 作用 二、接口 2.1 概念及定义 2.2 特性 2.3 实例:笔记本电脑 2.4 一个类可以实现多个接口 2.5 一个接口可以继承多个接口 2.6 Comparable接口 2.7 Comparator接口 2.8 Cloneable接口 2.9 浅拷贝和深…...
TCP/IP协议介绍——三次握手四次挥手
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议…...
[C++]基于C++opencv结合vibe和sort tracker实现高空抛物实时检测
【vibe算法介绍】 ViBe算法是一种高效的像素级视频背景建模和前景检测算法。以下是对该算法的详细介绍: 一、算法原理 ViBe算法的核心思想是通过为每个像素点存储一个样本集,利用该样本集与当前像素值进行比较,从而判断该像素是否属于背景…...
Apache Doris 基础 -- 数据表设计(模式更改)
用户可以通过schema Change操作修改现有表的模式。表的模式主要包括对列的修改和对索引的修改。这里我们主要介绍与列相关的Scheme更改。对于与索引相关的更改,可以查看数据表设计/表索引,查看每个索引的更改方法。 1、术语 基本表(Base Ta…...
【机器学习】【遗传算法】【项目实战】药品分拣的优化策略【附Python源码】
仅供学习、参考使用 一、遗传算法简介 遗传算法(Genetic Algorithm, GA)是机器学习领域中常见的一类算法,其基本思想可以用下述流程图简要表示: (图参考论文:Optimization of Worker Scheduling at Logi…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
