Java 将扩展名为.xls但另存为xml电子表格2003的文件转换为.xls文件格式

Java 将扩展名为.xls但另存为xml电子表格2003的文件转换为.xls文件格式,java,jakarta-ee,apache-poi,jxl,Java,Jakarta Ee,Apache Poi,Jxl,我有一个文件扩展名.XLS,但另存为XMl电子表格2003,想读取该文件并用java代码将其转换为.XLS扩展名我的代码如下- 公共类导入{ public boolean readStream(InputStream stream) throws InvalidFormatException { boolean success; try { byte[] bytes = getBytes(stream); InputStream wrappedS

我有一个文件扩展名.XLS,但另存为XMl电子表格2003,想读取该文件并用java代码将其转换为.XLS扩展名我的代码如下-

公共类导入{

public boolean readStream(InputStream stream) throws InvalidFormatException {
    boolean success;

    try {
        byte[] bytes = getBytes(stream);
        InputStream wrappedStream = new ByteArrayInputStream(bytes);

        Workbook workbook = WorkbookFactory.create(wrappedStream);
        //XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(wrappedStream.toString()));
        for (int i = 0; i <workbook.getNumberOfSheets(); i++) {
            Sheet sheet = workbook.getSheetAt(i);
            for (Row row : sheet) {
                IterateThroughRow(row);
            }
        }
        success = true;
    } catch (FileNotFoundException e) {
        success = false;
        e.printStackTrace();
    } catch (IOException e) {
        success = false;
        e.printStackTrace();
    }
    return success;
}

private void IterateThroughRow(Row row) {
    Iterator<Cell> cellIterator = row.cellIterator();

    while (cellIterator.hasNext()) {
        Cell cell = cellIterator.next();

        switch (cell.getCellType()) {
            //do something with the content...
            case Cell.CELL_TYPE_STRING:
                cell.getStringCellValue();
                break;
            case Cell.CELL_TYPE_NUMERIC:
                cell.getNumericCellValue();
                break;
            case Cell.CELL_TYPE_BOOLEAN:
                cell.getBooleanCellValue();
                break;
            default:
        }
    }
}

public static byte[] getBytes(InputStream is) throws IOException {
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();

    int len;
    byte[] data = new byte[100000];
    while ((len = is.read(data, 0, data.length)) != -1) {
        buffer.write(data, 0, len);
    }

    buffer.flush();
    return buffer.toByteArray();
}

public static void main(String[] args) throws InvalidFormatException, IOException {

    ExcelImport excelImport = new ExcelImport();
    InputStream is = new FileInputStream("C:/Users/Desktop/Test.xls");
    excelImport.readStream(is);
public boolean readStream(InputStream流)引发InvalidFormatException{
布尔成功;
试一试{
字节[]字节=getBytes(流);
InputStream wrappedStream=新的ByteArrayInputStream(字节);
工作簿=WorkbookFactory.create(wrappedStream);
//XSSFWorkbook工作簿=新XSSFWorkbook(新文件输入流(wrappedStream.toString());

对于(int i=0;i您可以尝试运行文件路径| hextump-n 8-e以确保文件实际上是它所说的内容。从异常情况来看,POI似乎无法理解文件格式。

这根本不是
apache POI
的目的。它能够读取二进制
*.xls
文件
Excel
BIFF
格式(也称为OLE2
)或
Office Open XML
OOXML
)中的
*.xlsx
文件格式。但它无法读取
Microsoft Office Excel 2002和Excel 2003 XML
格式。嗨,Alex,java中是否有其他api可供我读取并将其转换为正确的.xls格式。有关帮助信息,请参阅.Hi Alex thanx a ton,如果有任何示例可以使用hel将电子表格转换为.xls格式,请告诉我我有一个.xls格式的文件,但它的内部显示像一个具有XML结构的电子表格。请给我一个解决方案,我如何检查文件格式,因为当我检查它时,它说的是简单的.xls格式。但是如何获得一个文件格式,区分普通的.xls文件和.xls文件包含XML结构.请帮我找到解决办法。