【问题标题】:Not able to create object of Excel.Application无法创建 Excel.Application 的对象
【发布时间】:2023-03-16 07:38:02
【问题描述】:

在我的 C# 应用程序中,我将数据导入和导出到 Excel。我有办公室 2013。

我正在使用以下代码:

using Excel = Microsoft.Office.Interop.Excel;
Excel.Application _excelApp = null;
_excelApp = new Excel.Application();

此代码运行良好,但最近我安装了 Microsoft project Professional 2013,它还更新了 Office。在此之后,我在 _excelApp = new Excel.Application(); 中遇到错误;

错误是:

无法将“System.__ComObject”类型的 COM 对象转换为接口 键入“Microsoft.Office.Interop.Excel.Application”。这个操作 失败,因为对 COM 组件的 QueryInterface 调用 由于 IID 为“{000208D5-0000-0000-C000-000000000046}”的接口失败 出现以下错误:加载类型库/DLL 时出错。 (例外 来自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY)。

【问题讨论】:

  • 可能您需要删除现有的 Office 互操作参考和最新版本参考。

标签: c# .net excel interop


【解决方案1】:

@Deepak gupta,我无法发表评论,所以我在这里发布。也许索纳是对的。我曾经遇到过同样的问题,所以我决定使用旧方法打开 Excel 文件(使用 oledb 命令)。

你需要什么?阅读 Excel 还是保存新的?

例如,在我的情况下,我需要阅读 Excel(即 .xls 或 .xlsx):

               //Check whether file extension is xls or xslx
            if (fileExtension == ".xls")
                connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
            else if (fileExtension == ".xlsx")
                connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";

            //Create OleDB Connection and OleDb Command            
            OleDbCommand cmd = new OleDbCommand();
            OleDbConnection con = new OleDbConnection(connectionString);

            cmd.CommandType = System.Data.CommandType.Text;
            cmd.Connection = con;

            OleDbDataAdapter dAdapter = new OleDbDataAdapter(cmd);
            con.Open();
            DataTable dtExcelSheetName = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            string getExcelSheetName = dtExcelSheetName.Rows[0]["Table_Name"].ToString();

            //send query, send query, fill adapter:
            cmd.CommandText = "SELECT * FROM [" + getExcelSheetName + "A1:GR255] WHERE [0] IS NOT NULL ";
            dAdapter.SelectCommand = cmd;
            dAdapter.Fill(dtExcelRecords);
            con.Close();

或者,也许您可​​以尝试使用这篇文章 Create Excel (.XLS and .XLSX) file from C# 中描述的这个库 ExcelLibrary。

【讨论】:

    【解决方案2】:

    这是一种创建对象的方法,从而将工作表从一个 Excel 复制到另一个 Excel

    将 CopyFrom 作为对象变暗 将 CopyTo 变暗为对象 将 CopyThis 作为对象变暗 将 xl 调暗为对象

        xl = CreateObject("Excel.Application")
        xl.Visible = False
        CopyFrom = xl.Workbooks.Open("E:\EXCEL\From.xls")
        CopyTo = xl.Workbooks.Open("E:\EXCEL\To.xls")
        For i = 0 To 1
            ''To use a password: Workbooks.Open Filename:="Filename", Password:="Password"
            If i = 0 Then
                CopyThis = CopyFrom.Sheets(1)
                CopyThis.Copy(After:=CopyTo.Sheets(CopyTo.Sheets.Count))
                CopyTo.Sheets(3).Name = "Sheet3"
            Else
                CopyThis = CopyFrom.Sheets(2)
                CopyThis.Copy(After:=CopyTo.Sheets(CopyTo.Sheets.Count))
                CopyTo.Sheets(4).Name = "Sheet4"
            End If
        Next
        CopyTo.Sheets(1).Activate()
        CopyTo.Save()
        'CopyTo.SaveAs("E:\EXCEL\Check.xls")
        xl.Quit()
    

    【讨论】:

      【解决方案3】:

      问题已解决。我在安装Microsoft project Professional 2013的时候,也更新了microsoft office,但是office的更新不成功。

      当我修理办公室时,它开始正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-19
        • 2015-03-19
        • 2013-10-22
        • 2017-10-01
        • 2013-10-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多