- 浏览: 53639 次
- 性别:
- 来自: 南京
最新评论
-
qqggcc:
没有这么麻烦吧
我觉得POI大数据量的时候回出点问题
JX ...
使用 poi 和fastExcel 包读取excel 表格文件 -
bjt100:
很好,刚好派用着。
使用 poi 和fastExcel 包读取excel 表格文件 -
tommy402gongxue:
POI的real方法中:
修改为
if (mycell.get ...
使用 poi 和fastExcel 包读取excel 表格文件 -
tommy402gongxue:
这个存在很严重的bug,一个内容独占了几个单元格的时候,你会输 ...
使用 poi 和fastExcel 包读取excel 表格文件 -
風一樣的男子:
我一般用jxl
使用 poi 和fastExcel 包读取excel 表格文件
今年做了一些项目,其中有几个模块中要求能对 excel 表格文件能够操作,比如能把 excel 文件中数据读到程序中或把程序中的数据写入到 excel 表格中去,每次程序写到这里,都会遇到这样或那样的小问题,原因是自己平时没有去好好的总结一下。就用今天的这个时间做个总结吧!!!希望以后大家和我一样,不要在这上面再栽跟头了。(测试用的 excel 文件在附件中)
package com.jim.tools; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFCell; import java.io.*; import java.util.ArrayList; /** * 此类采用 poi包 实现了读 .xls 文件的功能, * 用 poi 读 excel 相对而言要比 fastExcel 麻烦,而且速度上也没有 fastExcel 快 * @author hellojim * @company cxtech */ public class POIReadFromExcel { private String URL; //要读取的 .xls 文件的目录 private int index = 0; //要读取的 .xls 文件的那个 Sheet , 默认为第0个(Sheet1) private int beginRow = 0; //要读取的 Sheet 的开始行, 默认为第0行 private int beginCol = 0; //要读取的 Sheet 的开始列, 默认为第0列 private final static int defaultRow = 0; /** * URL 要读取的那个 .xls 文件的地址 */ public POIReadFromExcel(String URL) { //这里简单的做了个判断 if(URL == null || URL.trim().equals("")) { System.out.println("文件不能为空!"); }else if(URL.trim().indexOf(".xls") == -1 && URL.trim().indexOf(".XLS") == -1) { System.out.println("文件格式不正确!"); }else { this.URL = URL; } } /** * URL 要读取的那个 .xls 文件的地址 * index 要读取的那个 Sheet , 默认为第一个(Sheet1) */ public POIReadFromExcel(String URL, int index) { this(URL); this.index = index; } /** * URL 要读取的那个 .xls 文件的地址 * index 要读取的那个 Sheet , 默认为第一个(Sheet1) * beginRow 要读取的 Sheet 的开始行 * beginCol 要读取的 Sheet 的开始列 */ public POIReadFromExcel(String URL,int index,int beginRow,int beginCol) { this(URL,index); this.beginRow = beginRow; this.beginCol = beginCol; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } public String getURL() { return URL; } public void setURL(String URL) { this.URL = URL; } public int getBeginCol() { return beginCol; } public void setBeginCol(int beginCol) { this.beginCol = beginCol; } public int getBeginRow() { return beginRow; } public void setBeginRow(int beginRow) { this.beginRow = beginRow; } public String[][] read() throws Exception { String[][] strArray = null; String value = null; File f = new File(this.URL); FileInputStream fos = new FileInputStream(f); //把要读取的 .xls 文件 包装起来 HSSFWorkbook workbook = new HSSFWorkbook(fos); //得到 excel 工作簿对应的 HSSFWorkbook 对象 HSSFSheet sheet = null; try { sheet = workbook.getSheetAt(this.index); //得到 excel 工作簿中 某个Sheet 对应的 HSSFSheet 对象 }catch(IndexOutOfBoundsException ex) { return null; } HSSFRow row = sheet.getRow(defaultRow); //得到某个 Sheet 中的第 0 行(默认为第 0 行) int rows = sheet.getLastRowNum() - this.beginRow; //得到共有多少行 int cols = row.getLastCellNum() - this.beginCol; //得到共有多少列 strArray = new String[rows+1][cols]; for (int i = this.beginRow,m=0; i <= rows+this.beginRow; i++,m++) { row = sheet.getRow(i); //得到此工作区中的某一得数据 for (int j = this.beginCol,n=0; j < row.getLastCellNum(); j++,n++) { HSSFCell mycell = row.getCell( (short) j); //得到一个具体的单元格 try { if(mycell != null) {//[注意]: 这里一定要加上这个判断,如果某个单元格为空,这里的 mycell 就为 null,易发生 NullProintException /* [注意]:这里在得到某个单元格中内容前,一定要先判断这个单元格中内容的数据类型, 然后根据数据类型用对应的getXxxCellValue这样的方法来得到具体内容,如果不做这样的判断可能出现 int 型数据而你用了 getStringCellValue()这样的方法去取数据,就会报错,这也是 POI 取 Excel 中数据的一个缺点。 本个在以上两个"注意"点上栽了不少跟头,相反如果是用 fastExcel 这两个问题根本不存在 */ if(mycell.getCellType() == HSSFCell.CELL_TYPE_STRING) { //如果单元格里的数据类型为 String 型 value = mycell.getStringCellValue().trim(); }else if(mycell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { //如果单元格里的数据类型为 Number 型 //这里总是返回的是 double 型,如果数据确实为 int 型,象下面这样可以在这里做个强行转换 value = String.valueOf((int)mycell.getNumericCellValue()).trim(); }else if(mycell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) { //如果单元格里的数据类型为 Boolean 型 value = String.valueOf(mycell.getBooleanCellValue()).trim(); } }else { value = null; } if(value == null || value.trim().equals("")) { strArray[m][n] = ""; }else { strArray[m][n] = value; } } catch (Exception e) { e.printStackTrace(); } } } return strArray; } /** * 返回 若干个 sheet, 若干个 sheet 存放于 ArrayList 中 * */ public ArrayList readAll() throws Exception { ArrayList al = new ArrayList(); String[][] strArr = null; while(true) { strArr = read(); if(strArr == null) { break; }else { al.add(strArr); this.index ++; } } return al; } public static void printArr(String[][] strArr) { for(int i=0; i<strArr.length; i++) { for(int j=0; j<strArr[i].length; j++) { System.out.print(strArr[i][j] + " "); } System.out.println(); } System.out.println("______________________________________________________________________"); } public static void main(String [] args) throws Exception { POIReadFromExcel readExcel = new POIReadFromExcel("d:\\test.xls"); readExcel.setIndex(1); readExcel.setBeginRow(1); readExcel.setBeginCol(1); //读某一个 Sheet String[][] strArr2 = readExcel.read(); printArr(strArr2); //读所有的 Sheet readExcel.setIndex(0); ArrayList al = readExcel.readAll(); if(al != null && al.size() > 0) { for(int i=0; i<al.size(); i++) { String[][] strArr = (String[][])al.get(i); printArr(strArr); } } } }
package com.jim.tools; import java.io.File; import java.util.ArrayList; import edu.npu.fastexcel.FastExcel; import edu.npu.fastexcel.Sheet; import edu.npu.fastexcel.Workbook; /** * 此类采用 fastExcel包 实现了读 .xls 文件的功能,目前为止,FastExcel 还没有提供向 Excel 中写入的功能 * @author hellojim * @company cxtech */ public class FEReadFromExcel { private String URL; //要读取的 .xls 文件的目录 private int index = 0; //要读取的 .xls 文件的那个 Sheet , 默认为第0个(Sheet1) private int beginRow = 0; //要读取的 Sheet 的开始行, 默认为第0行 private int beginCol = 0; //要读取的 Sheet 的开始列, 默认为第0列 /** * URL 要读取的那个 .xls 文件的地址 */ public FEReadFromExcel(String URL) { //这里简单的做了个判断 if(URL == null || URL.trim().equals("")) { System.out.println("文件不能为空!"); }else if(URL.trim().indexOf(".xls") == -1 && URL.trim().indexOf(".XLS") == -1) { System.out.println("文件格式不正确!"); }else { this.URL = URL; } } /** * URL 要读取的那个 .xls 文件的地址 * index 要读取的那个 Sheet , 默认为第一个(Sheet1) */ public FEReadFromExcel(String URL, int index) { this(URL); this.index = index; } /** * URL 要读取的那个 .xls 文件的地址 * index 要读取的那个 Sheet , 默认为第一个(Sheet1) * beginRow 要读取的 Sheet 的开始行 * beginCol 要读取的 Sheet 的开始列 */ public FEReadFromExcel(String URL,int index,int beginRow,int beginCol) { this(URL,index); this.beginRow = beginRow; this.beginCol = beginCol; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } public String getURL() { return URL; } public void setURL(String URL) { this.URL = URL; } public int getBeginCol() { return beginCol; } public void setBeginCol(int beginCol) { this.beginCol = beginCol; } public int getBeginRow() { return beginRow; } public void setBeginRow(int beginRow) { this.beginRow = beginRow; } /** * 返回 某一个 sheet */ public String[][] read() throws Exception { Workbook workBook = FastExcel.createReadableWorkbook(new File(this.URL)); workBook.open(); Sheet s = workBook.getSheet(this.index); String cell = null; String[][] cellArr = new String[s.getLastRow()-this.beginRow][s.getLastColumn()-this.beginCol]; for(int i=s.getFirstRow()+this.beginRow,row=0; i<s.getLastRow(); i++,row++) { for(int j=s.getFirstColumn()+this.beginCol,col = 0; j<s.getLastColumn() ; j++,col++) { cell = s.getCell(i,j); if(cell == null || cell.trim().equals("")) { cell = ""; }else { cell = cell.trim(); } cellArr[row][col] = cell; } } workBook.close(); return cellArr; } /** * 返回 若干个 sheet, 若干个 sheet 存放于 ArrayList 中 * */ public ArrayList readAll() throws Exception { Workbook workBook = FastExcel.createReadableWorkbook(new File(this.URL)); workBook.open(); Sheet s = null; String cell; int index = this.index; //读出所有的 Sheet,默认从第0个Sheet 开始读 int sumRow = 0; //所有的 Sheet 共有记录多少行 int sumCol = 0; //所有的 Sheet 共有记录多少列 String[][] cellArr = null; ArrayList al = new ArrayList(); while(true) { s = workBook.getSheet(index++); if(s == null) { break; }else { sumRow += s.getLastRow()-this.beginRow; if(s.getLastColumn() > sumCol) { sumCol = s.getLastColumn(); } cellArr = new String[s.getLastRow() - this.beginRow][s.getLastColumn() - this.beginCol]; } for (int i = s.getFirstRow()+this.beginRow,row=0; i < s.getLastRow(); i++,row++) { for (int j = s.getFirstColumn() + this.beginCol,col=0; j < s.getLastColumn(); j++,col++) { cell = s.getCell(i, j); if(cell == null || cell.trim().equals("")) { cell = ""; }else { cell = cell.trim(); } cellArr[row][col] = cell; } } al.add(cellArr); } workBook.close(); return al; } public static void printArr(String[][] strArr) { for(int i=0; i<strArr.length; i++) { for(int j=0; j<strArr[i].length; j++) { System.out.print(strArr[i][j] + " "); } System.out.println(); } System.out.println("______________________________________________________________________"); } public static void main(String[] args) throws Exception { FEReadFromExcel readExcel = new FEReadFromExcel("d:\\test.xls"); readExcel.setIndex(0); readExcel.setBeginRow(0); readExcel.setBeginCol(0); ArrayList al = readExcel.readAll(); //这里表示所有的sheet if(al != null && al.size() > 0) { for(int i=0; i<al.size(); i++) { String[][] strArr = (String[][])al.get(i); printArr(strArr); } } readExcel.setIndex(1); readExcel.setBeginRow(1); readExcel.setBeginCol(1); String[][] strArr = readExcel.read(); //这里表示读 sheet1 printArr(strArr); } }
评论
7 楼
qqggcc
2009-08-10
没有这么麻烦吧
我觉得POI大数据量的时候回出点问题
JXL挺不错的
我觉得POI大数据量的时候回出点问题
JXL挺不错的
6 楼
bjt100
2009-08-10
很好,刚好派用着。
5 楼
tommy402gongxue
2009-06-09
POI的real方法中:
修改为
if (mycell.getCellType() == HSSFCell.CELL_TYPE_STRING) { //如果单元格里的数据类型为 String 型
value = mycell.getStringCellValue().trim();
}
else if (mycell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { //如果单元格里的数据类型为 Number 型
//这里总是返回的是 double 型,如果数据确实为 int 型,象下面这样可以在这里做个强行转换
value = String.valueOf(
(int) mycell.getNumericCellValue()).trim();
}
else if (mycell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) { //如果单元格里的数据类型为 Boolean 型
value = String
.valueOf(mycell.getBooleanCellValue())
.trim();
}else if(mycell.getCellType() == HSSFCell.CELL_TYPE_BLANK){
value = null;
}
修改为
if (mycell.getCellType() == HSSFCell.CELL_TYPE_STRING) { //如果单元格里的数据类型为 String 型
value = mycell.getStringCellValue().trim();
}
else if (mycell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { //如果单元格里的数据类型为 Number 型
//这里总是返回的是 double 型,如果数据确实为 int 型,象下面这样可以在这里做个强行转换
value = String.valueOf(
(int) mycell.getNumericCellValue()).trim();
}
else if (mycell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) { //如果单元格里的数据类型为 Boolean 型
value = String
.valueOf(mycell.getBooleanCellValue())
.trim();
}else if(mycell.getCellType() == HSSFCell.CELL_TYPE_BLANK){
value = null;
}
4 楼
tommy402gongxue
2009-06-09
这个存在很严重的bug,一个内容独占了几个单元格的时候,你会输出很多重复信息
3 楼
風一樣的男子
2009-06-06
我一般用jxl
2 楼
hellojim
2009-01-22
你自己任意的去新建一个 .xls 文件,就能读出来了
1 楼
hl1013520
2009-01-21
请问附件在哪儿?
发表评论
-
其实可以这样做
2009-04-08 23:02 951在之前的公司,利用eclipse做开发总是喜欢把项目发布到to ... -
利用JAVA写一段上传文件程序(模拟Ftp客户端)
2009-03-04 15:34 3211package com.hellojim.beans; im ... -
使用dom4j包操作xml文件
2009-02-09 16:48 4086最近使用 dom4j包来操作 ... -
使用 poi 包生成(向.xls表格中写入)excel 表格文件
2009-02-02 17:49 3977package com.jim.tools; import ... -
话说JAVA中成员访问控制
2009-01-17 18:07 1933JAVA中成员访问控制有四种类型,从不开放 到 开放,分别为 ... -
子类与父类之间的转换
2009-01-07 16:46 2768class A { public void fun1() ... -
abstract、 interface 关键字
2009-01-07 16:41 1447//abstract interface 关键字 /* int ... -
extends,this,super,final 关键字的应用
2009-01-07 16:39 1049//extends,this,super,final 关键字的 ... -
内部类
2009-01-06 13:20 906class Outer { private String u ... -
使用javadoc工具生成类似 jdk API 形式的文档
2009-01-05 21:04 2252/** * Title: User 类<br> ... -
finalize 关键字和 System.gc() 的作用
2009-01-02 17:11 3212//此类说明了 finalize 关键字以及 System.g ... -
this 关键字的作用
2009-01-02 16:42 1497//此类说明了 this 关键字的作用 /* 1.用在构造方 ... -
public 与 private 关键字的区别
2009-01-02 16:24 1514//此类说明了 private 与 public 关键字的作用 ... -
path与classpath区别
2008-12-26 16:22 2052对于初学java 的人来说,可能在 path 与 classp ... -
关于 org.apache.xml.utils.WrappedRuntimeException
2008-03-13 18:09 1968今天下午把原有工程的一段运行良好的代码 copy 到一个新工程 ... -
关于一个 send E-mail 问题
2007-12-09 13:46 1258package com.oa.modules.personne ... -
关于一些 IO Class
2007-12-04 22:49 1029这段时间一直在看 java 关于IO流处理这处,所汲及到的类有 ...
相关推荐
java读取excel 表格数据。 public static void main(String[] args) { String[][] content=POIExcelUtils.read("E:\\1.xlsx"); for(int i=0;i;i++) { if(content[i]!=null){ for(int j=0;j[i].length;j...
使用poi读取写入复杂excel内容包括样式,工具类
读取Excel的poi包,,读取Excel的poi包,,读取Excel的poi包,读取Excel的poi包读
Java 读取 Excel 文件是许多开发任务中的常见需求,Apache POI 是一个广泛使用的开源库,专门用于处理 Microsoft Office 格式的文件,包括 Excel。在本案例中,提供的压缩包 "poi.zip" 包含了两个子文件:poi-bin-...
在IT行业中,Apache POI是一个广泛使用的开源库,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。本篇文章将详细讲解如何利用Apache POI库来读取Excel数据并将其写入到Word文档中。 首先,...
在Java开发中,Apache POI库是一个非常实用的工具,用于读取和写入Microsoft Office格式的文件,包括Excel。本篇文章将详细讲解如何利用Apache POI库在Android环境中高效地处理大数据量的Excel文件,无论是2003的....
在本文中,我们将深入探讨如何使用Apache POI读取Excel表格内容。 首先,我们需要理解Apache POI的基本架构。POI分为两个主要部分:HSSF(Horizontally-Scalable Storage Format)用于处理旧版的BIFF格式Excel文件...
在Java编程环境中,Apache POI库是一个非常重要的工具,它允许开发者读取、写入以及修改Microsoft Office格式的文件,包括Excel的.xls和.xlsx格式。标题提到的"poi读取excel文件",指的是使用Apache POI库来处理...
8. **最佳实践**:在使用POI时,建议先了解Excel文件的结构,理解POI提供的类和方法,合理设计数据模型,避免一次性加载大量数据,以及正确释放资源以防止内存泄漏。 9. **其他扩展**:除了基本的读写功能,POI还...
总之,通过使用Android的AssetManager和Apache POI库,我们可以轻松地在Android应用中读取和解析Excel表格数据。理解这个过程对于构建涉及数据导入和处理功能的应用至关重要。注意在实际开发中,要考虑到性能、异常...
在这个场景中,我们关注的是如何使用POI来创建、读取和操作Excel文档。在Web项目中,这种功能通常用于数据导入导出,报表生成,或者任何需要与用户交换表格数据的场景。 **POI生成Excel** 生成Excel文件主要涉及...
Apache POI 是一个流行的开源库,它允许开发者使用Java语言来读取、写入和修改Microsoft Office格式的文件,包括Excel(.xlsx 和 .xls)。本教程将深入探讨如何使用Apache POI库来复制Excel表格的指定行数及其样式。...
以下是使用BeanShell和POI读取Excel文件的基本步骤: 1. 将Apache POI库添加到JMeter的类路径中。这通常意味着将poi-*.jar、poi-ooxml-*.jar和poi-ooxml-schemas-*.jar文件放入JMeter的lib目录下。 2. 在BeanShell ...
Apache POI 是一个广泛使用的Java库,用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。在处理大型Excel文件时,传统的HSSF和XSSF模型可能会遇到性能瓶颈,因为它们将整个工作簿加载到内存中。为了...
HPSF(POI OLE 2 Property Set Facility)是POI的一部分,用于读取和写入OLE 2复合文档的属性,包括Excel文件的元数据。这可以帮助获取如作者、创建日期等信息。 七、文档摘要信息 文档摘要信息通常包含在文档的元...
需要注意的是,POI库提供了多种方式来读取EXCEL文件,包括使用HSSFWorkbook和XSSFWorkbook两种方式,对于不同的EXCEL文件格式,需要选择合适的实现类。 使用POI库读取EXCEL文件是非常方便的,通过这篇文章的介绍,...
Java 使用 POI 读取 Excel 文件 ...使用 POI 读取 Excel 文件非常简单,只需要引入 POI 的 jar 包,并使用相应的类和方法来访问 Excel 文件的内容。这样,我们可以轻松地在 Java 程序中读取和处理 Excel 文件的内容。
使用poi解析excel文件,并将数据写入到数据库 项目说明 这个项目实现的功能是读取excel文件中的数据,解析并写入数据库。 读取的excel文件位于项目目录下的 excel\0805.xlsx 使用IntelliJ IDEA开发此项目 使用MYSQL...
在Java编程环境中,读取Excel表格内容并将其展示在Swing界面是一项常见的任务,尤其在数据处理和报表展示方面。本篇文章将详细讲解如何实现这一功能。 首先,我们需要引入两个关键库:Apache POI用于读取Excel文件...
本资源是从之前的资源综合整理出来的代码,之前的代码不全,需要下载两次,为了...本资源解决的难题是导入大文件excel的时候,会报内存溢出的错误。 欢迎各位下载,解决用户的难题是我的宗旨,好的话给个评价,谢谢!