poi读取excel工具类
package com.manage.utils; import ch.qos.logback.core.net.SyslogOutputStream;
import com.google.gson.Gson;
import com.manage.FrameWeb.FrameLib.SystemLogHelper;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
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 sun.reflect.generics.tree.Tree; import java.io.*;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.*; public class ExcelReader {
private POIFSFileSystem fs;
private Workbook wb;
private Sheet sheet;
private Row row; /**
* 读取Excel表格表头的内容
*
* @param file
* @return String 表头内容的数组
*/
public String[] readExcelTitle(File file) {
try {
InputStream is = new FileInputStream(file); if (file.getName().toLowerCase().endsWith(".xls")) {
fs = new POIFSFileSystem(is);
wb = new HSSFWorkbook(fs);
} else {
wb = new XSSFWorkbook(is);
}
} catch (IOException e) {
e.printStackTrace();
}
sheet = wb.getSheetAt(0);
row = sheet.getRow(0);
// 标题总列数
int colNum = row.getPhysicalNumberOfCells();
System.out.println("colNum:" + colNum);
String[] title = new String[colNum];
for (int i = 0; i < colNum; i++) {
//title[i] = getStringCellValue(row.getCell((short) i));
title[i] = getCellFormatValue(row.getCell((short) i));
}
return title;
} /**
* 读取Excel数据内容
*
* @param file
* @return Map 包含单元格数据内容的Map对象
*/
public Map <Integer, String> readExcelContent(File file) {
Map <Integer, String> content = new HashMap <Integer, String>();
String str = "";
try {
InputStream is = new FileInputStream(file);
if (file.getName().toLowerCase().endsWith(".xls")) {
//fs = new POIFSFileSystem(is);
wb = new HSSFWorkbook(is);
} else {
wb = new XSSFWorkbook(is);
} } catch (IOException e) {
e.printStackTrace();
}
sheet = wb.getSheetAt(0);
// 得到总行数
int rowNum = sheet.getLastRowNum();
row = sheet.getRow(0);
int colNum = row.getPhysicalNumberOfCells();
// 正文内容应该从第二行开始,第一行为表头的标题
for (int i = 1; i <= rowNum; i++) {
row = sheet.getRow(i);
int j = 0;
while (j < colNum) {
// 每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据
// 也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean
// str += getStringCellValue(row.getCell((short) j)).trim() +
// "-";
str += getCellFormatValue(row.getCell((short) j)).trim() + " ";
j++;
}
content.put(i, str);
str = "";
}
return content;
} /**
* 获取单元格数据内容为字符串类型的数据
*
* @param cell Excel单元格
* @return String 单元格数据内容
*/
private String getStringCellValue(HSSFCell cell) {
String strCell = "";
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
strCell = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
strCell = String.valueOf(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
strCell = String.valueOf(cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
strCell = "";
break;
default:
strCell = "";
break;
}
if (strCell.equals("") || strCell == null) {
return "";
}
if (cell == null) {
return "";
}
return strCell;
} /**
* 获取单元格数据内容为日期类型的数据
*
* @param cell Excel单元格
* @return String 单元格数据内容
*/
private String getDateCellValue(HSSFCell cell) {
String result = "";
try {
int cellType = cell.getCellType();
if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {
Date date = cell.getDateCellValue();
result = (date.getYear() + 1900) + "-" + (date.getMonth() + 1)
+ "-" + date.getDate();
} else if (cellType == HSSFCell.CELL_TYPE_STRING) {
String date = getStringCellValue(cell);
result = date.replaceAll("[年月]", "-").replace("日", "").trim();
} else if (cellType == HSSFCell.CELL_TYPE_BLANK) {
result = "";
}
} catch (Exception e) {
System.out.println("日期格式不正确!");
e.printStackTrace();
}
return result;
} /**
* 根据HSSFCell类型设置数据
*
* @param cell
* @return
*/
private String getCellFormatValue(Cell cell) {
String cellvalue = "";
if (cell != null) {
// 判断当前Cell的Type
switch (cell.getCellType()) {
// 如果当前Cell的Type为NUMERIC
case HSSFCell.CELL_TYPE_NUMERIC:
case HSSFCell.CELL_TYPE_FORMULA: {
// 判断当前的cell是否为Date
if (HSSFDateUtil.isCellDateFormatted(cell)) {
// 如果是Date类型则,转化为Data格式 //方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00
//cellvalue = cell.getDateCellValue().toLocaleString(); //方法2:这样子的data格式是不带带时分秒的:2011-10-12
Date date = cell.getDateCellValue();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
cellvalue = sdf.format(date); }
// 如果是纯数字
else {
// 取得当前Cell的数值
DecimalFormat df = new DecimalFormat("#");
cellvalue = df.format(cell.getNumericCellValue());
}
break;
}
// 如果当前Cell的Type为STRIN
case HSSFCell.CELL_TYPE_STRING:
// 取得当前的Cell字符串
cellvalue = cell.getRichStringCellValue().getString();
break;
// 默认的Cell值
default:
cellvalue = " ";
}
} else {
cellvalue = "";
}
return cellvalue; } public static void main(String[] args) { try { System.out.println("开始");
File file = new File("D:\\DownLoads\\ll.xlsx");
ExcelReader er = new ExcelReader();
Map <Integer, List <String>> ms = er.readExcelContentFans(file); Set <Integer> set = ms.keySet();
List <TreeDto> list = new ArrayList <>();
for (Integer i : set) { List <String> ls = ms.get(i);
String str = "";
TreeDto dto = new TreeDto(); dto.setID(String.valueOf(list.get(0)));
dto.setPID(String.valueOf(list.get(8)));
list.add(dto);
} List <TreeDto> rootTrees = new ArrayList <TreeDto>();
for (TreeDto tree : list) {
if (tree.getPID() == "ee3c8a59-3546-11e7-a3f8-5254007b6f02") {
rootTrees.add(tree);
}
for (TreeDto t : list) {
if (t.getPID() == t.getID()) {
if (tree.getList() == null) {
List <TreeDto> myChildrens = new ArrayList <TreeDto>();
myChildrens.add(t);
tree.setList(myChildrens);
} else {
tree.getList().add(t);
}
}
}
} for (TreeDto t : rootTrees){
List<TreeDto> td=t.getList();
/* if(td!=null&&td.size()>0){
for(TreeDto dto:td){
SyslogOutputStream
}
}*/ System.out.println("ID:"+t.getID()+"\t"+"PID:"+t.getPID());
} } catch (Exception e) { e.getMessage();
}
} /**
* 读取Excel数据内容
*
* @param file
* @return Map 包含单元格数据内容的Map对象
*/
public Map <Integer, List <String>> readExcelContentFans(File file) {
Map <Integer, List <String>> content = new HashMap <Integer, List <String>>();
String str = "";
try {
InputStream is = new FileInputStream(file);
if (file.getName().toLowerCase().endsWith(".xls")) {
//fs = new POIFSFileSystem(is);
wb = new HSSFWorkbook(is);
} else {
wb = new XSSFWorkbook(is);
} } catch (IOException e) {
e.printStackTrace();
}
sheet = wb.getSheetAt(0);
// 得到总行数
int rowNum = sheet.getLastRowNum();
row = sheet.getRow(0);
int colNum = row.getPhysicalNumberOfCells();
// 正文内容应该从第二行开始,第一行为表头的标题
for (int i = 1; i <= rowNum; i++) {
row = sheet.getRow(i);
int j = 0;
List <String> colNumContent = new ArrayList <>();
while (j < colNum) {
// 每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据
// 也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean
// str += getStringCellValue(row.getCell((short) j)).trim() +
// "-";
colNumContent.add(getCellFormatValue(row.getCell((short) j)));
/*str += getCellFormatValue(row.getCell((short) j)).trim() + " ";*/
j++;
}
content.put(i, colNumContent);
}
return content;
} public static class TreeDto { private String ID; private List <TreeDto> list; public List <TreeDto> getList() {
return list;
} public void setList(List <TreeDto> list) {
this.list = list;
} private String PID; public String getID() {
return ID;
} public void setID(String ID) {
this.ID = ID;
} public String getPID() {
return PID;
} public void setPID(String PID) {
this.PID = PID;
} } }
poi读取excel工具类的更多相关文章
- POI读取excel工具类 返回实体bean集合(xls,xlsx通用)
本文举个简单的实例 读取上图的 excel文件到 List<User>集合 首先 导入POi 相关 jar包 在pom.xml 加入 <!-- poi --> <depe ...
- POI读取excel工具类(xls,xlsx通用)
package com.boot.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotF ...
- 自己封装的poi操作Excel工具类
自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...
- java里poi操作Excel工具类【我改】
参考原文: https://www.cnblogs.com/yizhang/p/7244917.html 我改: package test; import java.io.File; import j ...
- 使用回调方式写POI导入excel工具类
场景是这样的:为了做一个excel导入的功能,为了尽可能的写一个通用的工具类,将与poi有关的东西都封装起来,以便以其他人员只用关心自己的业务,不用和poi打交道. 写到最后,现在还是会有poi的东西 ...
- 使用POI导出EXCEL工具类并解决导出数据量大的问题
POI导出工具类 工作中常常会遇到一些图表需要导出的功能,在这里自己写了一个工具类方便以后使用(使用POI实现). 项目依赖 <dependency> <groupId>org ...
- POI生成Excel工具类
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInp ...
- java 解析excel工具类
java 解析excel工具类 CreateTime--2018年3月5日16:48:08 Author:Marydon ReadExcelUtils.java import java.io.Fi ...
- Java开发小技巧(六):使用Apache POI读取Excel
前言 在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel.csv.xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化存储的, ...
随机推荐
- cmd命令行结果保存到txt里,屏幕显示一行就保存一行到txt
#coding:utf-8 """ 1.重定向print 2.python与cmd命令 """ import sys import os i ...
- 缓存之Memcache
Memcache Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度. ...
- ubuntu nginx ssl 证书配置
前几天自己用 egg.js 写了个 api 接口,然后把它部署到服务器上.服务器是ubuntu 16.04 + nginx:因为要用到https,然后今天实践了一下如何配置https. 关于htt ...
- 跟我一步一步写出MongoDB Web 可视化工具(二)
前言 上篇讲了一些基础,主要注重的是查,包括建立数据库链接.获取数据库.获取表.列出数据库.列出表.列出索引.获取数据等. 本篇依然是基础,注重增改删,废话不多说,咱们开始. 进阶 创建一个数据库和一 ...
- mac系统vscode环境配置,以及iTerm2配置Zsh + on-my-zsh shell
https://segmentfault.com/a/1190000013612471?utm_source=tag-newest https://ohmyz.sh/ 一:安装iTerm2终端 htt ...
- Maven 插件打包部署项目
clean install -Dmaven.test.skip=true:打包工具 clean package
- Win10安装.NetFamework3.5
步骤1:装载Win10安装镜像 本人用的是"cn_windows_10_multiple_editions_x64_dvd_6848463.iso" 如图,我把镜像装载到H盘; 步 ...
- c++中各类型数据所占字节数(一)
转自: https://blog.csdn.net/hi_baymax/article/details/82415896 和机器字长及编译器有关系: 所以,int,long int,short int ...
- Mybatis中#与$区别
#{}:使用 #{} 格式的语法会导致 MyBatis 创建 PreparedStatement 参数占位符并安全地设置参数(就像使用 ? 一样) ${}:使用 ${} 会在sql语句中插入一个不转义 ...
- Sublime自动去除代码行尾多余的空格
Preferences - > Settings - User 加入: "trim_trailing_white_space_on_save": true Ctrl+s就会自 ...