java - 无法使用 ApachePOI 打开 excel - 获取异常

标签 java apache-poi

在尝试使用 ApachePOI 打开 excel 时,我得到了

org.apache.poi.openxml4j.exceptions.InvalidOperationException:无法打开指定文件:'C:\Users\mdwaipay\AppData\Local\Temp\poifiles\poi-ooxml-1570030023.tmp'

我查过了。没有创建这样的文件夹。我使用的是 Apache POI 3.6 版。

有什么帮助吗?类似的代码在不同的工作区中运行良好。在这里失去了想法。

代码:

public Xls_Reader(String path) {
  this.path=path; 
  try { 
      fis = new FileInputStream(path); 
      workbook = new XSSFWorkbook(fis); 
      sheet = workbook.getSheetAt(0); 
      fis.close(); 
  }
  catch (Exception e) 
  { e.printStackTrace(); 
  } 
}

最佳答案

为什么你要拿一个非常好的文件,将它包装在 InputStream 中,然后要求 POI 必须为你缓冲所有文件以便它可以进行随机访问?如果您直接将文件传递给 POI,生活会好得多,因此它可以根据需要跳过!

如果您想同时使用 XSSF (.xlsx) 和 HSSF (.xls),请将您的代码更改为

public Xls_Reader(String path)  { 
  this.path = path; 
  try { 
    File f = new File(path);
    workbook = WorkbookFactory.create(f); 
    sheet = workbook.getSheetAt(0); 
  } catch (Exception e) {
    e.printStackTrace();
  } 
}

如果您只需要 XSSF 支持,和/或您需要完全控制资源何时关闭,请改为执行类似的操作

OPCPackage pkg = OPCPackage.open(path);
Workbook wb = new XSSFWorkbook(pkg);

// use the workbook

// When you no longer needed it, immediately close and release the file resources
pkg.close();

关于java - 无法使用 ApachePOI 打开 excel - 获取异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12350775/

相关文章:

java.lang.NullPointerException 在 sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java :1009)

java - 将第三方对象传递给构造函数的最佳方法是什么

Java - ( Apache POI ) 在循环中设置单元格公式

java - Spring 3 Controller - 通过流程维护模型

java - 带负数的 BigInteger 求幂

java - 如何同步两个方法以防止它们同时被不同线程访问,但只允许一种方法有多个实例

java - 尝试使用 apache POI 从 Excel 工作表检索数据

java - 在 Eclipse 中读取 Assets

java - POI 用变音符号阅读

java - 如何在 Apache POI 中将负货币值设为红色字体