jxl读取excel文件异常:Unable to recognize OLE stream 的解决方法

转载:https://blog.csdn.net/u011032676/article/details/50989465

问题成因

  1. 使用jxl方式读取,可能只能支持xls格式的文件,对于xlsx格式就不再支持

  2. 如果是从网站导出的excel文件,有的网站比较坑,导出的并不是标准格式的excel,而是将html改扩展名为xls的“伪”excel文件。当用excel打开这类文件时,会弹窗提示其“扩展名和文件类型不匹配”是否还要打开。 而且,使用文本编辑器打开,会发现这个所谓xls文件其实是xml标签的文件。

解决方法

在excel中打开,另存成xls就可以。

但当文件比较多时,可以使用excel vba批量另存。

第一种情况直接用vba批量另存即可,但第二种略有麻烦,因为会有报错弹窗,vba运行时会报错。

下面以第二种情况为例详细说明解决步骤。

首先,需要禁止excel的报错弹窗,否则使用vba批量另存时会出错。方法如下:

1、开始 -> 运行 -> 输入regedit -> 确定
2、找到注册表子项

HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Security 3、在右侧空白处点击鼠标右键,选择“新建 -> DWORD值(D)”,输入"ExtensionHardening"点击确定。 4、用鼠标右键点击ExtensionHardening,然后单击“修改(M)”,在数值数据中填写"0"即可确定。 5、关闭注册表编辑器,再次打开xls文件看看是不是提示是不是不见了? 【拓展:ExtensionHardening设置的值的数据设置含义】 0:不检查文件扩展名和文件类型并绕过该函数的警告消息。 1:检查文件扩展名和文件类型。如果它们不匹配会显示警告消息。 2:检查文件扩展名和文件类型。如果它们不匹配不要打开该文件

 

然后我们就可以使用vba批量另存了。

调出vba窗口的方法:新建一个excel文件,按ALT+F11, 接着按住ALT依次按i,m键

vba代码如下:

Private Sub Workbook_Open()
Application.ScreenUpdating = False
Dim fp$, fn$
fp = "D:\test" & "\" fn = Dir(fp & "*.xls") Do While fn <> "" If fn <> ThisWorkbook.Name Then Workbooks.Open fp & fn Application.DisplayAlerts = False ActiveWorkbook.SaveAs fp & fn & "-new.xls", xlExcel8 Application.DisplayAlerts = True ActiveWorkbook.Close True End If fn = Dir Loop Application.ScreenUpdating = False MsgBox "本文件夹内的所有Excel文件打开另存完毕!" End Sub

使用时根据自身情况,修改文件夹路径。另外,在另存为的时候,这里给所有文件名加上了-new的后缀,可以根据自己需要修改。


通过以上方法另存之后,“伪excel”文件便成为真正的excel的xls格式文件了,此时在使用java jxl来操作excel便不会有问题了。

转载于:https://www.cnblogs.com/walixiansheng/p/9497535.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值