Excel Java导入问题,标题签名无效?

时间:2014-02-21 17:37:44

标签: java excel apache-poi java-io

我是Java的新手,导致我的Excel工作表出现问题。我正在尝试使用Apache Poi库将Excel电子表格打印到Java控制台中。当我运行我的代码时,我得到以下异常:

  

java.io.IOException:无效的标头签名;读   0x656D614E2C234449,预计为0xE11AB1A1E011CFD0

我如何修复它以匹配我的标题?这是这样的......

ID#, Name, Age, Street Address, City, State, Zip, Employer, Prescription

以下是我的代码:

//imports, blah blah, etc...

    public static void main( String [] args ) {

        try {

            InputStream input = new BufferedInputStream(new FileInputStream(
                "c:/Users/sgoetz/Desktop/Week3ProgrammingData.csv"));
            POIFSFileSystem fs = new POIFSFileSystem( input );
            HSSFWorkbook wb = new HSSFWorkbook(fs);
            HSSFSheet sheet = wb.getSheetAt(0);

            Iterator rows = sheet.rowIterator();

            while( rows.hasNext() ) {  
                HSSFRow row = (HSSFRow) rows.next();
                System.out.println("\n");
                Iterator cells = row.cellIterator();

                while( cells.hasNext() ) {
                    HSSFCell cell = (HSSFCell) cells.next();

                    if(HSSFCell.CELL_TYPE_NUMERIC==cell.getCellType())
                        System.out.print( cell.getNumericCellValue()+"     " );
                    else
                        if(HSSFCell.CELL_TYPE_STRING==cell.getCellType())
                            System.out.print( cell.getStringCellValue()+"     " );
                        else
                            if(HSSFCell.CELL_TYPE_BOOLEAN==cell.getCellType())
                                System.out.print( cell.getBooleanCellValue()+"     " );
                            else
                                if(HSSFCell.CELL_TYPE_BLANK==cell.getCellType())
                                    System.out.print( "BLANK     " );
                                else
                                    System.out.print("Unknown cell type");
                }
            }
        } catch ( IOException ex ) {
            ex.printStackTrace();
        }
    }
}

3 个答案:

答案 0 :(得分:1)

POI - 您使用的所有HSSF类库等 - 用于导入和导出Excel文档(.xls,.xlsx)。您正试图在CSV文档上使用它,这将无法正常工作。

我建议使用像SuperCSV这样的库。

答案 1 :(得分:0)

这是对的吗?

   InputStream input = new BufferedInputStream(
               new FileInputStream("c:/Users/sgoetz/Desktop/Week3ProgrammingData.csv"));

我希望POI实际上读取Excel格式(Microsoft的OLE 2复合文档)文件,而不是.csv文件。

答案 2 :(得分:0)

“无效的标题签名”是关于标识用于创建Excel文件的Excel版本的标题。如果文件不是Excel文件或是97之前的Excel文件,则会出现此错误。