是否可以自动修复损坏的Excel工作簿?

时间:2014-06-04 14:35:12

标签: excel vba excel-vba spss

我正在使用SPSS 15创建多个Excel报表,然后使用Excel宏进行合并。不幸的是,特定的SPSS版本会生成.xls文件,这些文件对于Excel 2007及以上版本来说都不易读取。 Excel 2003可以很好地吞噬这些文件,但是较新的Excel版本会显示两条错误消息。首先是" Excel在filename.xls中找到了不可读的内容。是否要恢复此工作簿的内容?"。点击“是”后面跟着“#34;文件错误:数据可能已丢失"”。不幸的是,这些错误消息导致我的宏退出第一个文件,错误代码为1004.这是我用来打开我的Excel文件的代码:

If Len(Dir(ThisWorkbook.Path + "\filename.xls")) <> 0 Then 
    Workbooks.Open Filename:=ThisWorkbook.Path + "\filename.xls"
End If

我向IBM(SPSS供应商)查询过,他们告诉我这个特殊问题已在SPSS 16中得到修复,但由于商业原因,升级不在卡上。现在有一个手动解决方法,涉及打开文件并再次保存,但有几十个文件,显然没有乐趣。因此,我正在寻找一种方法来自动修复宏中的那些损坏的工作簿。

更多信息:我们正在使用Excel 2010,Excel 2003不可用。此处提供了一个示例文件:https://onedrive.live.com/?cid=52106BC267261CBF&id=52106BC267261CBF!292

1 个答案:

答案 0 :(得分:7)

该文件看起来相当混乱,BIFF验证工具报告错误的BOF标题,因此其令人印象深刻的Excel 2003可以打开它。

我可以通过Jet OLEDB提供程序将您的文件作为ISAM数据库读取,因此您可以选择以这种方式读取文件(或使用此方法生成CSV文件进行处理)

Dim cn As Object, rs As Object
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=MICROSOFT.JET.OLEDB.4.0;Data Source=C:\temp\DebugFile.xls;Extended Properties=""Excel 8.0;HDR=Yes;"""

Set rs = cn.Execute("SELECT * FROM [DebugFile$]")

Do While Not rs.EOF
    Debug.Print rs.Fields(0).Value
    rs.MoveNext
Loop
相关问题