一、jar包

二、工具类

package excel;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List; 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 org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class XLSOprUtil {
private static final Logger logger = LoggerFactory.getLogger(XLSOprUtil.class); public static void main(String[] args) throws Exception {
final String filename = "userInfo.xlsx";
new XLSOprUtil(filename).readExcel(0);
} private InputStream inp;
private String filePath; public XLSOprUtil(String filePath) throws FileNotFoundException {
this.inp = new FileInputStream(filePath);
this.filePath = filePath;
} /**
* 读取xls文件内容
*
* @param isCloseStream
* true:读取内容完成后,关闭流;false:不管比
* @return
*/
public List<RowContent> readExcel(int sheetIndex, boolean isCloseStream) {
try {
long s1 = System.nanoTime();
Workbook wb = getXLSWorkBook(this.filePath, this.inp); if (wb == null)
return null;
Sheet sheet = getXLSSheet(wb, sheetIndex); List<RowContent> rowsContent = readSheetContent(sheet); long s2 = System.nanoTime();
logger.debug("readSheetContent coast times:" + (s2 - s1) / 1000000); return rowsContent;
} catch(Exception e)
{
logger.error("readExcel 异常", e);
return null;
} finally
{
if(isCloseStream)
{
destory();
}
}
} /**
* 重载,默认读取完成后,关闭流
*
* @return
*/
public List<RowContent> readExcel(int sheetIndex) {
return readExcel(sheetIndex, true);
} /**
*
* @param sheet
* @return
*/
public List<RowContent> readSheetContent(Sheet sheet) {
if (sheet == null) {
return null;
} List<RowContent> rowsContent = new ArrayList<XLSOprUtil.RowContent>(); int itemNum = sheet.getLastRowNum();
logger.info("Sheet名称:{}, 行数:{}", sheet.getSheetName(), itemNum); for (Row row : sheet) {
int cellNum = row.getLastCellNum();
String[] cells = new String[cellNum];
int index = 0;
boolean isAllEmpty = true; // 判断某一行内容是否为空
for (Cell cell : row) {
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:
// System.out.print("数字型单元格内容:" + cell.getNumericCellValue()
// + " ");
cells[index++] = String.valueOf(cell.getNumericCellValue());
isAllEmpty = false;
break;
case Cell.CELL_TYPE_STRING:
// System.out.print("字符串型单元格内容:" + cell.getStringCellValue()
// + " ");
cells[index++] = String.valueOf(cell.getStringCellValue());
isAllEmpty = false;
break;
default:
index++;
break;
}
} if (!isAllEmpty) {
RowContent rowContent = new RowContent();
rowContent.setRowCells(cells);
rowsContent.add(rowContent);
}
} return rowsContent;
} /**
*
*/
public void destory() {
if (inp != null) {
try {
inp.close();
logger.debug("--- 关闭读取的文件流 成功 ----");
} catch (Exception e) {
logger.error(e.toString());
}
}
} /**
* 适配不同的excel文档版本
*
* @param filename
* @param inp
* @return
* @throws IOException
*/
public Workbook getXLSWorkBook(String filename, InputStream inp)
throws IOException {
if (filename.matches("^(.*.xls)$")) {
return new HSSFWorkbook(inp);
} else {
return new XSSFWorkbook(inp);
}
} /**
* 获取指定的工作表
*
* @param wb
* @param number
* @return
*/
public Sheet getXLSSheet(Workbook wb, int number) {
if (wb != null) {
return wb.getSheetAt(number);
}
return null;
} @SuppressWarnings("serial")
public class RowContent implements Serializable{
private String[] rowCells; /**
* @return the rowCells
*/
public String[] getRowCells() {
return rowCells;
} /**
* @param rowCells
* the rowCells to set
*/
public void setRowCells(String[] rowCells) {
this.rowCells = rowCells;
}
}
}

三、使用

