Home » excel » c# – Could not load type Microsoft.Office.Interop.Excel._Application

c# – Could not load type Microsoft.Office.Interop.Excel._Application

Posted by: admin April 23, 2020 Leave a comment

Questions:

I’m getting a error when I try to debug a code that reads Excel files. I’m wondering if the reference to ‘Microsoft.Office.Interop.Excel._Application’ is wrong, I get the following error.

isn’t the Microsoft.Office.Interop.Excel version suppose to be 12? and not loaded from my project assembly?

Could not load type
‘Microsoft.Office.Interop.Excel._Application’
from assembly ‘Dialog,
Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null’. The type is
marked as eligible for type
equivalence, but the containing
assembly is not loaded as fully
trusted.

When I try to debug the code I get the exception before I can step into the function.

DataTable data = ExcelImport.GetDataFromFile(file);

My function

public static DataSet GetDataFromFile(string fileName)
    {
        Application oXL;
        Workbook oWB;
        Worksheet oSheet;
        Range oRng;

        // Needed to fix culture problem with excel files.
        CultureInfo cult = System.Threading.Thread.CurrentThread.CurrentCulture;
        System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
        try
        {
            //  creat a Application object
            oXL = new Application();
            //   get   WorkBook  object
            oWB = oXL.Workbooks.Open(fileName, Missing.Value, Missing.Value,
                    Missing.Value, Missing.Value, Missing.Value,
                    Missing.Value, Missing.Value, Missing.Value,
                    Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                    Missing.Value, Missing.Value);

            //   get   WorkSheet object
            oSheet = (Worksheet)oWB.Sheets[1];
            System.Data.DataTable dt = new System.Data.DataTable("dtExcel");
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);

            //StringBuilder sb = new StringBuilder();
            int jValue = oSheet.UsedRange.Cells.Columns.Count;
            int iValue = oSheet.UsedRange.Cells.Rows.Count;
            //  get data columns
            for (int j = 1; j <= jValue; j++)
            {
                dt.Columns.Add("column" + j, Type.GetType("System.String"));
            }

            //  get data in cell
            for (int i = 1; i <= iValue; i++)
            {
                var test = (Range)oSheet.Cells[i, 1];

                if (!string.IsNullOrEmpty(test.Text))
                {
                    DataRow dr = ds.Tables["dtExcel"].NewRow();
                    for (int j = 1; j <= jValue; j++)
                    {
                        oRng = (Range)oSheet.Cells[i, j];
                        string strValue = oRng.Text.ToString();
                        dr["column" + j] = strValue;
                    }
                    ds.Tables["dtExcel"].Rows.Add(dr);
                }
            }
            oXL.Workbooks.Close();
            System.Threading.Thread.CurrentThread.CurrentCulture = cult;
            return ds;
        }
        catch (Exception ex)
        {
            throw new Exception("Error reading excel file", ex);
        }
    }
How to&Answers:

vcsjones commend got me on the correct track. after turning off Embedding Interop Assemblies I needed to edit the web.config to trust Excel

<system.web>
    <trust level="Full" originUrl="" />

Answer:

It sounds like you have a bad reference, not bad code. Has this code ever worked? Have you tried removing the reference to the Excel Interop and re-adding it again? Since it doesn’t even get into your method, my assumption is that when the system tries to load the reference dll, it crashes.