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

Har*_*ris 7 excel vba spss excel-vba

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

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

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

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

Ale*_* K. 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
Run Code Online (Sandbox Code Playgroud)