POI3.8和jxl读取Excel例子

这几天在弄java读excel的问题,以前用的是jxl.jar来读的,后来发现无法读取2007的,于是研究了一下POI,在网上下了最新版的poi-bin-3.8-beta5-20111217.zip,同时也参考了网上其它人写的代码,在jboss7服务器下成功读出,发demo吧。

使用方法:jboss服务器或tomcat服务器,将下面的jsp文件保存到某个域名下,同时在此文件所在的目录中新建一个upload目录,然后将要读取的test.xls和test.xlsx放到upload目录下,然后运行jsp文件即可看到结果:

(1)用poi.jar来读取excel2003

必须要用到的jar文件:

poi-3.8-beta5-20111217.jar

poi-ooxml-3.8-beta5-20111217.jar

poi-ooxml-schemas-3.8-beta5-20111217.jar

xmlbeans-2.3.0.jar

dom4j-1.6.1.jar

jsr173_1.0_api.jar  (如果jdk是1.5版本则需要此jar,如果是1.6以上版本则不需要)

为了方便测试,代码为jsp,如下:

  1. <%@ page contentType="text/html; charset=gb2312" language="java" import="java.io.*" errorPage="" %>  
  2. <%@ page import="java.io.*,org.apache.poi.poifs.filesystem.POIFSFileSystem,org.apache.poi.hssf.record.*,org.apache.poi.hssf.model.*,org.apache.poi.hssf.usermodel.*,org.apache.poi.hssf.util.*" %>  
  3. <%request.setCharacterEncoding("gb2312");%>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  5. <html xmlns="http://www.w3.org/1999/xhtml">  
  6. <head>  
  7. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
  8. <title>用poi.jar来读取excel2003</title>  
  9. </head>  
  10. <body bgcolor="#F2F8FF">  
  11.   
  12. <%  
  13. try{  
  14.   String file = application.getRealPath("/") + "upload\\test.xls";  
  15.   POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(file));  
  16.   HSSFWorkbook xwb = new HSSFWorkbook(fs);  
  17.   //读取第一个sheet  
  18.   HSSFSheet sheet = xwb.getSheetAt(0);  
  19.   
  20.   //定义 row、cell  
  21.   HSSFRow row;  
  22.   HSSFCell cell;  
  23.   String output;  
  24.   int rowNum;  
  25.   int cellNum;  
  26.   
  27.   //循环输出表格中的内容  
  28.   output = "";  
  29.   rowNum = sheet.getPhysicalNumberOfRows();  
  30.   
  31.   for (int i = 0; i < rowNum; i++)  
  32.   {  
  33.     row = sheet.getRow(i);  
  34.     cellNum = row.getPhysicalNumberOfCells();  
  35.     for (int j = 0; j < cellNum; j++)  
  36.     {  
  37.       cell = row.getCell(j);  
  38.       output = output + cell.getStringCellValue() + "   ";  
  39.     }  
  40.     output = output + "<br />";  
  41.   }  
  42.   
  43.   out.print(output);  
  44.   
  45. }catch(Exception e){  
  46.   out.print(e.toString());  
  47. }  
  48.   
  49. %>  
  50.   
  51. </body>  
  52. </html>  
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.io.*" errorPage="" %>
<%@ page import="java.io.*,org.apache.poi.poifs.filesystem.POIFSFileSystem,org.apache.poi.hssf.record.*,org.apache.poi.hssf.model.*,org.apache.poi.hssf.usermodel.*,org.apache.poi.hssf.util.*" %>
<%request.setCharacterEncoding("gb2312");%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>用poi.jar来读取excel2003</title>
</head>
<body bgcolor="#F2F8FF">

<%
try{
  String file = application.getRealPath("/") + "upload\\test.xls";
  POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(file));
  HSSFWorkbook xwb = new HSSFWorkbook(fs);
  //读取第一个sheet
  HSSFSheet sheet = xwb.getSheetAt(0);

  //定义 row、cell
  HSSFRow row;
  HSSFCell cell;
  String output;
  int rowNum;
  int cellNum;

  //循环输出表格中的内容
  output = "";
  rowNum = sheet.getPhysicalNumberOfRows();

  for (int i = 0; i < rowNum; i++)
  {
    row = sheet.getRow(i);
    cellNum = row.getPhysicalNumberOfCells();
    for (int j = 0; j < cellNum; j++)
    {
      cell = row.getCell(j);
      output = output + cell.getStringCellValue() + "   ";
    }
    output = output + "<br />";
  }

  out.print(output);

}catch(Exception e){
  out.print(e.toString());
}

