Java (新)将Excel数据读取到ListMap
Java (新)将Excel数据读取到ListMap
Maven依赖: pom.xml
<!-- excel -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.8</version>
</dependency>
Controller访问类:
@Controller
@RequestMapping("/excel")
public class ImportExcelController {
@RequestMapping(value = "/readto/listmap", method = { RequestMethod.GET, RequestMethod.POST})
@ResponseBody
public String readExcelToListMap(MultipartFile upfile,HttpServletRequest request, HttpServletResponse response) {
ReturnResult result = ExcelUtil.readExcelDataToReturnResult(upfile);
if (200 == result.getStatus()) {
List<Map<String, Object>> listMap = (List<Map<String, Object>>) result.getData();
if (listMap.size() > 0) {
for (Map<String, Object> map : listMap) {
System.out.println(map.toString());
}
return ReturnResult.objectToJson(ReturnResult.build(200, "导入成功 ",null));
}else{
return ReturnResult.objectToJson(ReturnResult.build(300, "文件内容读取为空!"));
}
}else{
return ReturnResult.objectToJson(result);
}
}
}
Excel工具类:
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DataFormatter;
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 com.test.common.pojo.ReturnResult;
public class ExcelUtil {
/**
* 将Excel数据读取到ListMap
* @param file
* 仅支持 csv,xls,XLS,XLs,Xls,xlsx
*/
public static ReturnResult readExcelDataToReturnResult(MultipartFile file) {
if (null != file) {
String fileName = file.getOriginalFilename(); // 获取文件名
if (StringUtils.isNotBlank(fileName)) {
if (fileName.toLowerCase().matches("^.*(csv)$")) {
try {
List<Map<String,Object>> listMap = getResource(file.getBytes());
return ReturnResult.build(200, "成功",listMap);
} catch (Exception e) {
e.printStackTrace();
return ReturnResult.build(500, "系统繁忙,请稍后再试!");
}
}else{
if (fileName.toLowerCase().matches("^.*(xls|XLS|XLs|Xls|xlsx)$")) {
String edition_2003 = "^.+\\.(?i)(xls)$"; // Excel_2003版本
String edition_2007 = "^.+\\.(?i)(xlsx)$"; // Excel_2007版本
try {
// 根据Excel版本创建对象
Workbook wb = null;
if (fileName.matches(edition_2003)) {
wb = new HSSFWorkbook(file.getInputStream());
} else {
if (fileName.matches(edition_2007)) {
wb = new XSSFWorkbook(file.getInputStream());
}
}
// 读取Excel里面的数据
if (null != wb) {
// 得到第一个shell
Sheet sheet = wb.getSheetAt(0);
// 得到Excel的行数
int totalRows = sheet.getPhysicalNumberOfRows();
// 得到Excel的列数(前提是有行数)
int totalCells = 0;
if (totalRows > 1 && sheet.getRow(0) != null) {
totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
}
List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
// 循环Excel行数
for (int r = 1; r < totalRows; r++) {
Row row = sheet.getRow(r);
if (row == null) {
continue;
}
// 循环Excel的列
Map<String, Object> map = new HashMap<String, Object>();
for (int c = 0; c < totalCells; c++) {
Cell cell = row.getCell(c);
if (null != cell) {
int cellType = cell.getCellType();
if (cellType == 0) {
DataFormatter dataFormatter = new DataFormatter();
dataFormatter.addFormat("###########", null);
String str = dataFormatter.formatCellValue(cell);
if (StringUtils.isNotBlank(str)) {
map.put(c+"",str);
}
}else{
String str = String.valueOf(cell);
if (StringUtils.isNotBlank(str)) {
map.put(c+"",str);
}
}
}
}
// 添加到list
if (map.size() > 0) {
listMap.add(map);
}
}
return ReturnResult.build(200, "成功",listMap);
}else{
return ReturnResult.build(300, "读取文件内容为空!");
}
} catch (Exception e) {
e.printStackTrace();
return ReturnResult.build(500, "系统繁忙,请稍后再试!");
}
}else{
return ReturnResult.build(300, "文件格式错误,仅支持 xls,XLS,XLs,Xls,xlsx后缀的文件!");
}
}
}else{
return ReturnResult.build(300, "文件名不能为空!");
}
}else{
return ReturnResult.build(300, "文件不能为空!");
}
}
/** 获取csv文件内容 **/
private static List<Map<String,Object>> getResource(byte[] bate) throws IOException {
List<Map<String,Object>> allString = new ArrayList<>();
// 获取文件内容
List<String> list = getSource(bate);
if (list.size() > 1) {
Map<String,Object> callLogInfo = new HashMap<>();
// 循环内容
for(int i = 1; i<list.size();i++){
List<String> content = Arrays.asList(list.get(i).split(","));
if(content!=null && content.size()>0){
callLogInfo = new HashMap<>();
for (int j = 0; j < content.size(); j++) {
callLogInfo.put(j+"",content.get(j));
}
allString.add(callLogInfo);
}
}
}
return allString;
}
/** 读文件数据 **/
private static List<String> getSource(byte[] bate) throws IOException {
BufferedReader br = null;
ByteArrayInputStream fis=null;
InputStreamReader isr = null;
try {
fis = new ByteArrayInputStream(bate);
isr = new InputStreamReader(fis,"GB2312");
br = new BufferedReader(isr);
} catch (Exception e) {
e.printStackTrace();
}
String line;
String everyLine ;
List<String> allString = new ArrayList<>();
try {
//读取到的内容给line变量
while ((line = br.readLine()) != null){
everyLine = line;
allString.add(everyLine.trim());
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fis != null){
fis.close();
}
if(isr != null){
isr.close();
}
}
return allString;
}
}
Java (新)将Excel数据读取到ListMap的更多相关文章
- Java向指定Excel写入读取数据
今天在开发中遇到用户列表导入导出的功能实现,这里了解到使用POI函数库可以完成此任务!特此记录一下 POI Apache POI是Apache软件基金会开放的源码函数库,POI提供API给Java程序 ...
- Java代码实现excel数据导入到Oracle
1.首先需要两个jar包jxl.jar,ojdbc.jar(注意版本,版本不合适会报版本错误)2.代码: Java代码 import java.io.File; import java.io.Fi ...
- Java:将Excel数据导入到数据库(一眼就看会)
所用Jar包 1. sqljdbc4.jar 连接数据库的Jar包(根据数据库的不同进行选择,我用的SqlServer2008) 2.Jxl.jar 访问Excel的Jar包 注意:支持以.xls结尾 ...
- Java怎样处理EXCEL的读取
须要包:poi-3.5.jar.poi-ooxml-3.5.jar 实例: [java] view plaincopy public class ProcessExcel { private Work ...
- python + Excel数据读取(更新)
data.xlsx 数据如下: import xlrd#1.读取Excel数据# table = xlrd.open_workbook("data.xlsx","r&qu ...
- java数据库导入excel数据
导入数据会将表格分为xls和xlsx两种格式,网上有很多案例 1.excel数据表中的数据不全,数据库中又是必填选项:---从sql语句入手:判断有无 来改变语句 //设置可有可无 字段 加一个必有字 ...
- 自己封装的Java excel数据读取方法
package org.webdriver.autotest.data; import jxl.Workbook; import jxl.Sheet; import jxl.Cell; import ...
- 数据驱动ddt+excel数据读取
我们可以将测试数据用excel存储,再用ddt去传入,不过我们需要安装对应的库,因为python是无法操作excel的 1.安装第三方库xlrd 2.创建一个excel表格,将需要测试的数据保存 3. ...
- python新添加excel数据
相关库 import os import xlwt from xlrd import open_workbook from xlutils.copy import copy 1.判断是否存在xls文件 ...
- python应用_读取Excel数据列表输出【一】
python能使用xlrd模块实现对Excel数据的读取,且按照想要的输出形式. 1.准备Excel数据如下: 2.下面主要是对Excel数据读取后以双列表(每一行是一个用例为一个列表,再一个个案例组 ...
随机推荐
- jdbc封装工具类(无连接池)
package com.huang; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepar ...
- 对qa 工作的理解
主要职责 进行检查,包括组织级和项目级工作内容,其中组织级和项目级里包括[过程]和[资产]两项内容. 跟进不符合项,和项目经理等干系人沟通,直到不符合项问题得到解决 识别过程改进的内容,反馈给EPG. ...
- 更改ubuntu分辨率
显示器是1920*1080的,ubuntu20里没有,查了一通,修改成功,过程如下: 1.打开终端,输入xrandr, 我用的虚拟机,记下Virtual1 connected primary 1920 ...
- DOS批处理自动定期清除生成的备份文件
此功能实现生产环境自动定期清除备份文件. @echo off rem 功能:只保留7天的备份,每天运行. rem 日期:2022.8.15 rem 制作人:zl rem 自动删除7天前的备份 rem ...
- Centos 7 安装RabbitMq 3.10.7
1:准备工作 rabbitmq官网查看erlang和rabbitmq的版本关联关系,这里选择 erlang版本:otp_src_25.0 rabbitmqserver版本:3.10.7 官网下载对应 ...
- python retry装饰器
from functools import wraps import time # def retry(retry_time, retry_on_result, time_wait): # def t ...
- vue页面多表单验证保存
页面中有多个表单需要验证,可以使用以下方法: export default { data: { return { addOrEditVo: { name: '', description: '', a ...
- PaddleOcr-noavx离线部署文档
PaddleOcr-noavx离线部署文档 环境与版本说明: 系统 架构 Anaconda3 PaddlePaddle PaccleOCR 银河麒麟Server V10 X86 Anaconda3-2 ...
- chrome 请停用以开发者
链接:https://pan.baidu.com/s/1YhWINGlUVyTE5XyBVIGW_Q 提取码:23t2 转载至 https://www.cnblogs.com/it-tsz/p/9 ...
- Redis缓存问题排查
一.缓存穿透 概念:缓存穿透是指查询的数据不存在,redis和mysql(或其他持久存储的数据库)都不能命中.工作中出于容错的考虑,如果从数据库内不能查到数据则不会写入缓存,缓存穿透将导致不存在的数据 ...