JAVA 读取excel文件成List<Entity>
package com.fsinfo.common.utils; import com.fsinfo.modules.enterprise.entity.EnterpriseRecordEntity;
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream; import java.util.Date;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List; /**
* @Author leijiaxuan
* @Email 897953910@qq.com
* @Date 9:50 2020/7/22
**/
public class ExcelInsert { // private static Logger logger = Logger.getLogger(ExcelReader.class.getName()); // 日志打印类 private static final String XLS = "xls";
private static final String XLSX = "xlsx"; /**
* 根据文件后缀名类型获取对应的工作簿对象
* @param inputStream 读取文件的输入流
* @param fileType 文件后缀名类型(xls或xlsx)
* @return 包含文件数据的工作簿对象
* @throws IOException
*/
public static Workbook getWorkbook(InputStream inputStream, String fileType) throws IOException {
Workbook workbook = null;
if (fileType.equalsIgnoreCase(XLS)) {
workbook = new HSSFWorkbook(inputStream);
} else if (fileType.equalsIgnoreCase(XLSX)) {
workbook = new XSSFWorkbook(inputStream);
}
return workbook;
} /**
* 读取Excel文件内容
* @param myfile 要读取的Excel文件流
* @return 读取结果列表,读取失败时返回null
*/
public static List<EnterpriseRecordEntity> readExcel(MultipartFile myfile) { Workbook workbook = null;
FileInputStream inputStream = null; try {
// 获取Excel后缀名
String fileName=myfile.getOriginalFilename();
String fileType = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
// // 获取Excel文件
// File excelFile = new File(fileName);
// if (!excelFile.exists()) {
//// logger.warning("指定的Excel文件不存在!");
// return null;
// } File file = new File(myfile.getOriginalFilename());
FileUtils.copyInputStreamToFile(myfile.getInputStream(), file);
// 获取Excel工作簿
inputStream = new FileInputStream(file);
workbook = getWorkbook(inputStream, fileType);
// 会在本地产生临时文件,用完后需要删除
if (file.exists()) {
file.delete();
} // 读取excel中的数据
List<EnterpriseRecordEntity> resultDataList = parseExcel(workbook); return resultDataList;
} catch (Exception e) {
// logger.warning("解析Excel失败,文件名:" + fileName + " 错误信息:" + e.getMessage());
return null;
} finally {
try {
if (null != workbook) {
workbook.close();
}
if (null != inputStream) {
inputStream.close();
}
} catch (Exception e) {
// logger.warning("关闭数据流出错!错误信息:" + e.getMessage());
return null;
}
}
} /**
* 解析Excel数据
* @param workbook Excel工作簿对象
* @return 解析结果
*/
private static List<EnterpriseRecordEntity> parseExcel(Workbook workbook) {
List<EnterpriseRecordEntity> resultDataList = new ArrayList<>();
// 解析sheet
for (int sheetNum = 0; sheetNum < workbook.getNumberOfSheets(); sheetNum++) {
Sheet sheet = workbook.getSheetAt(sheetNum); // 校验sheet是否合法
if (sheet == null) {
continue;
} // 获取第一行数据
int firstRowNum = sheet.getFirstRowNum();
Row firstRow = sheet.getRow(firstRowNum);
if (null == firstRow) {
// logger.warning("解析Excel失败,在第一行没有读取到任何数据!");
} // 解析每一行的数据,构造数据对象
int rowStart = firstRowNum + 1;
int rowEnd = sheet.getPhysicalNumberOfRows();
for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
Row row = sheet.getRow(rowNum); if (null == row) {
continue;
} EnterpriseRecordEntity resultData = convertRowToData(row);
if (null == resultData) {
// logger.warning("第 " + row.getRowNum() + "行数据不合法,已忽略!");
continue;
}
resultDataList.add(resultData);
}
} return resultDataList;
} /**
* 将单元格内容转换为字符串
* @param cell
* @return
*/
private static String convertCellValueToString(Cell cell) {
if(cell==null){
return null;
}
String returnValue = null;
switch (cell.getCellType()) {
case 0: //数字
if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
SimpleDateFormat sdf = null;
if (cell.getCellStyle().getDataFormat() == HSSFDataFormat
.getBuiltinFormat("h:mm")) {
sdf = new SimpleDateFormat("HH:mm");
} else {// 日期
sdf = new SimpleDateFormat("yyyy-MM-dd");
}
Date date = cell.getDateCellValue();
returnValue = sdf.format(date);
} else if (cell.getCellStyle().getDataFormat() == 58) {
// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
double value = cell.getNumericCellValue();
Date date = org.apache.poi.ss.usermodel.DateUtil
.getJavaDate(value);
returnValue = sdf.format(date);
} else {
double value = cell.getNumericCellValue();
CellStyle style = cell.getCellStyle();
DecimalFormat format = new DecimalFormat();
String temp = style.getDataFormatString();
// 单元格设置成常规
if (temp.equals("General")) {
format.applyPattern("#");
}
returnValue = format.format(value);
}
break;
case 1: //字符串
returnValue = cell.getStringCellValue();
break;
case 4: //布尔
Boolean booleanValue = cell.getBooleanCellValue();
returnValue = booleanValue.toString();
break;
case 2: // 空值
break;
case 7: // 公式
returnValue = cell.getCellFormula();
break;
case 64: // 故障
break;
default:
break;
}
return returnValue;
} /**
* 提取每一行中需要的数据,构造成为一个结果数据对象
*
* 当该行中有单元格的数据为空或不合法时,忽略该行的数据
*
* @param row 行数据
* @return 解析后的行数据对象,行数据错误时返回null
*/
private static EnterpriseRecordEntity convertRowToData(Row row) {
EnterpriseRecordEntity resultData = new EnterpriseRecordEntity(); Cell cell;
int cellNum = 0;
// 获取记录日期
cell = row.getCell(cellNum++);
String recorddate = convertCellValueToString(cell);
resultData.setRecorddate(java.sql.Date.valueOf(recorddate));
// 获取企业名称
cell = row.getCell(cellNum++);
String enterpriseuuid = convertCellValueToString(cell);
resultData.setEnterpriseuuid(enterpriseuuid);
// 获取企业反映问题
cell = row.getCell(cellNum++);
String recordcontext = convertCellValueToString(cell);
resultData.setRecordcontext(recordcontext);
// 获取解决情况
cell = row.getCell(cellNum++);
String handlinfo = convertCellValueToString(cell);
resultData.setHandlinfo(handlinfo);
// 获取备注
cell = row.getCell(cellNum++);
String remarks = convertCellValueToString(cell);
resultData.setRemarks(remarks); return resultData;
}
}
JAVA 读取excel文件成List<Entity>的更多相关文章
- Java读取Excel文件的几种方法
Java读取 Excel 文件的常用开源免费方法有以下几种: 1. JDBC-ODBC Excel Driver 2. jxl.jar 3. jcom.jar 4. poi.jar 简单介绍: 百度文 ...
- java读取excel文件的代码
如下内容段是关于java读取excel文件的内容,应该能对各朋友有所用途. package com.zsmj.utilit; import java.io.FileInputStream;import ...
- 关于解决java读取excel文件遇空行抛空指针的问题 !
关于解决java读取excel文件遇空行抛空指针的问题 ! package exceRead; import java.io.File; import java.io.FileInputStream; ...
- java 读取Excel文件并数据持久化方法Demo
import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util ...
- java读取excel文件数据导入mysql数据库
这是我来公司的第二周的一个小学习任务,下面是实现过程: 1.建立maven工程(方便管理jar包) 在pom.xml导入 jxl,mysql-connector 依赖 可以在maven仓库搜索 2.建 ...
- Java读取Excel文件转换成JSON并转成List——(七)
Jar包
- JAVA读取EXCEL文件异常Unable to recognize OLE stream
异常: jxl.read.biff.BiffException: Unable to recognize OLE stream at jxl.read.biff.CompoundFile.<in ...
- java 读取excel文件(只读取xls文件)
package com.sun.test; import java.io.BufferedInputStream;import java.io.File;import java.io.FileInpu ...
- Java 读取Excel 文件内容
在一个项目中,有一个需求,是把excel文件的内容转换为xml格式展示.在学习如何操作的过程中,首先是如何获取excel文件,其中操作的代码如下: 1.首先是导入需要的 jar, 下载地址:https ...
随机推荐
- Kafka入门(2):消费与位移
摘要 在这篇文章中,我将从消息在Kafka中的物理存储方式讲起,介绍分区-日志段-日志的各个层次. 然后我将接着上一篇文章的内容,把消费者的内容展开讲一讲,区分消费者与消费者组,以及这么设计有什么用. ...
- CSRF与XSS攻击的原理与防范
CSRF 1.概念与原理 CSRF,跨站请求伪造,攻击方伪装用户身份发送请求从而窃取信息或者破坏系统.例如: 用户访问A网站登陆并生成了cookie,再访问B网站,如果A网站存在CSRF漏洞,此时B网 ...
- 《python开发技术详解》|百度网盘免费下载|Python开发入门篇
<python开发技术详解>|百度网盘免费下载|Python开发入门篇 提取码:2sby 内容简介 Python是目前最流行的动态脚本语言之一.本书共27章,由浅入深.全面系统地介绍了利 ...
- 《Python编程快速上手 —让繁琐工作自动化》|百度网盘免费下载|Python自动化办公
Python编程快速上手—让繁琐工作自动化 提取码:u8vj 如今,人们面临的大多数任务都可以通过编写计算机软件来完成. Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言.通过 P ...
- 微服务迁移记(五):WEB层搭建(5)-集成ueditor编辑器,伪分布式图片上传
一.redis搭建 二.WEB层主要依赖包 三.FeignClient通用接口 以上三项,参考<微服务迁移记(五):WEB层搭建(1)> 四.SpringSecurity集成 参考:< ...
- Django学习路37_request属性
打印元信息,基本上都会打印出来 类字典结构的 key 键 允许重复 get 请求可以传参,但是长度有限制 最大不能超过 2K post 文件上传使用 get 参数 默认放在网址中 post 在 ...
- PHP rsort() 函数
实例 对数组 $cars 中的元素按字母进行降序排序: <?php$cars=array("Volvo","BMW","Toyota" ...
- react-ts模板/脚手架
react-ts-template 脚手架 使用 npm i -g maple-react-cli maple-react-cli init 选择模板 'react-ts-template' 输入自定 ...
- 好用的连接池-druid
druid连接池是阿里巴巴的数据库连接池项目.它的一个亮点强大的监控功能以及防SQL注入,同时不影响性能.这里是它的GitHub地址.感觉druid扩展的功能还是很实用的. 实用的功能 详细的监控 E ...
- python爬虫学习05-爬取图片
python爬虫学习05-爬取图片 确定要爬取的网址:https://shenan.tuchong.com/20903415/#image309854686 要爬取的内容:使用浏览器插件xpath对图 ...