0

我正在尝试将文本文件转换为 Excel ......

在这样做时,会发生以下异常:

Exception in thread "main" java.lang.NoSuchMethodError: 
org.apache.poi.poifs.filesystem.POIFSFileSystem.hasPOIFSHeader(Ljava/io/InputStream;)Z  
at org.apache.poi.ss.usermodel.WorkbookFactory.create() 

我怎样才能避免这种情况?我正在提供我的片段。

 public void convertCSV(String textfile) throws Exception {

            FileInputStream inputStr = new FileInputStream(new File("/home/directory/Desktop/HI/excel.xls"));

            Workbook HssfWork = WorkbookFactory.create(inputStr);

            Sheet sheet= HssfWork.getSheetAt(0);
            int rowNo = 0;
            int columnNo = 0;
                     Cell cell = null;

            // Loop through the files.
            //for(File file : csvFiles) {
                Scanner scanner = new Scanner(textfile);
                while(scanner.hasNextLine()) {
                    String line = scanner.nextLine();
                    // Gets the row and if it doesn't exist it will create it.

                    Row Row = sheet.getRow(rowNo);
                    if(Row == null)
                        Row = sheet.createRow(rowNo);

                    Scanner lineScanner = new Scanner(line);
                    lineScanner.useDelimiter("\t");
                    // While there is more text to get it will loop.
                    while(lineScanner.hasNext()) {
                        // Gets the cell in that row and if it is null then it will be created.

                        org.apache.poi.ss.usermodel.Cell tempCell =Row.getCell(columnNo,org.apache.poi.ss.usermodel.Row.CREATE_NULL_AS_BLANK);
                        String output = lineScanner.next();
                        // Write the output to that cell.
                        tempCell.setCellValue(output);
                        columnNo++;
                    }
                    // Resets the column count for the new row.
                    columnNo = 0;
                    rowNo++;
                }

            // Writes the file and closes everything.
            FileOutputStream out = new FileOutputStream(excelFile);
            HssfWork.write(out);
            inputStr.close();
            out.close();
        }
4

2 回答 2

0

第一个猜测是:你的 JAR 版本错误。我猜你的类路径中至少有 2 个 JARS,WorkbookFactory在一个中,POIFSFileSystem在另一个中。检查第二个 JAR 的版本。

NoSuchMethodException意思是它所说的:被 (by WorkbookFactory) 调用的方法不存在。所以如果你得到它,这意味着这个类POIFSFileSystem 确实存在——否则你就会得到 dreaded NoClassDefFoundError。所以你必须有正确的库,但它的不同版本hasPOIFSHeader()尚未添加......或已被删除......

于 2013-06-07T09:45:06.380 回答
0

正如 Andrew 在他的回答中指出的那样,您会遇到该异常,因为您没有使用一组匹配的 POI jar。这有两个常见的原因。一个是你以某种方式选择了一组不匹配的罐子,例如poi-ooxml-3.10-beta1-20130204.jarpoi-3.8-final.jar- 这不起作用。或者,您已将匹配集放置到您的类路径中,但那里已经有较旧的 jar,并且您的类加载器选择了一个随机集。

无论哪种方式,我都建议您按照这个 Apache POI FAQ Entry 中关于该主题的说明来确定您实际使用的 POI Jars。然后,工作直到你有一个匹配的集合。POI 与大多数应用程序一样,要求所有使用的罐子都来自相同的版本!

于 2013-06-07T14:28:04.737 回答