无效的Cast异常,无法将COM对象转换为Excel

时间:2015-03-24 14:22:57

标签: c# excel

以前曾提出过类似的问题,但我想尝试根据自己的情况进行改进。

我正在下载旧文件类型(Excel 2003(.xls)),我需要从文件中删除数据。问题是我得到了:

 {"Unable to cast COM object of type 'Microsoft.Office.Interop.Excel.ApplicationClass' 
to interface type 'Microsoft.Office.Interop.Excel._Application'. This operation failed
because the QueryInterface call on the COM component for the interface 

我目前正试图在将应用程序发送到生产环境之前在我的机器上运行,这将/在服务器上具有优势。

我尝试过重新安装办公室,但这没有用。我认为问题更多的是我在我的盒子上有办公室2013而且我试图通过它运行十年之久的文件类型。

我试着用这个:

 public void Convert(String file)
    {
        var app = new Application();
        var wb = app.Workbooks.Open(file);
        wb.SaveAs(file + "x", XlFileFormat.xlOpenXMLWorkbook);
        wb.Close();
        app.Quit();
    }

这仍然会导致同样的问题,因为文件无法打开。

有什么建议吗?

更新

以下是我正在使用的完整方法

public Worksheet GetExcelBy(string url)
    {
        var fileName = @"C:\temp\tempfile.xls";
        var webClient = new WebClient();
        webClient.DownloadFile(url, fileName);
        Convert(fileName);
        var excel = new Application();
        var workbook = excel.Workbooks.Open(fileName);
        return (Worksheet)workbook.Worksheets["Data 6"];
    }

这是网址:

http://tonto.eia.doe.gov/dnav/pet/xls/pet_pri_spt_s1_d.xls

1 个答案:

答案 0 :(得分:-2)

我假设带有var excel = new Application();的行是引发异常的行。根据我的经验,在尝试遵循互联网上的其他建议时,我偶然发现的解决方案是为interop dll明确定义不使用32位访问模式。

要在Visual Studio中执行此操作,我必须在项目配置的build部分中勾选然后取消选中“ Prefer 32-bit”框,该框在.csproj文件中添加了<Prefer32Bit>false</Prefer32Bit>