Java使用Apache POI库读取Excel表格文档的示例_java

Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。
项目下载页:http://poi.apache.org/download.html

Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件。Apache POI 提供Java操作Excel解决方案。

  • HSSF - 提供读写Microsoft Excel XLS格式档案的功能。
  • XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
  • HWPF - 提供读写Microsoft Word DOC格式档案的功能。
  • HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
  • HDGF - 提供读Microsoft Visio格式档案的功能。
  • HPBF - 提供读Microsoft Publisher格式档案的功能。
  • HSMF - 提供读Microsoft Outlook格式档案的功能。

读取Excel文档示例
我们使用POI中的HSSFWorkbook来读取Excel数据。

public void test(File file) throws IOException {
    InputStream inp = new FileInputStream(file);
    HSSFWorkbook workbook = new HSSFWorkbook(inp); 

    // workbook...遍历操作
  } 

上边代码,读取Excel2003(xls)的文件没问题,但是一旦读取的是Excel2007(xlsx)的文件,就会报异常:“The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)”
查阅了资料,Excel2007版本的Excel文件需要使用XSSFWorkbook来读取,如下:

public void test(File file) throws IOException {
    InputStream inp = new FileInputStream(file);
    XSSFWorkbook workbook = new XSSFWorkbook(inp); 

    // workbook...遍历操作
  }

注意:XSSFWorkbook需要额外导入poi-ooxml-3.9-sources.jar和poi-ooxml-schemas-3.9.jar。
这样,Excel2007的导入没问题了,但是导入Excel2003又报异常。

所以,在导入Excel的时候,尽量能判断导入Excel的版本,调用不同的方法。
我想到过使用文件后缀名来判断类型,但是如果有人将xlsx的后缀改为xls时,如果使用xlsx的函数来读取,结果是报错;虽然后缀名对了,但是文件内容编码等都不对。
最后,推荐使用poi-ooxml中的WorkbookFactory.create(inputStream)来创建Workbook,因为HSSFWorkbook和XSSFWorkbook都实现了Workbook接口。代码如下:

Workbook wb = WorkbookFactory.create(is); 

可想而知,在WorkbookFactory.create()函数中,肯定有做过对文件类型的判断,一起来看一下源码是如何判断的:

/**
   * Creates the appropriate HSSFWorkbook / XSSFWorkbook from
   * the given InputStream.
   * Your input stream MUST either support mark/reset, or
   * be wrapped as a {@link PushbackInputStream}!
   */
  public static Workbook create(InputStream inp) throws IOException, InvalidFormatException {
    // If clearly doesn't do mark/reset, wrap up
    if(! inp.markSupported()) {
      inp = new PushbackInputStream(inp, 8);
    } 

    if(POIFSFileSystem.hasPOIFSHeader(inp)) {
      return new HSSFWorkbook(inp);
    }
    if(POIXMLDocument.hasOOXMLHeader(inp)) {
      return new XSSFWorkbook(OPCPackage.open(inp));
    }
    throw new IllegalArgumentException("Your InputStream was neither an OLE2 stream, nor an OOXML stream");
  } 

可以看到,有根据文件类型来分别创建合适的Workbook对象。是根据文件的头部信息去比对进行判断的,此时,就算改了后缀名,还是一样通不过。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, windows
, excel
poi
apache poi中文文档、apache poi读取excel、apache poi帮助文档、apache poi 读取word、apache poi 读取xlsx,以便于您获取更多的相关知识。

时间: 2024-11-01 18:57:49

Java使用Apache POI库读取Excel表格文档的示例_java的相关文章

java读取excel表格内容

问题描述 java读取excel表格内容 java读取excel表格内容,中间有好多空格,空格下面还有字,但是我就想读到空格上面,下面的不想读了,该怎么办呢 解决方案 使用POI组建读excel数据 解决方案二: POI 读取行列都可以的 . 解决方案三: 使用POI组建读excel数据,然后进行判断,空格就结束 解决方案四: 读到固定的某一行某一列就行了,,, 解决方案五: POI读取excel 时,是循环行读取的,在读取行数据时判断当前行数据是否为空,如果为空就跳出循环

