poi3.8读取excel2007的一个实例

包的下载地址:http://poi.apache.org/download.html#POI-3.8beta3

在以前的Excel解析时候,我们通常需要编写Excel解析只能解析一种格式03版或者07版。现在POI3.5以后可以解析两种格式。我们知道在07的excel是基于xml格式的文件。

需要的包有:

poi-3.8-beta3-20110606.jar                 

poi-ooxml-3.8-beta3-20110606.jar

poi-ooxml-schemas-3.8-beta3-20110606.jar            

xmlbeans-2.3.0.jar

上面的包要找齐还不是那么容易呵呵。

参考文章:

http://www.iteye.com/topic/316862

http://www.iteye.com/topic/834803

示例代码:

package com.test.util;
 
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
 
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
/**
 * @author David.deng 2011-7-20 Version : 2.0 Class declare :
 */
public class ReadExcel
{
 
 public void testPoiExcel2007(String strPath)
 {
  try
  {
   // 构造 XSSFWorkbook 对象,strPath 传入文件路径
   XSSFWorkbook xwb = new XSSFWorkbook(strPath);
   // 读取第一章表格内容
   XSSFSheet sheet = xwb.getSheetAt(0);
   // 定义 row、cell
   XSSFRow row;
   String cell;
   // 循环输出表格中的内容
   for (int i = sheet.getFirstRowNum(); i < sheet.getPhysicalNumberOfRows(); i++)
   {
    row = sheet.getRow(i);
    for (int j = row.getFirstCellNum(); j < row.getPhysicalNumberOfCells(); j++)
    {
     // 通过 row.getCell(j).toString() 获取单元格内容,
     cell = row.getCell(j).toString();
     if(j == 2 | j==3)
      System.out.print(cell + "\\t");
    }
    System.out.println("");
   }
  }
  catch (IOException e)
  {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 /**
  * @param args
  */
 public static void main(String\[\] args)
 {
  String strPath = "D:\\\\tt\\\\made.xlsx";
  SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss:SS");
  TimeZone t = sdf.getTimeZone();
  t.setRawOffset(0);
  sdf.setTimeZone(t);
  Long startTime = System.currentTimeMillis();  
  // 检测代码
  try
  {
   ReadExcel er = new ReadExcel();
   // 读取excel2007
   er.testPoiExcel2007(strPath);
  }
  catch (Exception ex)
  {
   ex.printStackTrace();
  }
  Long endTime = System.currentTimeMillis();
  System.out.println("用时:" + sdf.format(new Date(endTime - startTime)));
 }
 
}