前言
最近公司安排提取机器分析出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进行解析了,接下来就不一一赘述了。
名称 | 值 | 说明 | 扩展名 |
---|---|---|---|
xlAddIn | 18 | Microsoft Excel 97-2003 外接程序 | *.xla |
xlAddIn8 | 18 | Microsoft Excel 97-2003 外接程序 | *.xla |
xlCSV | 6 | CSV | *.csv |
xlCSVMac | 22 | Macintosh CSV | *.csv |
xlCSVMSDOS | 24 | MSDOS CSV | *.csv |
xlCSVUTF8 | 62 | UTF8 CSV | *.csv |
xlCSVWindows | 23 | Windows CSV | *.csv |
xlCurrentPlatformText | -4158 | 当前平台文本 | *.txt |
xlDBF2 | 7 | Dbase 2 格式 | *.dbf |
xlDBF3 | 8 | Dbase 3 格式 | *.dbf |
xlDBF4 | 11 | Dbase 4 格式 | *.dbf |
xlDIF | 9 | 数据交换格式 | *.dif |
xlExcel12 | 50 | Excel 二进制工作簿 | *.xlsb |
xlExcel2 | 16 | Excel 版本 2.0 (1987) | *.xls |
xlExcel2FarEast | 27 | Excel 版本 2.0 中文 (1987) | *.xls |
xlExcel3 | 29 | Excel 版本 3.0 (1990) | *.xls |
xlExcel4 | 33 | Excel 版本 4.0 (1992) | *.xls |
xlExcel4Workbook | 35 | Excel 版本 4.0 工作簿格式 (1992) | *.xlw |
xlExcel5 | 39 | Excel 版本 5.0 (1994) | *.xls |
xlExcel7 | 39 | Excel 95(版本 7.0) | *.xls |
xlExcel8 | 56 | Excel 97-2003 工作簿 | *.xls |
xlExcel9795 | 43 | Excel 版本 95 和 97 | *.xls |
xlHtml | 44 | HTML 格式 | .htm;.html |
xlIntlAddIn | 26 | 国际外接程序 | 无文件扩展名 |
xlIntlMacro | 25 | 国际宏 | 无文件扩展名 |
xlOpenDocumentSpreadsheet | 60 | OpenDocument 电子表格 | *.ods |
xlOpenXMLAddIn | 55 | Open XML 外接程序 | *.xlam |
xlOpenXMLStrictWorkbook | 61 (&H3D) | Strict Open XML 文件 | *.xlsx |
xlOpenXMLTemplate | 54 | Open XML 模板 | *.xltx |
xlOpenXMLTemplateMacroEnabled | 53 | 启用 Open XML 模板宏 | *.xltm |
xlOpenXMLWorkbook | 51 | Open XML 工作簿 | *.xlsx |
xlOpenXMLWorkbookMacroEnabled | 52 | 启用 Open XML 工作簿宏 | *.xlsm |
xlSYLK | 2 | 符号链接格式 | *.slk |
xlTemplate | 17 | Excel 模板格式 | *.xlt |
xlTemplate8 | 17 | 模板 8 | *.xlt |
xlTextMac | 19 | Macintosh 文本 | *.txt |
xlTextMSDOS | 21 | MSDOS 文本 | *.txt |
xlTextPrinter | 36 | 打印机文本 | *.prn |
xlTextWindows | 20 | Windows 文本 | *.txt |
xlUnicodeText | 42 | Unicode 文本 | 无文件扩展名;*.txt |
xlWebArchive | 45 | Web 档案 | .mh;.mhtml |
xlWJ2WD1 | 14 | 日语 1-2-3 | *.wj2 |
xlWJ3 | 40 | 日语 1-2-3 | *.wj3 |
xlWJ3FJ3 | 41 | 日语 1-2-3 格式 | *.wj3 |
xlWK1 | 5 | Lotus 1-2-3 格式 | *.wk1 |
xlWK1ALL | 31 | Lotus 1-2-3 格式 | *.wk1 |
xlWK1FMT | 30 | Lotus 1-2-3 格式 | *.wk1 |
xlWK3 | 15 | Lotus 1-2-3 格式 | *.wk3 |
xlWK3FM3 | 32 | Lotus 1-2-3 格式 | *.wk3 |
xlWK4 | 38 | Lotus 1-2-3 格式 | *.wk4 |
xlWKS | 4 | Lotus 1-2-3 格式 | *.wks |
xlWorkbookDefault | 51 | 默认工作簿 | *.xlsx |
xlWorkbookNormal | -4143 | 常规工作簿 | *.xls |
xlWorks2FarEast | 28 | Microsoft Works 2.0 两端对齐格式 | *.wks |
xlWQ1 | 34 | Quattro Pro 格式 | *.wq1 |
xlXMLSpreadsheet | 46 | XML 电子表格 | *.xml |