poiexcel 读取引用列_java用poi读取Excel表格中的数据
Java读写Excel的包是Apache POI(项目地址:http://poi.apache.org/),因此需要先获取POI的jar包,本实验使用的是POI 3.9稳定版。
Apache POI 代码例子地址:http://poi.apache.org/spreadsheet/quick-guide.html
本例子可以读取Microsoft Office Excel 2003/2007/2010,具体代码及注释如下:
读取“.xls”格式使用 import org.apache.poi.hssf.usermodel.*;包的内容,例如:HSSFWorkbook
读取“.xlsx”格式使用 import org.apache.poi.xssf.usermodel.*; 包的内容,例如:XSSFWorkbook
读取两种格式使用 import org.apache.poi.ss.usermodel.* 包的内容,例如:Workbook
引入包如下:
1 importorg.apache.poi.ss.usermodel.Cell;2 importorg.apache.poi.ss.usermodel.Row;3 importorg.apache.poi.ss.usermodel.Sheet;4 importorg.apache.poi.ss.usermodel.Workbook;5 importorg.apache.poi.ss.usermodel.WorkbookFactory;6 import org.apache.poi.ss.usermodel.DateUtil;
【其中的DateUtil不是必须的】
1 /**
2 * 读取Excel测试,兼容 Excel 2003/2007/20103 */
4 publicString readExcel()5 {6 SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");7 try{8 //同时支持Excel 2003、2007
9 File excelFile = new File("/home/zht/test.xls"); //创建文件对象
10 FileInputStream is = new FileInputStream(excelFile); //文件流
11 Workbook workbook = WorkbookFactory.create(is); //这种方式 Excel 2003/2007/2010 都是可以处理的
12 int sheetCount = workbook.getNumberOfSheets(); //Sheet的数量13 //遍历每个Sheet
14 for (int s = 0; s < sheetCount; s++) {15 Sheet sheet =workbook.getSheetAt(s);16 int rowCount = sheet.getPhysicalNumberOfRows(); //获取总行数17 //遍历每一行
18 for (int r = 0; r < rowCount; r++) {19 Row row =sheet.getRow(r);20 int cellCount = row.getPhysicalNumberOfCells(); //获取总列数21 //遍历每一列
22 for (int c = 0; c < cellCount; c++) {23 Cell cell =row.getCell(c);24 int cellType =cell.getCellType();25 String cellValue = null;26 switch(cellType) {27 case Cell.CELL_TYPE_STRING: //文本
28 cellValue =cell.getStringCellValue();29 break;30 case Cell.CELL_TYPE_NUMERIC: //数字、日期
31 if(DateUtil.isCellDateFormatted(cell)) {32 cellValue = fmt.format(cell.getDateCellValue()); //日期型
33 }34 else{35 cellValue = String.valueOf(cell.getNumericCellValue()); //数字
36 }37 break;38 case Cell.CELL_TYPE_BOOLEAN: //布尔型
39 cellValue =String.valueOf(cell.getBooleanCellValue());40 break;41 case Cell.CELL_TYPE_BLANK: //空白
42 cellValue =cell.getStringCellValue();43 break;44 case Cell.CELL_TYPE_ERROR: //错误
45 cellValue = "错误";46 break;47 case Cell.CELL_TYPE_FORMULA: //公式
48 cellValue = "错误";49 break;50 default:51 cellValue = "错误";52 }53 System.out.print(cellValue + " ");54 }55 System.out.println();56 }57 }58
59 }60 catch(Exception e) {61 e.printStackTrace();62 }63
64 returnAction.SUCCESS;65 }
如果执行的代码的过程中报出如下错误:
poi导入excel表格数据时Cannot get a text value from a numeric cell
异常描述:在导入excel的时候在获取excel单元格数据的时候会出现Cannot get a text value from a numeric cell的异常抛出。
异常原因:poi读取excel单元格的数据,cell有不同的数据类型(CELL_TYPE_NUMERIC,CELL_TYPE_STRING,CELL_TYPE_FORMULA),如果cell中的数据是数值的话,如果你没有给他设置cell的类型的话。默认会认为是CELL_TYPE_NUMERICl类型,如果从一个NUMBER类型的Cell使用.cell.getStringCellValue()读取出一个字符串就会出错。
解决的方法:在读取数据之前,设置cell的类型为CELL_TYPE_STRING;
cell.setCellType(Cell.CELL_TYPE_STRING);
所以,上面的代码可以简单写成:
1 /**
2 * 读取Excel测试,兼容 Excel 2003/2007/20103 */
4 publicString readExcel()5 {6 SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");7 try{8 //同时支持Excel 2003、2007
9 File excelFile = new File("/home/zht/test.xls"); //创建文件对象
10 FileInputStream is = new FileInputStream(excelFile); //文件流
11 Workbook workbook = WorkbookFactory.create(is); //这种方式 Excel 2003/2007/2010 都是可以处理的
12 int sheetCount = workbook.getNumberOfSheets(); //Sheet的数量13 //遍历每个Sheet
14 for (int s = 0; s < sheetCount; s++) {15 Sheet sheet =workbook.getSheetAt(s);16 int rowCount = sheet.getPhysicalNumberOfRows(); //获取总行数17 //遍历每一行
18 for (int r = 0; r < rowCount; r++) {19 Row row =sheet.getRow(r);20 int cellCount = row.getPhysicalNumberOfCells(); //获取总列数21 //遍历每一个单元格
22 for (int c = 0; c < cellCount; c++) {23 Cell cell =row.getCell(c);24 int cellType =cell.getCellType();25 String cellValue = null;26
27 //在读取单元格内容前,设置所有单元格中内容都是字符串类型
28 cell.setCellType(Cell.CELL_TYPE_STRING);29
30 //按照字符串类型读取单元格内数据
31 cellValue =cell.getStringCellValue();32
33 /*在这里可以对每个单元格中的值进行二次操作转化*/
34
35 System.out.print(cellValue + " ");36 }37 System.out.println();38 }39 }40
41 }42 catch(Exception e) {43 e.printStackTrace();44 }45
46 returnAction.SUCCESS;47 }
项目中原来就有maven的相关poi依赖,具体如下:
1 maven依赖配置:2
3
4 fakepath
5 poi-ooxml-schemas
6 3.14-20160307
7
8 fakepath
9 poi-scratchpad
10 3.14-20160307
11
12 fakepath
13 poi-ooxml
14 3.14-20160307
15
16 fakepath
17 poi-examples
18 3.14-20160307
19
20 fakepath
21 poi-excelant
22 3.14-20160307
23
24 fakepath
25 poi
26 3.14-20160307
27
28 fakepath
29 xmlbeans
30 2.6.0
31
32
poiexcel 读取引用列_java用poi读取Excel表格中的数据相关推荐
- java搜索excel表格里的数据_Java读取Excel表格中的数据
前言 本文主要讲述如何在Java中读取Excel表中的数据并在控制台输出,实现工具为Eclipse 提示:以下是本篇文章正文内容,下面案例可供参考 一.添加jar包文件 描述:在Java中导入导出Ex ...
- POI:从Excel文件中读取数据,向Excel文件中写入数据,将Excel表格中的数据插入数据库,将数据库中的数据添加到Excel表
POI 简介: POI是Apache软件基金会用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能. ...
- python读取excel表格-python读取excel表格中的数据
使用python语言实现Excel 表格中的数据读取,需要用到xlrd.py模块,实现程序如下: import xlrd #导入xlrd模块 class ExcelData(): def __init ...
- matlab读取excel表作图,读取Excel表格数据进行绘图-如何将excel表格中大量数据导入matlab中并作图...
matlab 读取excel时间数据并绘图 没看懂你的格式是什么意思, 不过我一般读取excel都用xlsread函数,你也可以试一试 [a,b,c]=xlsresd('data.xls');%r如果 ...
- Java读取Excel表格中的数据
文章目录 前言 一.添加jar包文件 1.在Eclipse工程下新建lib文件夹 2.复制jar包 3.将jar包粘贴到Eclipse中 4.配置构建路径 二.案例代码 1.新建类 2.获取Excel ...
- python3读取excel数据-python3 读取Excel表格中的数据
需要先安装openpyxl库 通过pip命令安装: pip install openpyxl 源码如下: #!/usr/bin/python3 #-*- coding:utf-8 -*- import ...
- PhpExcel读取Excel表格中的数据
<html> <head> <title> 浏览Excel表格中的数据</title> <head> <center> < ...
- java实现读取excel表格中的数据,兼容xls和xlsx
前言 利用 java 实现读取 excel 表格中的数据,兼容 xls 与 xlsx 格式,不用额外做区分,写不同的实现方法. 引入的依赖包 <dependency><groupId ...
- Java读取office-word(doc、docx)里面表格中的数据
依赖 <!--Java读取word中的表格数据--><dependency><groupId>org.apache.poi</groupId><a ...
最新文章
- js高级教程阅读笔记 第五章-引用类型(5.6)
- java mysql in_MySQL中Exists和In的使用
- 2018 OO第一次总结(作业1-3)
- 2020秋季学期教学委员会第一次全体会议
- 4+5的值是python_Python基础:数据类型-数字(5)
- Win32项目关于MessageBox参数的详细说明
- 数字摄像机常见术语和参数介绍
- deepin启动盘无法引导安装_deepin 无法启动问题解决
- centos7 redis分布式集群问题总结
- NLP特征工程(待完善细节)
- Ubuntu 解决WPS缺少宋体,微软雅黑等中文字体
- Matlab 绘制直方图、面积图、饼图、针状图
- 高手教你如何从零开始学游戏编程
- arm64的ioremap_ARMv8 内存管理架构.学习笔记
- ai切换rgb模式_AI基础教程:如何更改CMYK模式?更改的两个方法
- 从共射极放大电路到选频放大电路到相位测距上的应用
- 对于一个基本有序的数组进行排序
- 微信小程序汽车租赁平台+后台管理系统
- 磁共振T1 T2 T1WI T2WI含义
- 3g安卓市场_安卓离场,鸿蒙能否破局?