excel读取的更多相关文章

  1. java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)

    使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...

  2. excel读取 工具类

    package cn.yongche.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOExce ...

  3. NPOI 2.0 Excel读取显示

    NPOI 2.0 Excel读取显示   最近接到需求,需要把excel表格里的数据原样展示到web页面,主要是满足随意跨行跨列. 之前用过一点NPOI,不过接触的不太多,趁这次机会再熟悉一下.由于操 ...

  4. Pandas之Dateframe 实现Excel读取与写入

    目的:有时需对数据进行到出到Excel,直观的给别人参阅,或从Excel中读取数据进行操作和分析依赖库 pandas 可简单的读出和写入 1,根据Excel读取( 需安装xlrd库) import n ...

  5. EPPlus实战篇——Excel读取

    .net core 项目 可以从excel读取任何类型(T)的数据,只要T中的field的[Display(Name = "1233")]中的name==excel column ...

  6. php excel 读取日期问题

    在 php excel 读取 xls 格式的文件时,xls 上面显示的是正常的日期格式 但是读取出来的话,就会是一个万位整形数据,这显然不是我们想要的日期 读取出来的结果: 41807 $t = 41 ...

  7. 利用poi包装一个简单的Excel读取器.一(适配一个Reader并提供readLine方法)

    通常,读文本我们会使用BufferedReader,它装饰或者说管理了InputStreamReader,同时提供readLine()简化了我们对文本行的读取.就像从流水线上获取产品一样,每当取完一件 ...

  8. C#连接Excel读取与写入数据库SQL ( 上 )

    第一次写C#与sql的东西,主要任务是从Excel读取数据,再存到SQL server中. 先上读取Excel文件的code如下. public bool GetFiles(string equipN ...

  9. Excel 读取写入数据库

    // Excel 读取写入数据库 // 3.8版本的poi  4.0 可以不用写  parseCell  这个方法,可以直接赋值 STRING 类型 import org.apache.poi.hss ...

随机推荐

  1. 总结工作中常见的linux命令

    本文是总结下自己在工作中遇到的常见linux 命令,会持续更新! 1.文件路径切换 进入 cd 返回上一级  cd .. 2.复制 cp 源文件名 目标文件夹 cp log.log test5 3.编 ...

  2. HTML入门教程

    什么是 HTML?     HTML(Hyper Text Markup Language)超文本标记语言,是用来描述网页的一种语言,不是一种编程语言,而是一种标记语言 (markup languag ...

  3. MaxScale:实现MySQL读写分离与负载均衡的中间件利器

    1. MaxScale 是干什么的? 配置好了 MySQL 的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡. 读写分离和负载均衡 是MySQL集群的 ...

  4. CentOS 6.5、6.7 设置静态 ip 教程

    CentOS 6.5.6.7 设置静态 ip 教程,可以ping通外网:www.baidu.com ①. 网络适配器(VMware Network Adapter) 选择NAT模式 ②. 设置静态 i ...

  5. HTML5 canvas处理图片的各种效果,包括放大缩小涂鸦等

    http://www.htmleaf.com/ziliaoku/qianduanjiaocheng/201502151385.html jQuery 缩放 旋转 裁剪图片 Image Cropper ...

  6. [原]excel启动时死锁

    项目中遇到的一个死锁问题!   代码大概如下: 调用SetWinEventHook安装了进程内钩子,dll注入到excel进程后,专门开启一个线程来分发监听到的事件信息,并在该线程内会获取IAcces ...

  7. javascript 组合

    1. 大数组中有m个元素,抽取其中的n个进行组合. var combination = function(arr, num){ var r=[]; (function f(t,a,n) { ) { r ...

  8. word域3

    WORD是文字处理软件,我们在日常处理一些文字时经常遇到一些问题,如:各种公式的录入,尽管Word都提供了"公式编辑器",但其插入的却是"对象",有时排版会感觉 ...

  9. JAVA程序操作hbase的Maven配置pom.xml文件

    由于工作需要,用到Java连接Hbase读写数据.原来的方式是直接将依赖的jar包全部下载下来,然后工程里面引用. 现想重构下,改为使用Maven管理,遇到了各种坑,各种不好使,特总结下. <d ...

  10. FPGA重要设计思想

    FPGA重要设计思想   1.速度和面积互换原则.以面积换速度可以实现很高的数据吞吐率,其实串/并转换.就是一种以面积换速度的思想 2.乒乓操作. 3.串/并转换的思想. 高速数据处理的重要技巧之一. ...