%>

</body>
</html>


(2)用poi读取excel2007的代码

所需jar文件同上

  1. <%@ page contentType="text/html; charset=gb2312" language="java" import="java.io.*" errorPage="" %>  
  2. <%@ page import="org.apache.poi.xssf.usermodel.XSSFRow,org.apache.poi.xssf.usermodel.XSSFSheet,org.apache.poi.xssf.usermodel.XSSFWorkbook,org.apache.poi.xssf.usermodel.XSSFCell" %>  
  3. <%request.setCharacterEncoding("gb2312");%>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  5. <html xmlns="http://www.w3.org/1999/xhtml">  
  6. <head>  
  7. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
  8. <title>用poi.jar来读取excel2007</title>  
  9. </head>  
  10. <body bgcolor="#F2F8FF">  
  11.   
  12. <%  
  13. try{  
  14.   String file = application.getRealPath("/") + "upload\\test.xlsx";  
  15.   XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));  
  16.   //读取第一个sheet  
  17.   XSSFSheet sheet = xwb.getSheetAt(0);  
  18.   
  19.   //定义 row、cell  
  20.   XSSFRow row;  
  21.   XSSFCell cell;  
  22.   String output;  
  23.   int rowNum;  
  24.   int cellNum;  
  25.   
  26.   //循环输出表格中的内容  
  27.   output = "";  
  28.   rowNum = sheet.getLastRowNum();  
  29.   
  30.   for (int i = 0; i <= rowNum; i++)  
  31.   {  
  32.     row = sheet.getRow(i);  
  33.     cellNum = row.getPhysicalNumberOfCells();  
  34.     for (int j = 0; j < cellNum; j++)  
  35.     {  
  36.       cell = row.getCell(j);  
  37.       output = output + cell.getStringCellValue() + "   ";  
  38.     }  
  39.     output = output + "<br />";  
  40.   }  
  41.   
  42.   out.print(output);  
  43.   
  44. }catch(Exception e){  
  45.   out.print(e.toString());  
  46. }  
  47.   
  48. %>  
  49.   
  50. </body>  
  51. </html>  
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.io.*" errorPage="" %>
<%@ page import="org.apache.poi.xssf.usermodel.XSSFRow,org.apache.poi.xssf.usermodel.XSSFSheet,org.apache.poi.xssf.usermodel.XSSFWorkbook,org.apache.poi.xssf.usermodel.XSSFCell" %>
<%request.setCharacterEncoding("gb2312");%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>用poi.jar来读取excel2007</title>
</head>
<body bgcolor="#F2F8FF">

<%
try{
  String file = application.getRealPath("/") + "upload\\test.xlsx";
  XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));
  //读取第一个sheet
  XSSFSheet sheet = xwb.getSheetAt(0);

  //定义 row、cell
  XSSFRow row;
  XSSFCell cell;
  String output;
  int rowNum;
  int cellNum;

  //循环输出表格中的内容
  output = "";
  rowNum = sheet.getLastRowNum();

  for (int i = 0; i <= rowNum; i++)
  {
    row = sheet.getRow(i);
    cellNum = row.getPhysicalNumberOfCells();
    for (int j = 0; j < cellNum; j++)
    {
      cell = row.getCell(j);
      output = output + cell.getStringCellValue() + "   ";
    }
    output = output + "<br />";
  }

  out.print(output);

}catch(Exception e){
  out.print(e.toString());
}

%>

</body>
</html>


(3)用jxl.jar读取excel2003的代码

