导入Excel——解析Excel——优化
package com.it.excel.excelLearn; import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelUtil {
public static List<ExcelSheetStructure> readExcel(String filePath) throws IOException {
InputStream is = null;
XSSFWorkbook xssfWorkbook = null;
List<ExcelSheetStructure> sheetsDate = null;
// 流读取Excel入内存
is = new FileInputStream(filePath);
xssfWorkbook = new XSSFWorkbook(is);
sheetsDate = new ArrayList<>();
// 遍历
for (Sheet sheet : xssfWorkbook) {
ExcelSheetStructure sheetStructure = new ExcelSheetStructure();
// 获取sheet名字
String sheetName = sheet.getSheetName();
sheetStructure.setSheetName(sheetName);
// 获取有效数据,开始行和结束行
int firstRowNum = sheet.getFirstRowNum();
int lastRowNum = sheet.getLastRowNum();
// 读取数据
List<Map<String, Object>> notHeaderList = new ArrayList<>();
for (int i = firstRowNum; i <= lastRowNum; i++) {
Row row = sheet.getRow(i);
if (row == null) {
break;
}
// 处理表头一行数据
if (i == firstRowNum) {
Map<String, Object> headerRowMap = getHeaderRowData(row);
sheetStructure.setSheetTableHeaderDate(headerRowMap);
} else { // 非表头数据
Row headerRow = sheet.getRow(firstRowNum);
Map<String, Object> notHeaderRowMap = getNotHeaderRowData(row, headerRow);
notHeaderList.add(notHeaderRowMap);
}
}
sheetStructure.setSheetTableList(notHeaderList);
// 判断当前sheet是否有数据,如果没有,就打印sheetName,否则加入Excel数据结构中
if (!sheetStructure.getSheetTableList().isEmpty() && !sheetStructure.getSheetTableHeaderDate().isEmpty()) {
sheetsDate.add(sheetStructure);
} else {
System.out.println(sheetStructure.getSheetName());
}
}
xssfWorkbook.close();
is.close();
return sheetsDate;
} private static Map<String, Object> getNotHeaderRowData(Row row, Row headerRow) {
Map<String, Object> rowMap = new HashMap<>();
for (Cell cell : row) {
/**
* 设置单元格的类型是String,防止读取数据方法getStringCellValue()报错
* 如果单元格中数据格式是数字类型:Cannot get a STRING value from a NUMERIC cell
*/
cell.setCellType(CellType.STRING);
String cellValue = cell.getStringCellValue();
int columnIndex = cell.getColumnIndex();
Cell currentHeaderCell = headerRow.getCell(columnIndex);
// 存储:Map<"当前单元格对应的表头中文","当前单元格值">
rowMap.put(currentHeaderCell.getRichStringCellValue().toString(), cellValue);
}
return rowMap; } private static Map<String, Object> getHeaderRowData(Row row) {
Map<String, Object> headerMap = new HashMap<>();
for (Cell cell : row) {
cell.setCellType(CellType.STRING);
String cellValue = cell.getStringCellValue();
int columnIndex = cell.getColumnIndex();
headerMap.put(String.valueOf(columnIndex), cellValue);
}
return headerMap;
}
}
导入Excel——解析Excel——优化的更多相关文章
- oracle xmltype导入并解析Excel数据--前言
通常,很多的时候,我们需要导入Excel数据到系统中,但是Excel数据需要我们去各种校验,比如身份证校验,手机号码校验等等. 校验失败的数据,提供Excel导出错误原因,提示给用户. 如此,如果校验 ...
- 导入Excel——解析Excel
读取Excel 思路:先读取整个Excel,即工作簿,再依次读取其中的每个工作表Sheet,最后读取工作表内的表格. 一.读取工作簿利用流读取指定目录中的工作簿,并写入内存. /** * Constr ...
- oracle xmltype导入并解析Excel数据 (四)特别说明
1.Excel导出,此处没有给出 2.错误原因在中间表,T_EXCEL_IMPORT_GENERATION,其中errormsg不为空的数据 3,中间表入库过程: 需要自己实现,为一个存储过程,存储过 ...
- oracle xmltype导入并解析Excel数据 (一)创建表与序
表说明: T_EXCEL_IMPORT_DATASRC: Excel数据存储表,(使用了xmltype存储Excel数据) 部分字段说明: BUSINESSTYPE: Excel模板类型,一个Exce ...
- 利用 js-xlsx 实现 Excel 文件导入并解析Excel数据成json格式的数据并且获取其中某列数据
演示效果参考如下:XML转JSON 另一个搭配SQL实现:http://sheetjs.com/sexql/index.html 详细介绍: 1.首先需要导入js <script src=&qu ...
- oracle xmltype导入并解析Excel数据 (三)解析Excel数据
包声明 create or replace package PKG_EXCEL_UTILS is -- Author: zkongbai-- Create at: 2016-07-06-- Actio ...
- oracle xmltype导入并解析Excel数据 (二)规则说明
规则表字段说明如下: 其中RULE_FUNC_CUSTOMIZE表示,用户自己写函数,去判断数据是否合法,存储的是函数的名字 此函数的参数只有一个,该列的值,字段类型是Varchar2, 校验失败的话 ...
- oracle xmltype导入并解析Excel数据 (五)中间表数据入库
此处给出例子,具体根据业务需求 create or replace procedure P_CART_Sheet1(p_id in NUMBER) is--车辆管理功能v_str varchar2(4 ...
- Excel解析与导入导出
第三次结对编程作业 结对成员: 031302610黄志鹏 031302603 陈波 功能分析 1.将初始排课表excel导入系统数据库 2.将系统数据库的排课数据显示在web界面 实现思路 一.实现将 ...
随机推荐
- 关于JavaSE程序的小总结(不分先后顺序 后续继续补充)
统计字符串中某个字符串出现的次数 package com.jiang.demo01; public class Demo01 { public static void main(String[] ar ...
- JMeter分布式测试环境搭建(禁用SSL)
JMeter分布式环境,一台Master,一到多台Slave,Master和Slave可以是同一台机器. 前提条件: 所有机器,包括master和slave的机器: 1.运行相同版本的JMeter 2 ...
- CAS自旋volatile变量
public final int getAndIncrement() { for (;;) { int current = get(); // 取得AtomicInteger里存储的数值 int ne ...
- LuoguP3069 【[USACO13JAN]牛的阵容Cow Lineup
题目链接 看了看其他大佬的文章,为什么要控制右端呢 其实就是一个很简单的模拟队列趴... 难点就在于根据题意我们可以分析得一段合法区间内,不同种类个数不能超过k+2 哦当然,由于种类数范围过大,要对种 ...
- c语言错题本
()malloc(sizeof()) 在stdlib.h包中
- standard_init_linux.go:178: exec user process caused "no such file or directory"
golang docker build 制作完进项后运行报错 出现该问题的原因是编译的环境和运行的环境不同,可能有动态库的依赖 1.默认go使用静态链接,在docker的golang环境中默认是使用动 ...
- K8S学习笔记之Kubernetes 配置管理 ConfigMap
0x00 概述 很多情况下我们为某一应用做好镜像,当我们想修改其中的一些参数的时候,就变得比较麻烦,又要重新制作镜像,我们是不是有一种方式,让镜像根据不同的场景调用我们不同的配置文件呢,那我们就需要用 ...
- c#栈的用法
栈是一种重要的线性结构,栈和队列是限定插入和删除只能在表的“端点”进行的线性表 –栈的元素必须“后进先出”. –栈的操作只能在这个线性表的表尾进行. –注:对于栈来说,这个表尾称为栈的栈顶(top), ...
- 来自后端的逆袭 blazor简介 全栈的福音
背景 什么是SPA 什么是MPA MPA (Multi-page Application) 多页面应用指的就是最传统的 HTML 网页设计,早期的网站都是这样的设计,所之称为「网页设计」.使用 MPA ...
- 获取Excel
默认Excel文档为 代码如下 需要下载 "EPPlus.Core" var file = Directory.GetCurrentDirectory() + "\ ...