我是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();
}
}
}
答案 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文件,则会出现此错误。