需要jxl.jar即可

  1. <%@ page contentType="text/html; charset=gb2312" language="java" import="java.io.*" errorPage="" %>  
  2. <%@ page import="jxl.*" %>  
  3. <%request.setCharacterEncoding("gb2312");%>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  5. <html xmlns="http://www.w3.org/1999/xhtml">  
  6. <head>  
  7. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
  8. <title>用jxl.jar来读取excel2003</title>  
  9. </head>  
  10. <body bgcolor="#F2F8FF">  
  11.   
  12. <%  
  13. try{  
  14.   String file = application.getRealPath("/") + "upload\\test.xls";  
  15.   Workbook workbook = Workbook.getWorkbook(new File(file));  
  16.   Sheet sheet = workbook.getSheet(0);  
  17.   Cell c1 = null;  
  18.   String s1 = "";  
  19.   
  20.   c1 = sheet.getCell(0,0);  
  21.   s1 = c1.getContents();  
  22.   
  23.   workbook.close();  
  24.   
  25.   out.print(s1);  
  26.   
  27. }catch(Exception e){  
  28.   out.print(e.toString());  
  29. }  
  30.   
  31. %>  
  32.   
  33. </body>  
  34. </html>  
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.io.*" errorPage="" %>
<%@ page import="jxl.*" %>
<%request.setCharacterEncoding("gb2312");%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>用jxl.jar来读取excel2003</title>
</head>
<body bgcolor="#F2F8FF">

<%
try{
  String file = application.getRealPath("/") + "upload\\test.xls";
  Workbook workbook = Workbook.getWorkbook(new File(file));
  Sheet sheet = workbook.getSheet(0);
  Cell c1 = null;
  String s1 = "";

  c1 = sheet.getCell(0,0);
  s1 = c1.getContents();

  workbook.close();

  out.print(s1);

}catch(Exception e){
  out.print(e.toString());
}

%>

</body>
</html>


 相关jar库及代码资源下载:

http://download.csdn.net/detail/uixor_/4016423

转载于:https://my.oschina.net/u/1012289/blog/157826

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于使用POI库以event mode方式读取Excel文件,可以按照以下步骤进行: 1. 创建一个XSSFReader对象,该对象将Excel文件解析为XML格式。 2. 获取SharedStringsTable和StylesTable,这些表将在后面的步骤中用到。 3. 创建一个SheetContentsHandler对象,该对象将处理每个Sheet的内容。 4. 遍历所有的Sheet,将Sheet的InputStream传递给XSSFReader对象,并使用SheetContentsHandler处理Sheet的内容。 5. 关闭InputStream和XSSFReader对象。 下面是一个示例代码,用于演示如何使用event mode方式读取Excel文件: ```java import java.io.InputStream; import java.util.Iterator; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.openxml4j.opc.PackageAccess; import org.apache.poi.xssf.eventusermodel.XSSFReader; import org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler; import org.apache.poi.xssf.model.SharedStringsTable; import org.apache.poi.xssf.model.StylesTable; import org.xml.sax.ContentHandler; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; public class ExcelReader { public static void main(String[] args) throws Exception { String filename = "example.xlsx"; OPCPackage pkg = OPCPackage.open(filename, PackageAccess.READ); XSSFReader reader = new XSSFReader(pkg); SharedStringsTable sst = reader.getSharedStringsTable(); StylesTable styles = reader.getStylesTable(); SheetContentsHandler sheetHandler = new SheetContentsHandler(); XMLReader parser = XMLReaderFactory.createXMLReader(); parser.setContentHandler(new XSSFSheetXMLHandler(styles, sst, sheetHandler, false)); Iterator<InputStream> sheets = reader.getSheetsData(); while (sheets.hasNext()) { InputStream sheet = sheets.next(); InputSource sheetSource = new InputSource(sheet); parser.parse(sheetSource); sheet.close(); } pkg.close(); } } class SheetContentsHandler implements XSSFSheetXMLHandler.SheetContentsHandler { @Override public void startRow(int rowNum) { // TODO: 处理行的开始 } @Override public void endRow(int rowNum) { // TODO: 处理行的结束 } @Override public void cell(String cellReference, String formattedValue, XSSFComment comment) { // TODO: 处理单元格 } @Override public void headerFooter(String text, boolean isHeader, String tagName) { // TODO: 处理页眉、页脚 } } ``` 在上面的示例代码中,SheetContentsHandler是一个自定义的类,用于处理Sheet的内容。您可以根据自己的需求来实现SheetContentsHandler中的方法。另外,需要注意的是,event mode方式读取Excel文件是比较底层的操作,相对而言比较复杂,但是在读取大型Excel文件时,性能比基于DOM或SAX的方式更高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值