以前曾提出过类似的问题,但我想尝试根据自己的情况进行改进。
我正在下载旧文件类型(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"];
}
这是网址:
答案 0 :(得分:-2)
我假设带有var excel = new Application();
的行是引发异常的行。根据我的经验,在尝试遵循互联网上的其他建议时,我偶然发现的解决方案是为interop dll明确定义不使用32位访问模式。
要在Visual Studio中执行此操作,我必须在项目配置的build部分中勾选然后取消选中“ Prefer 32-bit”框,该框在.csproj文件中添加了<Prefer32Bit>false</Prefer32Bit>
。