EazyExcel读取Excel文件失败的处理方式

问题描述:
在SpringBoot和EazyExcel环境下读取Excel文件,在本地开发的时候一切正常,但是当项目部署到线上的时候,出现了问题。

问题一:java.io.FileNotFoundException: no such entry: “Workbook”, had: [Book]

该问题的原因是因为服务器的环境问题,我遇到的服务器是一个windows7系统,经过排查后,发现该电脑上没有安装Office组件,只安装了wps组件,这里出现这个问题,应该是应为本地没有高于2007以上的Excel组件。
这里可以自行百度一下如何检查一下本地的COM组件
服务器上的文件类型均为2003的版本,但是由于需要2003版本的旧文件也需要读取其中的数据,所以这里我在代码中加入前置处理
因为2003的版本的文件类型为.xls,所以这里将所有读取xls的文件全部通过代码另存为xlsx格式
这里需要注意一下,new Variant(51)中的51就是表示需要转换的文件类型,这里我们用的xlsx,所以用51,如果需要其他类型,可以参考结尾的表格!
public File convertFileTypes(String inputFilePath) {  
  
    // 实例化ComThread线程与ActiveXComponent  
    ComThread.InitSTA();  
    ActiveXComponent wordApp = new ActiveXComponent("Excel.Application");  
    String outInputFilePath = System.getProperty("user.dir") + "\\" + System.currentTimeMillis() + ".xlsx";  
    try {  
        // 文件隐藏时进行应用操作  
        wordApp.setProperty("Visible", new Variant(false));  
        // 实例化模板Workbooks对象  
        Dispatch workbooks = wordApp.getProperty("Workbooks").toDispatch();  
        // 打开Workbooks进行另存为操作  
        Dispatch doc = Dispatch.invoke(workbooks, "Open", Dispatch.Method, new Object[]{inputFilePath, new Variant(true), new Variant(true)}, new int[1]).toDispatch();  
        Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[]{outInputFilePath, new Variant(51)}, new int[1]);  
        Dispatch.call(doc, "Close", new Variant(false));  
        logBox.appendText("转换文件格式成功!\n");  
        return new File(outInputFilePath);  
    } catch (Exception e) {  
        log.error("转换文件格式失败!\n", e);  
        logBox.appendText("转换文件格式失败!\n");  
        throw e;  
    } finally {  
        // 释放线程与ActiveXComponent  
        wordApp.invoke("Quit", new Variant[]{});  
        ComThread.Release();  
    }  
}

问题二:org.apache.poi.hssf.OldExcelFormatException: The supplied spreadsheet seems to be Excel 5.0/7.0 (BIFF5) format. POI only supports BIFF8 format (from Excel versions 97/2000/XP/2003)

出现这个问题是因为在强制转文件格式的时候,源文件是BIFF5格式的,但是POI目前仅仅支持BIFF8格式的,所以同样需要问题一的方法进行另存为

问题三:jacob 报错 Can’t co-create object

问题一中使用额是jacob进行文件另存为的操作,但是在我实际运用中,又遇到了这个问题,
后来经过排查后,发现是因为服务器上没有安装office的组件
于是需要在服务器上安装上office组件,安装office2010以上的版本,问题即可解决
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值