Java数据导入功能之读取Excel文件实例_java

在编程中经常需要使用到表格(报表)的处理主要以Excel表格为主.下面给出用java读取excel表格方法: 1.添加jar文件 java导入导出Excel文件要引入jxl.jar包,最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件.下载地址:http://www.andykhan.com/jexcelapi/ 2.jxl对Excel表格的认识 (1)每个单元格的位置认为是由一个二维坐标(i,j)给定,其中i表示列,j表示

excel-VS2008如何读取Excel表格某一特定工作表(sheet)的内容?

问题描述 VS2008如何读取Excel表格某一特定工作表(sheet)的内容? 再编写一个VS2008读取Excel表格内参数的程序,目前可以实现读取Excel表格当前活跃工作表(例如sheet1)中的数据,但是如果我想读取另外一个非当前活跃工作表(比方是sheet2).换一种说法,就是当前活跃的工作表是sheet1,但是我不但需要读取sheet1里面的一些数据,还需要读一点sheet2里面的数据,我该用什么语句直接在程序里面把sheet1的相关数据读出来,然后紧接着可以读取sheet2里面的

写入sql2005-vs2005中读取EXCEL表格数据

问题描述 vs2005中读取EXCEL表格数据 环境如下,vs2005,sql2005,EXCEL表格一个, 我需要通过VS2005编写一段C#代码,来从EXCEL表格中读取数据,再存入到sql2005表格中,哪位大神知道麻烦告诉下,代码写出来给我看,分数不吝啬,谢谢! 解决方案 这是以前做过的一个例子,你只看你需要的就可以了,这种方法首先要把数据库的格式设计成excel的格式 private void insertSQL_Click(object sender, EventArgs e) {

java poi word-这个poi把String写入word文档后,打开文档就报“打开文件错误”,求高人解决下

问题描述 这个poi把String写入word文档后,打开文档就报"打开文件错误",求高人解决下 import java.io.ByteArrayInputStream;import java.io.FileOutputStream;import java.io.IOException; import org.apache.poi.poifs.filesystem.DirectoryEntry;import org.apache.poi.poifs.filesystem.Documen

如何在java中实现读取一个txt文档中的随机一行

问题描述 如何在java中实现读取一个txt文档中的随机一行 如题,如何在java中实现读取一个txt文档中的随机一行? 主要就是怎么随机读取 解决方案 根据楼上的说法,来总结一下吧,总体来说,就是将文件全部都读取出来,每一行存储到一个数组或集合中,然后再通过产生随机数,来对这个数组或是 集合进行随机的访问.这样一来就解决了 解决方案二: 文本文件只能顺序读,不能随机读.你的需求只能是读取文本文件每一行到一个arraylist,然后得到下标范围,产生一个随机数,取那一行 解决方案三: http:

教你破解Word与Excel的文档密码

经常和办公软件打交道的人肯定知道,如果把加密文档的密码忘了就相当于将这个文件报废了,那将会是一件多么可怕的事情.但人类是万能的,今天就为大家介绍一款软件,可以松破解Word和Excel密码,解您后顾之忧.这个工具就是Office Password Remover. 它可以在很短的时间内破解Word和Excel文档的密码,经过测试最多不超过5秒.使用本软件时需要连接到Internet,因为要给该软件的服务器发送数据并解密.不过大家可以放心,本软件不会泄露任何个人隐私. 使用方法: 首先运行解压好的

mfc c c++ 界面 控件-求界面库BCG中文帮助文档

问题描述 求界面库BCG中文帮助文档 哪位有BCG的中文帮助文档吗,是全中文的那种,英文的读起来太费劲了,不好理解.有的话给个链接,谢谢了- 解决方案 找google翻译,或者找人翻译,1000字100块钱.

java xml-用eclipse编辑java中的XML,怎么插入.dtd文档??

问题描述 用eclipse编辑java中的XML,怎么插入.dtd文档?? 在java中,XML用来布局管理时,怎么在eclipse插入解析XML的.dtd文档,在插入时,其中key type和key分别填什么??求大神指教. 解决方案 http://danne823.iteye.com/blog/847706