从ApachePOIJava读取Excel
我在读取excel文件时遇到了一个奇怪的问题,我创建了一个要测试的文件,但仍然存在相同的问题,工作簿返回时有0个工作表,但有3个工作表:以下是我的代码:从ApachePOIJava读取Excel,java,excel,apache-poi,Java,Excel,Apache Poi,我在读取excel文件时遇到了一个奇怪的问题,我创建了一个要测试的文件,但仍然存在相同的问题,工作簿返回时有0个工作表,但有3个工作表:以下是我的代码: FileInputStream fs = new FileInputStream(new File("C:/Users/TO124415/Desktop/test.xlsx")); HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet hs = wb.getSheetAt(0);
FileInputStream fs = new FileInputStream(new File("C:/Users/TO124415/Desktop/test.xlsx"));
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet hs = wb.getSheetAt(0);
int number = wb.getNumberOfSheets();
System.out.println(number);
FormulaEvaluator form = wb.getCreationHelper().createFormulaEvaluator();
HSSFCell value = wb.getSheetAt(0).getRow(14).getCell(1);
for (Row rw : hs){
for(Cell cell : rw){
switch(form.evaluateInCell(cell).getCellType()){
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cell.getNumericCellValue());
case Cell.CELL_TYPE_STRING:
System.out.println(cell.getStringCellValue());
}
}
}
我有一个错误:
Exception in thread "main" java.lang.IllegalArgumentException: Sheet index (0) is out of range (no sheets)
如果我将getSheetAt设置为(3),则必须出现此错误,因为我知道索引从0开始,而不是从1开始。
有人可以解释一下吗?尝试使用XSSFWorkbook而不是HSSF工作簿 编辑 正如这里所解释的 HSSF是POI项目的Excel'97(-2007)文件格式的纯Java实现。XSSF是POI项目的Excel 2007 OOXML(.xlsx)文件格式的纯Java实现
尝试使用XSSFWorkbook而不是HSSFWorkbook 编辑 正如这里所解释的 HSSF是POI项目的Excel'97(-2007)文件格式的纯Java实现。XSSF是POI项目的Excel 2007 OOXML(.xlsx)文件格式的纯Java实现
看起来,您对不受支持的类使用了错误的文件类型 HSSF工作簿类将仅支持.xls文件类型,而XSSFWorkbook类将同时支持.xls和.xlsx文件类型 请执行以下任一步骤
看起来,您对不受支持的类使用了错误的文件类型 HSSF工作簿类将仅支持.xls文件类型,而XSSFWorkbook类将同时支持.xls和.xlsx文件类型 请执行以下任一步骤
您的问题是您没有加载文件,而是创建了一个新文件。这里有几行:
FileInputStream fs = new FileInputStream(new File("C:/Users/TO124415/Desktop/test.xlsx"));
HSSFWorkbook wb = new HSSFWorkbook();
打开一个文件进行阅读,然后立即忽略它并创建一个全新的空工作簿。一个没有工作表的空工作簿,这就是为什么您会得到没有工作表的错误
相反,您希望执行以下操作:
File input = new File("C:/Users/TO124415/Desktop/test.xlsx");
Workbook wb = WorkbookFactory.create(input);
这将读取工作簿的内容,并为您自动检测类型(因此您可以使用XLS和XLSX)您的问题是您没有加载文件,而是创建了一个新文件。这里有几行:
FileInputStream fs = new FileInputStream(new File("C:/Users/TO124415/Desktop/test.xlsx"));
HSSFWorkbook wb = new HSSFWorkbook();
打开一个文件进行阅读,然后立即忽略它并创建一个全新的空工作簿。一个没有工作表的空工作簿,这就是为什么您会得到没有工作表的错误
相反,您希望执行以下操作:
File input = new File("C:/Users/TO124415/Desktop/test.xlsx");
Workbook wb = WorkbookFactory.create(input);
这将读取工作簿的内容,并为您自动检测类型(因此您可以使用XLS和XLSX)它正在做同样的事情,但仍然存在问题。您需要加载文件,而不是创建新的空文件!如果你真的想使用
.xlx
你需要使用通用的工作簿
而不是HSSF
类,它们都是.xls
的,但它做同样的事情,仍然有问题。你需要加载你的文件,而不是创建一个新的空文件!如果你真的想使用.xlx
你需要使用通用工作簿
而不是HSSF
类,它们是.xls
onlytanks,我在XSSF中使用了.xls,这是由以下原因引起的新问题:java.lang.ClassNotFoundException:org.apache.xmlbeans.XmlException位于java.net.URLClassLoader$1.runjava.net.URLClassLoader.findClass(未知源)java.lang.ClassLoader.loadClass(未知源)sun.misc.Launcher$AppClassLoader.loadClass(未知源)java.lang.ClassLoadClass(未知源)的java.security.AccessController.doPrivileged(本机方法)中的(未知源代码)1.more@DevWeb:如果您使用的是XSSFWorkbook,那么需要添加XSSF POI jar。请添加所需的jar,然后检查jar是否包含在内,但您是对的,我下载了xmlbeans jar,它成功了。非常感谢。谢谢,我在XSSF中使用了.xls,这是由以下原因引起的新问题:java.lang.ClassNotFoundException:org.apache、 java.net.URLClassLoader$1的xmlbeans.XmlException。java.net.URLClassLoader.findClass(未知源)的java.net.URLClassLoader.findClass(未知源)的java.net.URLClassLoader.loadClass(未知源)的java.lang.ClassLoader.loadClass(未知源)的java.misc.Launcher$AppClassLoader.loadClass(未知源)的java.lang.classloadclass(来源不明)1.more@DevWeb:如果您使用的是XSSFWorkbook,则需要添加XSSF POI jar。请添加所需的jar,然后检查jar是否包含在内,但您是对的,我下载了xmlbeans jar,它工作正常。非常感谢。我收到此错误:由以下原因引起:java.lang.ClassNotFoundException:org.apache.xmlbeans.XmlException at java.net.URLClassLoader$1.run(未知源代码)在java.net.URLClassLoader.findClass(未知源代码)在java.lang.ClassLoader.loadClass(未知源代码)在sun.misc.Launcher$AppClassLoader.loadClass(未知源代码)在java.security.AccessController.doPrivileged(本机方法)运行添加poi ooxml dependencyI收到此错误:原因:java.lang.ClassNotFoundException:org.apache.xmlbeans.XmlException位于java.net.URLClassLoader$1.run(未知源)位于java.security.AccessController.doPrivileged(本机方法)位于java.net.URLClassLoader.findClass(未知源)位于java.lang.ClassLoader.loadClass(未知源)在sun.misc.Launcher$AppClassLoader.loadClass(未知源)中添加poi ooxml依赖项