当前位置: 首页 > 知识库问答 >
问题:

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

商嘉木
2023-03-14

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

公共类ExcelImport{

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

共有1个答案

景元徽
2023-03-14

您可以尝试运行文件路径hexdump-n8-e,以确保文件实际上是它所说的那样。从这个例外看来,POI似乎无法理解文件格式。

 类似资料:
  • 问题内容: 我正在使用Apache POI库将大量数据导入Excel文件。我不能使用HSSF模型,因为它需要太多内存,并且Java会抛出内存堆异常。我发现的方法是SXSSF工作簿模型,该模型将每N行写入文件中,而不是将所有工作簿存储在内存中。但是我找不到方法,如何将其保存到.xls(Excel 2003及更低格式)而不是.xlsx。 问题答案: 你不能 如POI组件页面上所述,HSSF用于处理.x

  • 问题内容: 如何使用POI API或Docx4j将“ .dotx” Word模板转换为普通的“ .docx”? 问题答案: 需要将内容类型从更改为。 使用示例:

  • 问题内容: 有谁知道是否有可以让我将XLS最好转换为JSON的应用程序? 我还将为CSV转换程序做准备,因为如果周围什么都没有的话,我可能最终不得不写自己。 问题答案: 这对我来说效果很好,不需要上传文件: https://github.com/cparker15/csv-to- json?files=1

  • 问题内容: 我是python的新手,我正在尝试使用下面显示的代码来执行上面的标题所说的。它一直运行到我要求保存xls输出的位置。任何帮助将不胜感激。 [编辑]此代码有效。 问题答案: 我相信,您需要为输出电子表格设置编码。您需要知道该文件正在使用什么编码。csv模块不直接支持unicode,但它仅适用于大多数西方语言。 在不知道文本文件的编码是什么的情况下,您有两个选择。选项1是根据python使

  • 问题内容: 我看过很多关于此的文章,但它们似乎已经过时,例如,没有一个Google Docs Spreadsheet网址具有关键参数。 然后,我阅读了此内容以访问数据 https://developers.google.com/gdata/samples/spreadsheet_sample 我的电子表格位于:https : //docs.google.com/spreadsheets/d/1SK