java使用POI进行 Excel文件解析
package com.timevale.esign.vip.util; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; import net.sf.json.JSONObject; import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
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.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import com.timevale.esign.db.bean.ErrRefLog;
import com.timevale.esign.db.utils.StringUtil;
import com.timevale.esign.db.utils.UUIDGenerator;
import com.timevale.esign.vip.bean.ExcelDataBean;
import com.timevale.esign.vip.constants.ExcelConstans; /**
* 类名:ExcellUtils.java <br/>
* 功能说明:excel解析工具类 <br/>
* 修改历史: <br/>
* 1.[2015年10月13日上午9:59:25]创建类 by hewu
*/
public class ExcelUtil { Workbook wb = null; List<String[]> dataList = new ArrayList<String[]>(100); private Logger LOG = LoggerFactory.getLogger(ExcelUtil.class); /**
* 功能说明:构造器
* @param path 修改历史:<br/>
* 1.[2015年10月13日下午3:52:19] 创建方法 by hewu
*/
public ExcelUtil(final String path) {
try {
final InputStream inp = new FileInputStream(path);
this.wb = WorkbookFactory.create(inp);
} catch (FileNotFoundException e) {
LOG.error("error to find excel File .", e);
e.printStackTrace();
} catch (InvalidFormatException e) {
LOG.error("error to InvalidFormat excel File .", e);
e.printStackTrace();
} catch (IOException e) {
LOG.error("error to deal excel File and found a IOException.", e);
e.printStackTrace();
}
} public ExcelUtil() { super();
} /**
* 功能说明:读取Excel所有数据,包含header
* @param sheetIndex sheet下标
* @return <br/>
* 修改历史:<br/>
* 1.[2015年10月13日下午3:21:47] 创建方法 by hewu
*/
public final ExcelDataBean readExcel(int sheetIndex) {
ExcelDataBean bean = new ExcelDataBean();
int columnNum = 0;
final Sheet sheet = this.wb.getSheetAt(sheetIndex);
String name = sheet.getRow(0).getCell(0).getStringCellValue().trim();
if (name.contains("企业")) {
bean.setType(ExcelConstans.USER_TYPE_ORGANIZE);
} else {
bean.setType(ExcelConstans.USER_TYPE_PERSON);
}
if (sheet.getRow(0) != null) {
columnNum = sheet.getRow(0).getLastCellNum()
- sheet.getRow(0).getFirstCellNum();
}
if (columnNum > 0) {
// for (Row row : sheet) {
int rowNum = sheet.getLastRowNum();
for (int k = 1; k <= rowNum; k++) {
final String[] singleRow = new String[columnNum];
int n = 0;
for (int i = 0; i < columnNum; i++) {
final Cell cell = sheet.getRow(k).getCell(i,
Row.CREATE_NULL_AS_BLANK);
switch (cell.getCellType()) {
case Cell.CELL_TYPE_BLANK:
singleRow[n] = "";
break;
case Cell.CELL_TYPE_BOOLEAN:
singleRow[n] = Boolean.toString(cell
.getBooleanCellValue());
break;
// 数值
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
singleRow[n] = String.valueOf(cell
.getDateCellValue());
} else {
cell.setCellType(Cell.CELL_TYPE_STRING);
String temp = cell.getStringCellValue();
// 判断是否包含小数点,如果不含小数点,则以字符串读取,如果含小数点,则转换为Double类型的字符串
if (temp.indexOf(".") > -1) {
singleRow[n] = String.valueOf(new Double(temp))
.trim();
} else {
singleRow[n] = temp.trim();
}
}
break;
case Cell.CELL_TYPE_STRING:
singleRow[n] = cell.getStringCellValue().trim();
break;
case Cell.CELL_TYPE_ERROR:
singleRow[n] = "";
break;
case Cell.CELL_TYPE_FORMULA:
cell.setCellType(Cell.CELL_TYPE_STRING);
singleRow[n] = cell.getStringCellValue();
if (singleRow[n] != null) {
singleRow[n] = singleRow[n].replaceAll("#N/A", "")
.trim();
}
break;
default:
singleRow[n] = "";
break;
}
n++;
}
// 如果第一行为空,跳过
final StringBuffer str1 = new StringBuffer();
for (int t = 0; t < columnNum; t++) {
str1.append(singleRow[t]);
}
if (!StringUtil.isNull(str1.toString())) {
this.dataList.add(singleRow);
}
}
}
bean.setColData(dataList);
return bean;
} /**
* 功能说明:读取Excel,返回Excel最大行index值,实际行数要加1
* @param sheetIndex sheet下标
* @return <br/>
* 修改历史:<br/>
* 1.[2015年10月13日下午3:21:58] 创建方法 by hewu
*/
public final int getRowNum(final int sheetIndex) {
final Sheet sheet = this.wb.getSheetAt(sheetIndex);
return sheet.getLastRowNum();
} /**
* 功能说明:读取Excel,返回数据的列数
* @param sheetIndex sheet下标
* @return int <br/>
* 修改历史:<br/>
* 1.[2015年10月13日下午3:22:07] 创建方法 by hewu
*/
public final int getColumnNum(final int sheetIndex) {
final Sheet sheet = this.wb.getSheetAt(sheetIndex);
final Row row = sheet.getRow(0);
if (row != null && row.getLastCellNum() > 0) {
return row.getLastCellNum();
}
return 0;
} /**
* 读取Excel,获取某一行数据
* @param sheetIndex sheet下标
* @param rowIndex 计数从0开始,rowIndex为0代表header行
* @return String[] 修改历史:<br/>
* 1.[2015年10月13日下午3:22:07] 创建方法 by hewu
*/
public final String[] getRowData(final int sheetIndex, final int rowIndex) {
String[] dataArray = null;
if (rowIndex > this.getColumnNum(sheetIndex)) {
return dataArray;
} else {
dataArray = new String[this.getColumnNum(sheetIndex)];
return this.dataList.get(rowIndex);
} } /**
* 功能说明:读取Excel获取某一列数据
* @param sheetIndex sheet下标
* @param colIndex 列下标
* @return <br/>
* 修改历史:<br/>
* 1.[2015年10月13日下午3:22:46] 创建方法 by hewu
*/
public final String[] getColumnData(final int sheetIndex, final int colIndex) {
String[] dataArray = null;
if (colIndex > this.getColumnNum(sheetIndex)) {
return dataArray;
} else {
if (this.dataList != null && this.dataList.size() > 0) {
dataArray = new String[this.getRowNum(sheetIndex) + 1];
int index = 0;
for (String[] rowData : this.dataList) {
if (rowData != null) {
dataArray[index] = rowData[colIndex];
index++;
}
}
}
}
return dataArray; } /**
* 功能说明:导出excel(按照参数 userType导出个人/企业的失败日志)
* @param templatePath 导出模板路径
* @param ErrRefLogs 错误对象
* @param userType 用户类型
* @return String 导出的excel的临时文件<br/>
* 修改历史:<br/>
* 1.[2015年10月13日下午8:06:48] 创建方法 by hewu
*/
public String writeExcel(String templatePath, List<ErrRefLog> errRefLogs,
int userType) {
String onceFile = "";
onceFile = FileUtil.Copy(new File(templatePath), getClass()
.getResource("/errlog").getFile()
+ UUIDGenerator.getUUID()
+ ".xlsx");
FileInputStream input = null;
Workbook workbook = null;
String regStr = "[\\【\\,\\】]";
try {
input = new FileInputStream(new File(onceFile));
workbook = WorkbookFactory.create(input);
} catch (Exception e) {
e.printStackTrace();
this.LOG.error("error to create write Excel", e);
}
final Sheet sheet = workbook.getSheetAt(0);
if (userType == ExcelConstans.USER_TYPE_PERSON) {
// 解析每一条数据,增加行
for (int i = 0; i < errRefLogs.size(); i++) {
ErrRefLog log = errRefLogs.get(i);
final Row row = sheet.createRow(i
+ ExcelConstans.EXCEL_START_INDEX);
// 增加列数据
// ErrRefLog errRefLog = ErrRefLogs.get(i);
final CellStyle ss = workbook.createCellStyle();
ss.setLocked(false); final Cell nameC = row.createCell(0);
nameC.setCellStyle(ss);
nameC.setCellType(XSSFCell.CELL_TYPE_STRING);
nameC.setCellValue(log.getName());// 写入内容 final Cell mobileC = row.createCell(1);
mobileC.setCellType(XSSFCell.CELL_TYPE_STRING);
mobileC.setCellStyle(ss);
mobileC.setCellValue(log.getMobile());// 写入内容 final Cell idNoC = row.createCell(2);
idNoC.setCellType(XSSFCell.CELL_TYPE_STRING);
idNoC.setCellStyle(ss);
idNoC.setCellValue(log.getIdNo());// 写入内容 // final Cell emailC = row.createCell(3);
// emailC.setCellType(XSSFCell.CELL_TYPE_STRING);
// emailC.setCellStyle(ss);
// emailC.setCellValue(log.getEmail());// 写入内容 final Cell companyC = row.createCell(3);
companyC.setCellType(XSSFCell.CELL_TYPE_STRING);
companyC.setCellStyle(ss);
companyC.setCellValue(log.getOrgan());// 写入内容 StringBuffer errReason = new StringBuffer();
final Cell reasonC = row.createCell(4);
reasonC.setCellType(XSSFCell.CELL_TYPE_STRING);
reasonC.setCellStyle(ss);
if(log.getErrReason().contains("【")){
String [] reason = log.getErrReason().split(regStr);
errReason.append(reason[0]+"【");
errReason.append("*"+reason[1].subSequence(reason[1].length()-1, reason[1].length())+","+reason[2].substring(0, 6)+"****");
errReason.append("】"+reason[3]);
reasonC.setCellValue(errReason.toString());
}else {
reasonC.setCellValue(log.getErrReason());
}
}
} else if (userType == ExcelConstans.USER_TYPE_ORGANIZE) {
// 解析每一条数据,增加行
for (int i = 0; i < errRefLogs.size(); i++) {
final ErrRefLog log = errRefLogs.get(i);
final JSONObject obj = JSONObject.fromObject(log
.getContentJson());
final Row row = sheet.createRow(i
+ ExcelConstans.EXCEL_START_INDEX);
// 增加列数据
// ErrRefLog errRefLog = ErrRefLogs.get(i);
final CellStyle ss = workbook.createCellStyle();
ss.setLocked(false);
ss.setAlignment(CellStyle.ALIGN_CENTER);
// 企业名称
final Cell nameC = row.createCell(0);
nameC.setCellStyle(ss);
nameC.setCellType(XSSFCell.CELL_TYPE_STRING);
nameC.setCellValue(log.getName());
// 手机号
final Cell mobileC = row.createCell(1);
mobileC.setCellType(XSSFCell.CELL_TYPE_STRING);
mobileC.setCellStyle(ss);
mobileC.setCellValue(log.getMobile());
// 组织机构代码证号
final Cell organCodeC = row.createCell(2);
organCodeC.setCellType(XSSFCell.CELL_TYPE_STRING);
organCodeC.setCellStyle(ss);
organCodeC.setCellValue(log.getOrganCode());
// 邮箱
// final Cell emailC = row.createCell(3);
// emailC.setCellType(XSSFCell.CELL_TYPE_STRING);
// emailC.setCellStyle(ss);
// emailC.setCellValue(log.getEmail());
// 单位类型
final Cell companyC = row.createCell(3);
companyC.setCellType(XSSFCell.CELL_TYPE_STRING);
companyC.setCellStyle(ss);
companyC.setCellValue(obj.getInt("organType"));
// 注册类型
final Cell userTypeC = row.createCell(4);
userTypeC.setCellType(XSSFCell.CELL_TYPE_STRING);
userTypeC.setCellStyle(ss);
userTypeC.setCellValue(obj.getInt("userType"));
// 工商注册号
final Cell regCodeC = row.createCell(5);
regCodeC.setCellType(XSSFCell.CELL_TYPE_STRING);
regCodeC.setCellStyle(ss);
regCodeC.setCellValue(obj.getString("regCode"));
// 法定代表姓名
final Cell legalNameC = row.createCell(6);
legalNameC.setCellType(XSSFCell.CELL_TYPE_STRING);
legalNameC.setCellStyle(ss);
legalNameC.setCellValue(obj.getString("legalName"));
// 法定代表人身份证号
final Cell legalIdNoC = row.createCell(7);
legalIdNoC.setCellType(XSSFCell.CELL_TYPE_STRING);
legalIdNoC.setCellStyle(ss);
legalIdNoC.setCellValue(obj.getString("legalIdNo"));
// 法定代表人归属地
final Cell legalAreaC = row.createCell(8);
legalAreaC.setCellType(XSSFCell.CELL_TYPE_STRING);
legalAreaC.setCellStyle(ss);
legalAreaC.setCellValue(obj.getInt("legalArea"));
// 代理人姓名
final Cell agentNameC = row.createCell(9);
agentNameC.setCellType(XSSFCell.CELL_TYPE_STRING);
agentNameC.setCellStyle(ss);
agentNameC.setCellValue(obj.getString("agentName"));
// 代理人姓名
final Cell agentIdNoC = row.createCell(10);
agentIdNoC.setCellType(XSSFCell.CELL_TYPE_STRING);
agentIdNoC.setCellStyle(ss);
agentIdNoC.setCellValue(obj.getString("agentIdNo"));
// 公司地址
final Cell addressC = row.createCell(11);
addressC.setCellType(XSSFCell.CELL_TYPE_STRING);
addressC.setCellStyle(ss);
addressC.setCellValue(obj.getString("address"));
// 经营范围
final Cell scopeC = row.createCell(12);
scopeC.setCellType(XSSFCell.CELL_TYPE_STRING);
scopeC.setCellStyle(ss);
scopeC.setCellValue(obj.getString("scope"));
// 失败原因
StringBuffer errReason = new StringBuffer();
final Cell reasonC = row.createCell(13);
reasonC.setCellType(XSSFCell.CELL_TYPE_STRING);
reasonC.setCellStyle(ss);
if(log.getErrReason().contains("【")){
String [] reason = log.getErrReason().split(regStr);
errReason.append(reason[0]+"【");
errReason.append("*"+reason[1].subSequence(reason[1].length()-1, reason[1].length())+","+reason[2].substring(0, 6)+"****");
errReason.append("】"+reason[3]);
reasonC.setCellValue(errReason.toString());
}else {
reasonC.setCellValue(log.getErrReason());
}
}
} else { }
// 新建一输出流
FileOutputStream fout;
try {
fout = new FileOutputStream(onceFile);
// 存盘
workbook.write(fout);
fout.flush();
// 结束关闭
fout.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
this.LOG.error("fileNotFoundException", e);
} catch (IOException e) {
e.printStackTrace();
this.LOG.error("IOException", e);
}
return onceFile;
} // public static void main(String[] args) {
// // 导入excel
// // ExcelUtils utils = new ExcelUtils("D:\\用户导入模版.xls");
// ExcelUtil utils = new ExcelUtil("d:\\企业用户导入模版 .xlsx");
// List<String[]> list = utils.readExcel(0);
// for (int i = 0; i < list.size(); i++) {
// String[] str = list.get(i);
// for (int j = 0; j < str.length; j++) {
// System.out.println(str[j]);
// }
//
// }
// //导出excel
// ExcelUtils utils = new ExcelUtils(
// ExcelConstans.ERR_ORGANIZE_ACCOUNT_EXPORT_DIR);
// List<ErrRefLog> accounts = new ArrayList<ErrRefLog>();
// String path = utils.writeExcel(
// ExcelConstans.ERR_ORGANIZE_ACCOUNT_EXPORT_DIR, accounts, 2);
// System.out.println(path);
// }
// public static void main(String[] args) {
// String regStr = "[\\【\\,\\】]";
// String s = "我是【张三,430381199007086018】使用";
// System.out.println(s.split(regStr)[2]);
//
// }
}
文件解析的相关依赖包可以去maven库下载
java使用POI进行 Excel文件解析的更多相关文章
- java使用POI实现excel文件的读取,兼容后缀名xls和xlsx
需要用的jar包如下: 如果是maven管理的项目,添加依赖如下: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --&g ...
- Java Struts2 POI创建Excel文件并实现文件下载
Java Struts2 POI创建Excel文件并实现文件下载2013-09-04 18:53 6059人阅读 评论(1) 收藏 举报 分类: Java EE(49) Struts(6) 版权声明: ...
- JAVA使用POI读取EXCEL文件的简单model
一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...
- java通过poi编写excel文件
public String writeExcel(List<MedicalWhiteList> MedicalWhiteList) { if(MedicalWhiteList == nul ...
- Java使用POI操作Excel文件
1.简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式文件读和写的功能. 2.依赖的jar包 <!-- ex ...
- java使用POI操作excel文件,实现批量导出,和导入
一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...
- Java实现POI读取Excel文件,兼容后缀名xls和xlsx
1.引入所需的jar包: maven管理项目的话直接添加以下坐标即可: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -- ...
- java的poi导入excel时解析日期
if (r.getCellType()==Cell.CELL_TYPE_NUMERIC){ if(HSSFDateUtil.isCellDateFormatted(r)){ //用于转化为日期格式 D ...
- Java通过poi创建Excel文件并分页追加数据
以下的main函数,先生成一个excel文件,并设置sheet的名称,设置excel头:而后,以分页的方式,向文件中追加数据 maven依赖 <dependency> <groupI ...
随机推荐
- php+jquery 实现 ajax上传图片到非当前服务器
用 html file控件上传图片,因为 $_FILES["file"] 是传到当前服务器,想要上传到另外一个服务器需要通过服务器脚本实现. 1.图片上传 引入jquery 和 a ...
- springboot项目部署运行(后台);端口被占用;
打包: mvn clean package -Pprod -Dmaven.test.skip=true -Pprod 使用生产环境配置: -DskipTests,不执行测试用例,但编译测试用例类生成相 ...
- IDEA开发javaEE项目问题总结
删了删了,不瞎折腾了,用Maven嘛事没有 注意在idea中,add framework后还需要在maven中添加相关依赖
- kali linux之sqlmap
一款开源的命令行自动SQL注入工具,它能够对多种主流数据库进行扫描支持,基于Python环境. 检测动态页面中get/post参数,cookie,http头 数据榨取/文件系统访问 操作系统命令执行 ...
- Android手机中怎么样在没root的情况下 修改 hosts 文件
工具 链接:https://pan.baidu.com/s/1AENluDCQ-2qYDPcE5K6l8g 密码:t7eu http://bbs.360.cn/forum.php?mod=view ...
- mysql的innodb自增主键为什么不是连续的
图1 图1中是表t原有的数据,这个时候我们执行show create table t会看到如下输出,如图二所示现在的自增值是2,也就是下一个不指定主键值的插入的数据的主键就是2 图2 Innodb引擎 ...
- 模板【洛谷P3812】 【模板】线性基
P3812 [模板]线性基 给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大. code: #include <iostream> #include <cs ...
- Win通过端口号结束进程
准备: 01在cmd中查看命令使用 格式:命令名称 /? 02netstat 03findstr C:\Users\Good>findstr /? 在文件中寻找字符串. ...... strin ...
- 对于自我管理 ObjectContextManager的测试
书接上文, 把代码改为多线程, public class Threads { public static void allStart() { for (int i = 0; i < 10; ...
- bootsafe64 ev.sys
Win10 安装了驱动精灵之后,直接蓝屏,再次重启,出现: 采用PE启动盘进入系统,之后将C:\WINDOWS\system32\drivers下kavbootc.sys文件删除了,重启之后就可以进入 ...