万能 excel 解析方法

news/2024/7/21 4:13:29 标签: excel, java

不废话,直接上代码,注意避坑,如果excel row值为时间,如:12:00 格式,记得不要设定为时间,设定为常规

import java.io.IOException;

import java.io.InputStream;

import java.math.BigDecimal;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import org.apache.commons.lang3.ObjectUtils;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.DateUtil;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import org.springframework.web.multipart.MultipartFile;

import lombok.extern.slf4j.Slf4j;

/**

* @ClassName: ExcelUtils

* @Author: xiaox

* @Description:

* @Date: 2023/2/20 10:00

* @Version: 1.0

*/

@Slf4j

public class ExcelUtils {

public final static List<List<String>> getUpd(MultipartFile file, int startindex) throws IOException {

Workbook wb = null;

InputStream inputStream = null;

try {

String extension = file.getOriginalFilename().lastIndexOf(".") == -1 ? ""

: file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);

if ("xls".equals(extension) || "XLS".equals(extension)) {// 2003

inputStream = file.getInputStream();

wb = new HSSFWorkbook(inputStream);

} else if ("xlsx".equals(extension) || "XLSX".equals(extension)) {// 2007

inputStream = file.getInputStream();

wb = new XSSFWorkbook(inputStream);

} else {

throw new IOException("不支持的文件类型:" + extension);

}

Sheet sht = wb.getSheetAt(0);

List<List<String>> result = new ArrayList<>(sht.getLastRowNum() + 1);

for (int i = startindex; i <= sht.getLastRowNum(); i++) {

int num = sht.getRow(0).getLastCellNum();

Row row = sht.getRow(i);

if (row != null) {

List<String> datas = new ArrayList<>(row.getLastCellNum());

for (int j = 0; j < num; j++) {

Cell cell = row.getCell(j);

String value = null;

if(null != cell) {

switch (cell.getCellType()) {

case STRING: // 字符串

value = String.valueOf(cell.getStringCellValue());

break;

case NUMERIC: // 数字

if (DateUtil.isCellDateFormatted(cell)) {

short format = cell.getCellStyle().getDataFormat();

SimpleDateFormat sdf = null;

if (format == 20 || format == 32) {

sdf = new SimpleDateFormat("HH:mm");

} else if(format == 21){

sdf = new SimpleDateFormat("HH:mm:ss");

}else if (format == 14 || format == 31 || format == 57 || format == 58) {

// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)

sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

double cellValue = cell.getNumericCellValue();

Date date = DateUtil.getJavaDate(cellValue);

value = sdf.format(date);

}else {// 日期

sdf = new SimpleDateFormat("yyyy-MM-dd");

}

try {

value = sdf.format(cell.getDateCellValue());// 日期

} catch (Exception e) {

try {

throw new Exception("exception on get date data !".concat(e.toString()));

} catch (Exception e1) {

e1.printStackTrace();

}

}finally{

sdf = null;

}

} else {

BigDecimal bd = new BigDecimal(cell.getNumericCellValue());

value = bd.toPlainString();// 数值 用BigDecimal包装再获取plainString,可以防止获取到科学计数值

}

break;

case BLANK:

value = "";

break;

default:

break;

}

datas.add(value);

}

}

if(ObjectUtils.isNotEmpty(datas)) {

result.add(datas);

}

}

}

return result;

} finally {

if (null != inputStream) {

inputStream.close();

}

}

}

}


http://www.niftyadmin.cn/n/327323.html

相关文章

冥想第七百九十三天

1.今天巨热&#xff0c;办公室里面坐着直冒汗。早上来了30分钟健康操。 2.运动了6公里&#xff0c;太热了&#xff0c;朦朦的&#xff0c;其他没有不适感&#xff0c;昨天还左胸口上部疼&#xff0c;经过重复的休息好了。 3.全力以赴的一天。 4.感谢父母&#xff0c;感谢朋友&a…

notepad++中使用正则表达式处理数据

如何使用正则表达式提取文本中的特定行&#xff1f; 以下是一个示例文本&#xff1a; [ INFO] HW RTC: 2023-05-15 07:21:00 [ INFO] HW RTC timestamp:1684135260 [ INFO] NEXT WAKEUP:7:23, TIMESTAMP:1684135380 [ INFO] CmdName:ATCPSMS1,,,"123","123"…

【AGC】接入分发和运营分析相关问题

【关键字】 AGC、分发分析、运营分析 【问题描述】 开发者反馈在应用中接入AGC分发分析、运营分析、事件分析时遇到了一些问题。具体如下所述&#xff1a; 1、事件分析里面的埋点事件参数和参数值是否有数量限制。 2、埋点统计是否是收费项目&#xff0c;是的话是否有免费额…

SpringCloud alibaba微服务b2b2c电子商务平台

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务、系统服务、中间件服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot2、My…

gif怎么转换成mp4格式?

gif怎么转换成mp4格式&#xff1f;GIF动态图片是一种常见的图片文件&#xff0c;平时我们聊天时会使用到表情包、广告宣传场景也会使用到gif动图&#xff0c;而MP4则是目前广泛应用的视频格式&#xff0c;相信大家都知道这一点。将GIF图片转换为视频格式是一种非常实用的方法。…

数据类型、python数字、数据类型转换、字符串

1、python的数据类型 可以使用type&#xff08;&#xff09;函数获取任何对象的数据类型 x 10 print(type(x)) # 打印<class int> 2、python 数字 Int 或整数是完整的数字&#xff0c;正数或负数&#xff0c;没有小数&#xff0c;长度不限。 浮动或“浮点数”是…

长沙银行财报启示录:“生态引擎”如何突破“低维竞争”?

众多行业当中&#xff0c;银行业一直被当做“经济晴雨表”。 今年以来&#xff0c;中国经济开启回暖模式。尤其是在前不久的五一假期&#xff0c;各地消费回暖&#xff0c;释放出经济持续向好的积极信号。此时&#xff0c;也正是各家银行发布成绩单的财报季&#xff0c;能发现…

如何恢复误删除的文件

我们在使用电脑的过程中&#xff0c;误删文件是很常见的事情。这时候&#xff0c;很多人便觉得数据已经丢失&#xff0c;不可挽回。但是&#xff0c;实际上&#xff0c;误删除的文件并没有真正被删除&#xff0c;只是被计算机系统隐藏或标记为可覆盖的空间&#xff0c;只有在被…