使用Java和Apache poi从.xls或.xlsx文件读取内容

我正在我的代码下运行在STS与Java 1.7版本在Ubuntu 14的版本,我不能解决这个问题,即使我已经testing了下面的2个程序,通过添加所有的Apache poi 3.9版本的一次和3.2版本的第二次。 但每一次都给出了几乎相同的错误
请提前告知我一些事情。

以下是我的代码从.xlsx文件读取数据

 import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ReadData { public static void main(String a[]) throws FileNotFoundException { try { File file = new File("Test.xlsx"); FileInputStream fis = new FileInputStream(file); XSSFWorkbook hwb = new XSSFWorkbook(fis); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

和我得到的错误是

Exception in thread "main" org.apache.poi.POIXMLException: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13] at org.apache.poi.util.PackageHelper.open(PackageHelper.java:39) at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:273) at com.axxera.selenium.ReadData.main(ReadData.java:18) Caused by: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13] at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:201) at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:684) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:275) at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37)

以下代码用于从.xls文件读取数据

 public class ReadData { public static void main(String a[]) throws FileNotFoundException { try { File file = new File("Test.xls"); FileInputStream fis = new FileInputStream(file); HSSFWorkbook hwb = new HSSFWorkbook(fis); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

上面的代码正在产生这个错误

Exception in thread "main" org.apache.poi.poifs.filesystem.OfficeXmlFileException: 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) at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:128) at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:112) at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.<init>(NPOIFSFileSystem.java:300) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:400) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:381) at com.axxera.selenium.ReadData.main(ReadData.java:17)

好像你在xlsx下保存了xls ,反之亦然。

尝试Workbook wb = WorkbookFactory.create(file | inputStream) 。 它打开与文件扩展名无关的文件。

你的代码在poi-3.5-FINAL.jar和.xls文件中工作正常

你好,代码为.xls。 但你应该处理另一个文件扩展名( .xlsx