在2007年打开Excel时出错

时间:2011-04-28 08:48:30

标签: c# excel excel-vba excel-2007 export-to-excel vba

我有一个C#WPF应用程序,它使用Excel互操作库来生成和打开Excel工作表。到目前为止,在Office 2003的XP机器上工作正常。但我最近将其迁移到运行Excel 2007的Windows 2007机器上。现在我的excel出口不再起作用了。它会抛出如下错误:

System.Runtime.InteropServices.COMException (0x800A03EC): The document is corrupt and cannot be opened. To try and repair it, use the Open and Repair command in the Open dialog box and select Extract Data when prompted.
   at Microsoft.Office.Interop.Excel.Workbooks.Open(String Filename, Object UpdateLinks, Object ReadOnly, Object Format, Object Password, Object WriteResPassword, Object IgnoreReadOnlyRecommended, Object Origin, Object Delimiter, Object Editable, Object Notify, Object Converter, Object AddToMru, Object Local, Object CorruptLoad)

我使用下面的代码打开我的Excel文件..

 private void OpenSavedData(string fileName)
        {

            var excelApp = new Application();
            excelApp.Workbooks.Open(
                fileName,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            excelApp.Visible = true;

            Marshal.ReleaseComObject(excelApp);
        }

在Office 2003和XP中工作没有问题,但由于某种原因在Win7和Linux上失败了。 Office 2007.请告诉我任何可行的解决方法/解决方案吗?

谢谢, -Mike

2 个答案:

答案 0 :(得分:4)

我认为你可能正在使用excel 2003的早期绑定,这就是为什么它不适用于excel 2007.基本上你需要做的是重新编译你的应用程序,同时引用excel 2007的正确互操作库(Microsoft.Interop.Office .Excel版本1.6,可以在安装了Office 2007的计算机上的“添加引用” - >“COM”中找到。 您可以谷歌早期和晚期绑定,以获得有关它的更多信息。这是一个帮助您入门的链接:http://peltiertech.com/Excel/EarlyLateBinding.html

答案 1 :(得分:1)

当我升级到Windows 7时,我自己也看到了同样的问题。也许这是我在64位环境中运行的WPF代码的突然冲击......我不确定!

我的解决方案有点激烈。我完全重写我的WPF应用程序的“导出到Excel”代码,使用OpenXML库,而不是使用VSTO库(它们总是给我的.Net应用程序增加了一定程度的不稳定性)。 p>

我已经记录了我所做的事情,所有源代码和演示都在这里提供: http://www.mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm

在我的库中链接后,导出DataSet或DataTable就像添加一行代码一样简单。

CreateExcelFile.CreateExcelDocument(myDataSet, "C:\\MikesExcelFile.xlsx");

它没有那么简单!

希望这有帮助。

麦克