Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从ApachePOIJava读取Excel_Java_Excel_Apache Poi - Fatal编程技术网

从ApachePOIJava读取Excel

从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);

我在读取excel文件时遇到了一个奇怪的问题,我创建了一个要测试的文件,但仍然存在相同的问题,工作簿返回时有0个工作表,但有3个工作表:以下是我的代码:

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文件类型

请执行以下任一步骤

  • 将文件扩展名更改为.xls(.xlsx文件仅在中受支持 XSSF不在HSSF中。)
  • 通过保持xlsx文件扩展名,将HSSF更改为XSSF

  • 看起来,您对不受支持的类使用了错误的文件类型

    HSSF工作簿类将仅支持.xls文件类型,而XSSFWorkbook类将同时支持.xls和.xlsx文件类型

    请执行以下任一步骤

  • 将文件扩展名更改为.xls(.xlsx文件仅在中受支持 XSSF不在HSSF中。)
  • 通过保持xlsx文件扩展名,将HSSF更改为XSSF

  • 您的问题是您没有加载文件,而是创建了一个新文件。这里有几行:

    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依赖项