使用c#.net可以使用控制台应用程序打开excel工作簿,但不能使用windows窗体应用程序
我已经能够使用Visual Studio 2019中的控制台应用程序打开excel工作簿,代码如下:使用c#.net可以使用控制台应用程序打开excel工作簿,但不能使用windows窗体应用程序,c#,excel,visual-studio-2019,C#,Excel,Visual Studio 2019,我已经能够使用Visual Studio 2019中的控制台应用程序打开excel工作簿,代码如下: using Excel = Microsoft.Office.Interop.Excel; private void OpenXL2() { Excel.Application excelApp = new Excel.Application(); if (excelApp == null) { return;
using Excel = Microsoft.Office.Interop.Excel;
private void OpenXL2()
{
Excel.Application excelApp = new Excel.Application();
if (excelApp == null)
{
return;
}
// open an existing workbook
string workbookPath = @"C:\Illustrator\InvoiceTemplates\invtemplate.xls";
Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath);
excelApp.Visible = true;
// get all sheets in workbook
Excel.Sheets excelSheets = excelWorkbook.Worksheets;
// get some sheet
string currentSheet = "TimeSheet";
Excel.Worksheet excelWorksheet =
(Excel.Worksheet)excelSheets.get_Item(currentSheet);
}
但是,当我尝试在windows窗体应用程序中使用相同的代码时,当到达excelApp.Workbooks.Open(workbookPath)时,会发生以下错误:
System.InvalidCastException:“无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的COM对象强制转换为接口类型为“Microsoft.Office.Interop.Excel.\u应用程序”。此操作失败,因为对IID为“{000208D5-0000-0000-C000-0000000000 46}”的接口的COM组件的QueryInterface调用由于以下错误而失败:类未注册(HRESULT的异常:0x80040154(REGDB_E_CLASSNOTREG))。'
我已添加对“Microsoft Excel 16.0对象库”的引用
谢谢。试试看
Type excel_type = Type.GetTypeFromProgID("Excel.Application");
dynamic excel_obj = Activator.CreateInstance(excel_type);
var workbook = excel_obj.Workbooks.Open(Filename: filePath, ReadOnly: false);
您真的需要在这里使用互操作吗?互操作将打开整个Excel应用程序。如果您只想处理文件中的数据,那么您可以使用另一个库(Nuget软件包提供了几个免费库),这样会更加可靠。请尝试在Office上运行快速修复,谢谢您的回复。我确实修复了excel安装,但问题仍然存在。
console应用程序和winforms应用程序是在Visual Studio 2019中创建的,并且是.NET。
请再次阅读我的问题。作为对mjwills的回复:感谢您为我指出了正确的方向!控制台应用程序的.NET/Core版本为3.1,windows窗体应用程序的.NET/Core版本为4.7.2。我将windows窗体应用程序的.NET版本设置为4.5.1,应用程序运行成功!然后我将它重置为4.7.2,它运行正常。