title: 80040154 Class not registered (Exception from HRESULT
body: <p>EDIT: This program is trying to read in an excel file using C# then adding the data to a table in sql developer.</p>
  
  <p>I have ran into an error that I cant seem to figure out. When I try and load excel data into a Message Box I get this:</p>
  
  <pre><code>Retrieving the COM class factory for component with CLSID {00020819-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
  </code></pre>
  
  <p>This error appears on:</p>
  
  <pre><code>Microsoft.Office.Interop.Excel.Workbook workbook = new Microsoft.Office.Interop.Excel.Workbook();
  </code></pre>
  
  <p>I have done research on this specific error and have tried everything I have found. I have tried changing the <code>Platform Target</code> in the properties to <code>x86</code> like some people said along with unchecking <code>Prefer 32-bit</code> and leaving <code>Platform Target</code> at <code>Any CPU</code>. I figured I might be missing an important reference but noticed I already had the .NET<code>Microsoft.Office.Interop.Excel</code> and when I tried adding the COM equivalent it did not help. For reference I am using a 32-bit Windows OS.</p>
  
  <p>Any help on why this error is occurring would be greatly appreciated. Thanks.</p>
  
  <p>Here is the full code in the class:</p>
  
  <pre><code>namespace ReadExcel
  {
      public partial class Form1 : Form
      {
      public Microsoft.Office.Interop.Excel._Application excelApp = new Microsoft.Office.Interop.Excel.Application() { DisplayAlerts = false, Visible = false };
  
      public List&lt;Attorney&gt; listOfAttys = Helpers.getAttorneys();
  
      public Form1()
      {
          InitializeComponent();
      }
  
      private void Form1_Load(object sender, EventArgs e)
      {
          setAttyList();
      }
  
  
      private void setAttyList()
      {
          foreach (var item in listOfAttys.Select(x =&gt; x.Caption))
              cmbAtty.Items.Add(item);
  
  
      }
  
  
      private void btnRun_Click(object sender, EventArgs e)
      {
          Microsoft.Office.Interop.Excel.Workbook workbook = new Microsoft.Office.Interop.Excel.Workbook();
          //Microsoft.Office.Interop.Excel.Style style = new Microsoft.Office.Interop.Excel.Style();
          //Microsoft.Office.Interop.Excel.Worksheet worksheet = new Microsoft.Office.Interop.Excel.Worksheet();
  
          try
          {
  
              workbook = excelApp.Workbooks.Open(txtbxFilename.Text);
              Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1);
              Microsoft.Office.Interop.Excel.Range xlRange = worksheet.UsedRange;
  
              int rowCount = xlRange.Rows.Count;
              int colCount = xlRange.Columns.Count;
  
  
              for(int i=1; i &lt;= rowCount; i++)
              {
                for(int j=1; j &lt;= colCount; j++)
                {
                  MessageBox.Show(xlRange.Cells[i,j].Value2.ToString());
                }
              }
  
  
              if (validateHeader(worksheet))
              {
  
  
  
  
              }
          }
          catch (Exception ex)
          { 
          }
  
  
          excelApp.Quit();
      }
  
      private void btnLoad_Click(object sender, EventArgs e)
      {
          txtbxFilename.Text = null;
  
          System.IO.Stream myStream = null;
          OpenFileDialog openFileDialog1 = new OpenFileDialog();
  
          openFileDialog1.InitialDirectory = "C:\\";
          openFileDialog1.Filter = "Excel files (*.xlsx)|*.xlsx";
          openFileDialog1.FilterIndex = 2;
          openFileDialog1.RestoreDirectory = true;
  
          if (openFileDialog1.ShowDialog() == DialogResult.OK)
          {
              try
              {
                  if ((myStream = openFileDialog1.OpenFile()) != null)
                  {
                      txtbxFilename.Text = openFileDialog1.FileName;
                      myStream.Close();
                      myStream.Dispose();
                  }
              }
              catch (Exception ex)
              {
                  MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
              }
          }
      }
  
  
      private bool validateHeader(Microsoft.Office.Interop.Excel.Worksheet Worksheet)
      {
          if (Worksheet == null)
              return false;
  
          bool isValid = false;
  
          //get header row
          //check all cell values
  
          return isValid;
      }
  
      //private int getWorkSheetLength(int startPoint, char column, Microsoft.Office.Interop.Excel.Worksheet sheet)
      //{
      //    int i = startPoint;
  
      //    while (sheet.Range(column + i).Text.ToString().Replace("/r", String.Empty).Replace("/n", String.Empty).Replace(" ", String.Empty) != String.Empty)
      //        i++;
  
      //    i--;
      //    return i;
      //}
  
  
  }
  
  public class Attorney
  {
      public string AttorneyID { get; set; }
      public int OrganizationID { get; set; }
      public string AttorneyName { get; set; }
      public string Caption { get; set; }
  }
  
  public class LegalTransactionRec
  {
      public string AccountNumber { get; set; }
      public decimal CostAmount { get; set; }
      public string SSN { get; set; }
      public int BatchID { get; set; }
      public Attorney Attorney { get; set; }
      public DateTime TransactionDate { get; set; }
      public string Description { get; set; }
      public int TransactionCode { get; set; }
  }
  
  
  public class ReviewOutput
  {
  }
  
  public class ApprovedOutput
  { 
  }
  
  }
  </code></pre>