读取excel文件时出错

时间:2016-05-27 06:21:44

标签: java excel apache-poi

以下是代码: -

    try {
        ByteArrayInputStream bis = new ByteArrayInputStream(file.getBytes());
        if (file.getOriginalFilename().endsWith(Constants.XLS_EXTENSION)) {
            return new HSSFWorkbook(bis);
        } else if (file.getOriginalFilename().endsWith(Constants.XLSX_EXTENSION)) {
            return new XSSFWorkbook(bis);
        } else {
            throw new IllegalArgumentException("Received file does not have a standard excel extension.");
        }
    } catch (IOException | IllegalArgumentException e) {
        log.error("Exception while reading the file", e);
    }
    return null;

在读取xls格式文件时出错。

以下是例外: -

2016-05-27 11:48:24 --- [http-nio-6060-exec-1] ERROR com.atms.web.rest.controllers.TestCaseResource:912 - 读取文件时出现异常

java.io.IOException:无法读取整个标头;读取181个字节;预计512字节

1 个答案:

答案 0 :(得分:2)

我还没有看过之前用过的ByteArrayInputStream。你确定不是问题吗?

从快速指南:https://poi.apache.org/spreadsheet/quick-guide.html#FileInputStream

// Use a file
Workbook wb = WorkbookFactory.create(new File("MyExcel.xls"));

// Use an InputStream, needs more memory
Workbook wb = WorkbookFactory.create(new FileInputStream("MyExcel.xls"));

如果直接使用HSSFWorkbook或XSSFWorkbook,通常应该通过NPOIFSFileSystem或OPCPackage来完全控制生命周期(包括完成后关闭文件):

// HSSFWorkbook, File
NPOIFSFileSystem fs = new NPOIFSFileSystem(new File("file.xls"));
HSSFWorkbook wb = new HSSFWorkbook(fs.getRoot(), true);
....
fs.close();

// HSSFWorkbook, InputStream, needs more memory
NPOIFSFileSystem fs = new NPOIFSFileSystem(myInputStream);
HSSFWorkbook wb = new HSSFWorkbook(fs.getRoot(), true);
....
fs.close();

尝试其中之一,然后如果您仍有问题,我们可以研究其他问题的可能性。