记一次解析旧版本Excel文件

前言

最近公司安排提取机器分析出excel模板数据,因为excel模板比较老,使用poi分析出现 Exception in thread "main" 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) 意思也就是poi只支持BIFF8,这个文件比较老poi不支持。

查找资料有两种解决办法,如下

1.使用POI提供的OldExcelExtractor,缺点就是只能读成文本,不能定位坐标(根据第几行第几列获取单元格数据)

OldExcelExtractor oldExcelExtractor = new OldExcelExtractor(new FileInputStream(new File("")));

       2.使用其他读Excel的工具类,查找资料使用JExcelApi,但是这个在09还是10年就已经不再更新维护了,下载了一个最新的版本试了一下,还是会报错。

穷途末路,只能想办法升级目前的文件的版本,继续查找资料,网上给出的解决办法就是打开excel文件,点击另存为,选择xlsx文件保存,这就给了我思路,可以模拟windows的打开,另存为操作,将文件转为高版本的excel文件。说干就干。

第一步:

网上下载jacob的压缩包(下载链接:https://pan.baidu.com/s/1sYusSuhni9mNu9JzJxtwzg  提取码:utbp)

解压之后又32位和64位的一个dll文件以及jar包,dll 放入java环境变量的bin目录下,如果不行32位的放在C:\\Windows\\System32下,64位的放入C:\\Windos\\SysWOW64目录下,当然这个不是全部需要放,只需要对应的系统放入对应的位置。如果抛了异常,Exception in thread "main" java.lang.UnsatisfiedLinkError: no jacob-1.17-M2-x64 in java.library.path ,说明dll放的位置没有读取到,可以将java SDK重新导入项目,或者dll放的位置再次确认一下。

第二步:

       其他的话就不多哔哔了,默认已经经jacob.jar导入到项目中,直接上代码了

转为xlsx示例代码:

 public static String saveAs(File file,String outDir) {
        File file1 = new File(outDir,System.currentTimeMillis()+".xlsx");
        ActiveXComponent xl = new ActiveXComponent("Excel.Application");//这里也可以Word等
        xl.setProperty("Visible",new Variant(false));
        Dispatch workbook = xl.getProperty("Workbooks").toDispatch();
        workbook = Dispatch.invoke(workbook, "Open", Dispatch.Method, new Object[] {         
                  file.getAbsolutePath(), new Variant(false)}, new int[1]).toDispatch();
        Dispatch.call(workbook,"SaveAS",file1.getAbsolutePath(),51);//51代表什么,参考下表
        Dispatch.call(workbook, "Close", new Variant(false));
        return file1.getAbsolutePath();
}

到这里模拟另存为已经完成了。当然这个包不止能做“另存为”。

另存为的文件可以使用POI进行解析了,接下来就不一一赘述了。

XlFileFormat 枚举 (Excel)
名称说明扩展名
xlAddIn18Microsoft Excel 97-2003 外接程序*.xla
xlAddIn818Microsoft Excel 97-2003 外接程序*.xla
xlCSV6CSV*.csv
xlCSVMac22Macintosh CSV*.csv
xlCSVMSDOS24MSDOS CSV*.csv
xlCSVUTF862UTF8 CSV*.csv
xlCSVWindows23Windows CSV*.csv
xlCurrentPlatformText-4158当前平台文本*.txt
xlDBF27Dbase 2 格式*.dbf
xlDBF38Dbase 3 格式*.dbf
xlDBF411Dbase 4 格式*.dbf
xlDIF9数据交换格式*.dif
xlExcel1250Excel 二进制工作簿*.xlsb
xlExcel216Excel 版本 2.0 (1987)*.xls
xlExcel2FarEast27Excel 版本 2.0 中文 (1987)*.xls
xlExcel329Excel 版本 3.0 (1990)*.xls
xlExcel433Excel 版本 4.0 (1992)*.xls
xlExcel4Workbook35Excel 版本 4.0 工作簿格式 (1992)*.xlw
xlExcel539Excel 版本 5.0 (1994)*.xls
xlExcel739Excel 95(版本 7.0)*.xls
xlExcel856Excel 97-2003 工作簿*.xls
xlExcel979543Excel 版本 95 和 97*.xls
xlHtml44HTML 格式.htm;.html
xlIntlAddIn26国际外接程序无文件扩展名
xlIntlMacro25国际宏无文件扩展名
xlOpenDocumentSpreadsheet60OpenDocument 电子表格*.ods
xlOpenXMLAddIn55Open XML 外接程序*.xlam
xlOpenXMLStrictWorkbook61 (&H3D)Strict Open XML 文件*.xlsx
xlOpenXMLTemplate54Open XML 模板*.xltx
xlOpenXMLTemplateMacroEnabled53启用 Open XML 模板宏*.xltm
xlOpenXMLWorkbook51Open XML 工作簿*.xlsx
xlOpenXMLWorkbookMacroEnabled52启用 Open XML 工作簿宏*.xlsm
xlSYLK2符号链接格式*.slk
xlTemplate17Excel 模板格式*.xlt
xlTemplate817模板 8*.xlt
xlTextMac19Macintosh 文本*.txt
xlTextMSDOS21MSDOS 文本*.txt
xlTextPrinter36打印机文本*.prn
xlTextWindows20Windows 文本*.txt
xlUnicodeText42Unicode 文本无文件扩展名;*.txt
xlWebArchive45Web 档案.mh;.mhtml
xlWJ2WD114日语 1-2-3*.wj2
xlWJ340日语 1-2-3*.wj3
xlWJ3FJ341日语 1-2-3 格式*.wj3
xlWK15Lotus 1-2-3 格式*.wk1
xlWK1ALL31Lotus 1-2-3 格式*.wk1
xlWK1FMT30Lotus 1-2-3 格式*.wk1
xlWK315Lotus 1-2-3 格式*.wk3
xlWK3FM332Lotus 1-2-3 格式*.wk3
xlWK438Lotus 1-2-3 格式*.wk4
xlWKS4Lotus 1-2-3 格式*.wks
xlWorkbookDefault51默认工作簿*.xlsx
xlWorkbookNormal-4143常规工作簿*.xls
xlWorks2FarEast28Microsoft Works 2.0 两端对齐格式*.wks
xlWQ134Quattro Pro 格式*.wq1
xlXMLSpreadsheet46XML 电子表格*.xml

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无言灬Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值