Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用c#.net可以使用控制台应用程序打开excel工作簿,但不能使用windows窗体应用程序_C#_Excel_Visual Studio 2019 - Fatal编程技术网

使用c#.net可以使用控制台应用程序打开excel工作簿,但不能使用windows窗体应用程序

使用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;

我已经能够使用Visual Studio 2019中的控制台应用程序打开excel工作簿,代码如下:

 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,它运行正常。