`
long_yu2
  • 浏览: 334566 次
社区版块
存档分类
最新评论

POI读取Excel浅谈

    博客分类:
  • java
 
阅读更多

先看代码,挨句解释:

一般遍历使用两种方式,1:得到总的行数和每行的列数,然后循环。2:使用迭代

先看第一种:

Java代码  收藏代码
  1. package com.golden.test;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5.   
  6. import org.apache.poi.hssf.usermodel.HSSFCell;  
  7. import org.apache.poi.hssf.usermodel.HSSFRow;  
  8. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  9. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  10.   
  11. /** 
  12.  *  
  13.  * @author 崔素强 
  14.  *  
  15.  */  
  16. public class PoiReadXls2 {  
  17.     public static void main(String[] args) {  
  18.         File f = new File("c:\\a.xls");  
  19.         try {  
  20.             FileInputStream is = new FileInputStream(f);  
  21.             HSSFWorkbook wbs = new HSSFWorkbook(is);  
  22.             HSSFSheet childSheet = wbs.getSheetAt(0);  
  23.             // System.out.println(childSheet.getPhysicalNumberOfRows());  
  24.             System.out.println("有行数" + childSheet.getLastRowNum());  
  25.             for (int j = 0; j < childSheet.getLastRowNum(); j++) {  
  26.                 HSSFRow row = childSheet.getRow(j);  
  27.                 // System.out.println(row.getPhysicalNumberOfCells());  
  28.                 // System.out.println("有列数" + row.getLastCellNum());  
  29.                 if (null != row) {  
  30.                     for (int k = 0; k < row.getLastCellNum(); k++) {  
  31.                         HSSFCell cell = row.getCell(k);  
  32.                         if (null != cell) {  
  33.                             switch (cell.getCellType()) {  
  34.                             case HSSFCell.CELL_TYPE_NUMERIC: // 数字  
  35.                                 System.out.print(cell.getNumericCellValue()  
  36.                                         + "   ");  
  37.                                 break;  
  38.                             case HSSFCell.CELL_TYPE_STRING: // 字符串  
  39.                                 System.out.print(cell.getStringCellValue()  
  40.                                         + "   ");  
  41.                                 break;  
  42.                             case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean  
  43.                                 System.out.println(cell.getBooleanCellValue()  
  44.                                         + "   ");  
  45.                                 break;  
  46.                             case HSSFCell.CELL_TYPE_FORMULA: // 公式  
  47.                                 System.out.print(cell.getCellFormula() + "   ");  
  48.                                 break;  
  49.                             case HSSFCell.CELL_TYPE_BLANK: // 空值  
  50.                                 System.out.println(" ");  
  51.                                 break;  
  52.                             case HSSFCell.CELL_TYPE_ERROR: // 故障  
  53.                                 System.out.println(" ");  
  54.                                 break;  
  55.                             default:  
  56.                                 System.out.print("未知类型   ");  
  57.                                 break;  
  58.                             }  
  59.                         } else {  
  60.                             System.out.print("-   ");  
  61.                         }  
  62.                     }  
  63.                 }  
  64.                 System.out.println();  
  65.             }  
  66.         } catch (Exception e) {  
  67.             e.printStackTrace();  
  68.         }  
  69.     }  
  70. }  

 

得到Excel的文件然后读取,这个很简单。关键有两个地方,也许在网上会看到有的这样使用有的那样使用。

System.out.println("有行数" + childSheet.getLastRowNum());

System.out.println(childSheet.getPhysicalNumberOfRows());

System.out.println("有列数" + row.getLastCellNum());

System.out.println(row.getPhysicalNumberOfCells());

如果人都拷贝代码进行使用了,不知道有什么区别。太多的区别不知道,但是有一点我发现了,那就是如果中间各行或者隔列的话getPhysicalNumberOfRows和getPhysicalNumberOfCells就不能读取到所有的行和列了。

再者,一定要对单元格的格式进行判断switch (cell.getCellType()),不同的单元格格式使用不同的方法。最后加上为止类型,以防万一。

而且在数字类型里,又分为了纯数字和时间格式:

Java代码  收藏代码
  1. case HSSFCell.CELL_TYPE_NUMERIC: // 数值型  
  2.     if (HSSFDateUtil.isCellDateFormatted(cell)) {  
  3.         //  如果是date类型则 ,获取该cell的date值  
  4.         value = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString();  
  5.     } else { // 纯数字  
  6.         value = String.valueOf(cell.getNumericCellValue());  
  7. }  

 

还有一种迭代的方法:

Java代码  收藏代码
  1. package com.golden.test;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.util.Iterator;  
  8. import org.apache.poi.hssf.usermodel.HSSFCell;  
  9. import org.apache.poi.hssf.usermodel.HSSFRow;  
  10. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  11. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  12. import org.apache.poi.poifs.filesystem.POIFSFileSystem;  
  13.   
  14. /** 
  15.  *  
  16.  * @author 崔素强 
  17.  *  
  18.  */  
  19. public class PoiReadXls {  
  20.     @SuppressWarnings( { "unchecked""deprecation" })  
  21.     public static void main(String[] args) {  
  22.         File f = new File("c:\\a.xls");  
  23.         try {  
  24.             InputStream input = new FileInputStream(f);  
  25.             POIFSFileSystem fs = new POIFSFileSystem(input);  
  26.             HSSFWorkbook wb = new HSSFWorkbook(fs);  
  27.             HSSFSheet sheet = wb.getSheetAt(0);  
  28.             Iterator rows = sheet.rowIterator();  
  29.             while (rows.hasNext()) {  
  30.                 HSSFRow row = (HSSFRow) rows.next();  
  31.                 // System.out.print("行:" + row.getRowNum() + " ");  
  32.                 Iterator cells = row.cellIterator();  
  33.                 while (cells.hasNext()) {  
  34.                     HSSFCell cell = (HSSFCell) cells.next();  
  35.                     // System.out.println("列:" + cell.getCellNum());  
  36.                     switch (cell.getCellType()) {  
  37.                     case HSSFCell.CELL_TYPE_NUMERIC: // 数字  
  38.                         System.out.print(cell.getNumericCellValue() + "   ");  
  39.                         break;  
  40.                     case HSSFCell.CELL_TYPE_STRING: // 字符串  
  41.                         System.out.print(cell.getStringCellValue() + "   ");  
  42.                         break;  
  43.                     case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean  
  44.                         System.out.println(cell.getBooleanCellValue() + "   ");  
  45.                         break;  
  46.                     case HSSFCell.CELL_TYPE_FORMULA: // 公式  
  47.                         System.out.print(cell.getCellFormula() + "   ");  
  48.                         break;  
  49.                     case HSSFCell.CELL_TYPE_BLANK: // 空值  
  50.                         System.out.println(" ");  
  51.                         break;  
  52.                     case HSSFCell.CELL_TYPE_ERROR: // 故障  
  53.                         System.out.println(" ");  
  54.                         break;  
  55.                     default:  
  56.                         System.out.print("未知类型   ");  
  57.                         break;  
  58.                     }  
  59.                 }  
  60.                 System.out.println();  
  61.             }  
  62.         } catch (IOException ex) {  
  63.             ex.printStackTrace();  
  64.         }  
  65.     }  
  66. }  

 

这种方法,如果数据的紧凑的,使用还是方便的,但是我发现,如果是空行或者是空列,他就会隔过去。具体的自己试试就知道了。

另外,也能看到这里得到Excel文件的方式是通过File,如果要引用到Struts2里,这是很简单的,因为Struts2上传时Action里定义的就是File或者File数组。

分享到:
评论

相关推荐

    利用POI读取excel写入到word

    要实现"利用POI读取excel写入到word",我们需要以下步骤: 1. **准备环境**:首先,确保你的项目已经引入了Apache POI的依赖。在给定的压缩包中,"poi - 副本"可能是包含POI库的JAR文件,你需要将其添加到你的项目...

    android5使用poi读取excel

    android5使用poi读取excel,android5使用poi读取excel,android5使用poi读取excel,android5使用poi读取excel

    POI读取excel的内容.zip

    本教程将详细讲解如何使用Apache POI库来读取Excel文件的内容。 首先,为了在Java项目中使用Apache POI,我们需要通过Maven进行依赖管理。在`pom.xml`文件中添加以下依赖: ```xml &lt;groupId&gt;org.apache.poi ...

    poi读取excel文件

    Apache POI提供了丰富的API,可以实现对Excel文件的复杂操作,如合并单元格、设置样式、处理公式等。在Android开发中,这些功能同样适用,但需要注意资源管理,因为Android设备的内存有限。 总的来说,Apache POI是...

    POI读取excel的例子

    POI读取excel的例子

    poi读取excel并输出到jsp页面

    标题中的“poi读取excel并输出到jsp页面”是指使用Apache POI库来处理Microsoft Excel文件,并将数据在JavaServer Pages (JSP) 页面上显示的技术。Apache POI 是一个开源项目,它允许开发者创建、修改和显示MS ...

    POI生成Excel POI操作Excel POI读取Excel POI类库

    **POI读取Excel** 读取Excel主要涉及以下步骤: 1. **打开Workbook**:通过 FileInputStream 读取Excel文件,然后创建Workbook对象。 2. **获取Sheet**:从Workbook中获取需要的Sheet。 3. **遍历Row和Cell**:...

    poi 读取excel小实例

    实现了JAVA 窗口,读取EXCEL文件,用poi读取EXCEL内容只是一个小例子

    android POI 读取excel 精简jar

    Apache POI提供对Microsoft Office格式的全面支持,包括Excel的.xlsx格式。此精简版可能是为了减小Android应用的体积和提高性能,移除了不必要的部分,但仍保留了读取Excel文件的核心功能。 3. **aa-poi-ooxml-...

    apache POI 读取 Excel

    apache poi 读取 Excel 的 jar 包 博文链接:https://wxinpeng.iteye.com/blog/231895

    使用POI解析excel文件并写入数据库

    使用poi解析excel文件,并将数据写入到数据库 项目说明 这个项目实现的功能是读取excel文件中的数据,解析并写入数据库。 读取的excel文件位于项目目录下的 excel\0805.xlsx 使用IntelliJ IDEA开发此项目 使用MYSQL...

    poi读取excel文件实例(兼容excel2007)

    在“poi读取excel文件实例”中,我们将讨论如何使用Apache POI API来读取和操作Excel 2007文件。以下是一些关键知识点: 1. **创建工作簿对象**:首先,你需要通过`WorkbookFactory`类的`create()`方法打开或创建一...

    POI读取EXCEL教程

    在Java编程环境中,如果你需要读取或写入Excel文件,POI 提供了强大的支持。本教程将深入讲解如何使用POI的HSSF组件来处理Excel 97-2003格式的文件(BIFF8格式)。 一、Excel基础 Excel 97 文件格式,也被称作BIFF8...

    poi读取Excel用到的jar包

    标题提到的“poi读取Excel用到的jar包”指的是在Java项目中使用POI库进行Excel操作所需引入的依赖文件。这些jar包在描述中给出,包括了以下几个: 1. poi-ooxml-schemas-3.8-beta5-20111217.jar:这个文件包含了...

    POI读取Excel合并单元格并储存

    本文将深入探讨如何使用Java的Apache POI库来读取Excel文件,并处理其中合并单元格的数据,同时将这些数据存储到实体类中以供后续使用。 Apache POI是一个强大的库,允许程序员使用Java来创建、修改和显示Microsoft...

    POI读取Excel带格式数据

    本篇将详细讲解如何使用Apache POI读取Excel文件中的带格式数据。 首先,理解Apache POI的基本架构至关重要。POI提供了HSSF(Horrible Spreadsheet Format)用于处理老版本的.xls文件,而XSSF用于处理较新的.xlsx...

    ExcelUtil借助反射和POI对Excel读取,省略了以往读取Excel的繁琐步骤

    本篇将详细讲解如何利用Java的开源库Apache POI,结合反射机制,通过ExcelUtil工具类简化Excel读取的过程。 Apache POI是一个强大的库,它允许Java程序员创建、修改和展示MS Office格式的文件,包括Excel。在传统的...

    poi 读取EXCEL所需要的JAR

    在Java环境中,如果你需要使用POI库来读取、写入或操作Excel文件,你需要确保你的项目中包含了正确的JAR文件。在这个场景中,你提到的几个JAR文件都是Apache POI的不同版本和组件: 1. **poi-3.8.jar**:这是Apache...

    利用POI解析excel并存入数据库demo

    在这个"利用POI解析excel并存入数据库demo"中,我们将关注如何使用 POI 库来读取 Excel 文件,并将数据有效地存入 MySQL 数据库。 首先,要开始使用 POI,你需要在你的项目中引入相应的依赖。如果你使用的是 Maven...

    poi excel poi excel poi excel

    #### 三、使用 POI 创建和读取 Excel 文件 为了使用 POI 操作 Excel 文件,首先需要准备以下环境: 1. **JDK 版本**:至少需要 JDK 1.4 或更高版本。 2. **POI 库**:下载 POI 库,可以从 Apache 官方网站获取:...

Global site tag (gtag.js) - Google Analytics