Java解析excel文档并以List<T>输出
/********************************************************工具类start*****************************************************************/
package cn.cnnho.utils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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 java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
/**
* @功能描述: excel文件解析工具
*/
public class BatchUploadUtlis {
/**
* @功能描述:将excel解析为list结合返回
* @参数说明:@param excelPath excel路径
* @参数说明:@return
* @作者: Jgx
* @创建时间:2019年4月26日 下午3:06:54
*/
@SuppressWarnings("resource")
public List<BatchUploadInfo> mentondExecute(String excelPath) {
BatchUploadInfo buInfo =null;
List<BatchUploadInfo> buList = new ArrayList<BatchUploadInfo>();
try {
File excel = new File(excelPath);
//判断文件是否存在
if (excel.isFile() && excel.exists()) {
//转移.特殊字符
String[] split = excel.getName().split("\\.");
Workbook wb;
//根据文件后缀(xls/xlsx)进行判断
if ( "xls".equals(split[1])){
FileInputStream fis = new FileInputStream(excel); //文件流对象
wb = new HSSFWorkbook(fis);
}else if ("xlsx".equals(split[1])){
wb = new XSSFWorkbook(excel);
}else {
System.out.println("文件类型错误!");
return null;
}
/**
* 开始解析
*/
Sheet sheet = wb.getSheetAt(0);//读取sheet 0
int firstRowIndex = sheet.getFirstRowNum()+1;//第一行是列名,所以不读
int lastRowIndex = sheet.getLastRowNum();//总行数
System.out.println("总行数: "+lastRowIndex);
/* 遍历行*/
for(int rIndex = firstRowIndex; rIndex <= lastRowIndex; rIndex++) {
Row row = sheet.getRow(rIndex);
if (row != null) {
int firstCellIndex = row.getFirstCellNum();
int lastCellIndex = row.getLastCellNum();
buInfo = new BatchUploadInfo();
/*遍历列*/
for (int cIndex = firstCellIndex; cIndex < lastCellIndex; cIndex++) {
Cell cell = row.getCell(cIndex);
switch(cIndex){
case 1:
buInfo.setDepName(cell.toString());break;
case 2:
buInfo.setStorageLocation(cell.toString());break;
case 3:
buInfo.setContractName(cell.toString());break;
case 4:
buInfo.setContractNo(cell.toString());break;
case 5:
buInfo.setPartyA(cell.toString());break;
case 6:
buInfo.setPartyB(cell.toString());break;
case 7:
buInfo.setHeir(cell.toString());break;
case 8:
buInfo.setTheSignOne(cell.toString());break;
case 9:
buInfo.setTheSignDate(cell.toString());break;
case 10:
buInfo.setElectronicEdition(cell.toString());break;
case 11:
buInfo.setContent(cell.toString());break;
case 12:
buInfo.setStorageType(cell.toString());break;
case 13:
buInfo.setIsSame(cell.toString());break;
case 14:
buInfo.setStorageDate(cell.toString());break;
case 15:
buInfo.setRemark(cell.toString());break;
default:
break;
}
}
buList.add(buInfo);
}
}
} else {
System.out.println("找不到指定的文件");
}
} catch (Exception e) {
e.printStackTrace();
}
return buList;
}
public static void main(String[] args) {
BatchUploadUtlis buu = new BatchUploadUtlis();
List<BatchUploadInfo> list = buu.mentondExecute("F:\\工作资料\\20190228档案管理\\合同\\合同\\合同登记表(测试).xls");
for(int i = 0 ; i < list.size() ; i++) {
System.out.println(list.get(i).getContractNo());
}
}
}
/********************************************************工具类end*****************************************************************/
/********************************************************实体类start*****************************************************************/
package cn.cnnho.utils;
/**
* @功能描述:bean
*/
public class BatchUploadInfo {
private String id;
private String depName;
private String storageLocation;
private String contractName;
private String contractNo;
private String partyA;
private String partyB;
private String heir;
private String theSignOne;
private String theSignDate;
private String electronicEdition;
private String content;
private String storageType;
private String isSame;
private String storageDate;
private String remark;
public String getIsSame() {
return isSame;
}
public void setIsSame(String isSame) {
this.isSame = isSame;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDepName() {
return depName;
}
public void setDepName(String depName) {
this.depName = depName;
}
public String getStorageLocation() {
return storageLocation;
}
public void setStorageLocation(String storageLocation) {
this.storageLocation = storageLocation;
}
public String getContractName() {
return contractName;
}
public void setContractName(String contractName) {
this.contractName = contractName;
}
public String getContractNo() {
return contractNo;
}
public void setContractNo(String contractNo) {
this.contractNo = contractNo;
}
public String getPartyA() {
return partyA;
}
public void setPartyA(String partyA) {
this.partyA = partyA;
}
public String getPartyB() {
return partyB;
}
public void setPartyB(String partyB) {
this.partyB = partyB;
}
public String getHeir() {
return heir;
}
public void setHeir(String heir) {
this.heir = heir;
}
public String getTheSignOne() {
return theSignOne;
}
public void setTheSignOne(String theSignOne) {
this.theSignOne = theSignOne;
}
public String getTheSignDate() {
return theSignDate;
}
public void setTheSignDate(String theSignDate) {
this.theSignDate = theSignDate;
}
public String getElectronicEdition() {
return electronicEdition;
}
public void setElectronicEdition(String electronicEdition) {
this.electronicEdition = electronicEdition;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getStorageType() {
return storageType;
}
public void setStorageType(String storageType) {
this.storageType = storageType;
}
public String getStorageDate() {
return storageDate;
}
public void setStorageDate(String storageDate) {
this.storageDate = storageDate;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
/********************************************************实体类end****************************************************************/
所需jar包
commons-collections4-4.1.jar
curvesapi-1.04.jar
poi-3.15.jar
poi-ooxml-3.15.jar
poi-ooxml-schemas-3.15.jar
stax-api-1.0.1.jar
xmlbeans-2.6.0.jar
Java解析excel文档并以List<T>输出的更多相关文章
- Android解析Excel文档完整示例
MainActivity如下: package cc.testexcel; import java.io.File; import jxl.Cell; import jxl.CellType; imp ...
- java 解析XML文档
Java 解析XML文档 一.解析XML文档方式: 1.DOM方式:将整个XML文档读取到内存中,按照XML文件的树状结构图进行解析. 2.SAX方式:基于事件的解析,只需要加载XML中的部分数据,优 ...
- Java解析XML文档(简单实例)——dom解析xml
一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...
- POI使用:用poi接口不区分xls/xlsx格式解析Excel文档(41种日期格式解析方法,5种公式结果类型解析方法,3种常用数值类型精度控制办法)
一.使用poi解析excel文档 注:全部采用poi接口进行解析,不需要区分xls.xlsx格式,不需要判断文档类型. poi中的日期格式判断仅支持欧美日期习惯,对国内的日期格式并不支持判断,怎么办? ...
- Java解析XML文档——dom解析xml
一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object M ...
- Oracle PLSQL读取(解析)Excel文档
http://www.itpub.net/thread-1921612-1-1.html !!!https://code.google.com/p/plsql-utils/ Introduction介 ...
- 浅谈用java解析xml文档(四)
继续接上一文,这一阵子因为公司项目加紧,导致最后一个解析xml文档的方式,还没有总结,下面总结使用dom4J解析xml. DOM4J(Document Object Model for Java) 使 ...
- 浅谈用java解析xml文档(三)
接上一篇,本文介绍使用JDOM解析xml文档, 首先我们还是应该知道JDOM从何而来,是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初, JDOM作 ...
- Java解析word文档
背景 在互联网教育行业,做内容相关的项目经常碰到的一个问题就是如何解析word文档. 因为系统如果无法智能的解析word,那么就只能通过其他方式手动录入word内容,效率低下,而且人工成本和录入出错率 ...
随机推荐
- eclipse Multiple annotations found at this line
参考:http://blog.csdn.net/li396864285/article/details/42745071 这样的错不影响编程,是eclipse的校验问题 去掉相应的Build就行了
- C#记录程序运行时间
主要:using System.Diagnostics;当中有Stopwatch类: 介绍如下: // 摘要: // 提供一组方法和属性,可用于准确地测量运行时间. public class Stop ...
- 编写高质量代码改善C#程序的157个建议——建议62:避免嵌套异常
建议62:避免嵌套异常 应该允许异常在调用堆栈上往上传,不要过多的使用catch,然后再throw.过多的使用catch会带来两个问题: 1)代码更多了.这看上去好像你根本不知道怎么处理异常,所以你总 ...
- APUE(4)---文件和目录 (2)
七.函数umask umask函数为进程设置文件模式创建屏蔽字,并返回之前的值,这是少数几个没有出错返回函数中的一个.其中cmask是9个常量(S_IR/W/XUSR.S_IR/W/XGRP.S_IR ...
- 推荐一款优秀的代码编辑软件--Source Insight
“工欲善其事,必先利其器”,好的工具能够提高我们办事的效率,进而提升团队乃至企业的竞争力. 对于软件开发工程师来说,选择一款优秀的代码编辑软件也是很重要的.最近,我看到有很多同事还在用微软的VC ++ ...
- EF中三大开发模式之DB First,Model First,Code First以及在Production Environment中的抉择
一:ef中的三种开发方式 1. db first... db放在第一位,在我们开发之前必须要有完整的database,实际开发中用到最多的... <1> DBset集合的单复数... db ...
- Android-广播发送与接收(Java代码中订阅)
Android四大组件之一广播,使用的也比较多,广播可大致分为两种,一种是Android系统区域的广播,是由系统指令发出,例如:点亮屏幕广播,开机过程中的一些广播 省略…, 然而还有一种广播就是我们自 ...
- [Erlang12] Mnesia分布式应用
[Erl_Question12] Mnesia分布式应用 情景: 设计一个图书管理系统,需求: 1. 基本的增删查改功能; 2. 支持多节点备份(其中一个节点挂了进,对外接口不影响). 方案一: Er ...
- IO--磁盘理论
磁盘从圆心由内向外被分成多个磁道,而每个磁道会被划分成多个连续的扇区 扇区是磁盘寻址的最小单位,而实际上分配空间最小的单位是簇(cluster),因此导致文件大小和实际占用空间大小不一样 磁盘读写数据 ...
- WPF 实现INotifyPropertyChanged .Net Framework 4.5
自己动手写了一个基类来实现INotifyPropertyChanged接口,以后可以直接使用. using System.ComponentModel; using System.Runtime.Co ...