The error appeared when exporting data in a datagrid view to an Excel sheet:
error (Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD)))
on this line:
Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
How do I fix this problem?
My full code:
private void button1_Click(object sender, EventArgs e)
{
    System.Globalization.CultureInfo oldCI = System.Threading.Thread.CurrentThread.CurrentCulture;
    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
    // Creating Excel Application
    Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
    System.Threading.Thread.CurrentThread.CurrentCulture = oldCI;
    // Creating new WorkBook within Excel application
    Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
    // Creating new Excel sheet in workbook
    Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
    // See the Excel sheet behind the program
    //Funny
    app.Visible = true;
    // Get the reference of first sheet. By default its name is Sheet1.
    // Store its reference to worksheet
    try
    {
        // Fixed:(Microsoft.Office.Interop.Excel.Worksheet)
        worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets["Sheet1"];
        worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.ActiveSheet;
        // Changing the name of active sheet
        worksheet.Name = "Exported from Ketoan";
        // Storing header part in Excel
        for (int i = 1; i < DGData.Columns.Count + 1; i++)
        {
            worksheet.Cells[1, i] = DGData.Columns[i - 1].HeaderText;
        }
        // Storing each row and column value to Excel sheet
        for (int i = 0; i < DGData.Rows.Count - 1; i++)
        {
            for (int j = 0; j < DGData.Columns.Count; j++)
            {
                worksheet.Cells[i + 2, j + 1] = DGData.Rows[i].Cells[j].Value.ToString();
            }
        }
        // Save the application
        string fileName = String.Empty;
        SaveFileDialog saveFileExcel = new SaveFileDialog();
        saveFileExcel.Filter = "Excel files |*.xls|All files (*.*)|*.*";
        saveFileExcel.FilterIndex = 2;
        saveFileExcel.RestoreDirectory = true;
        if (saveFileExcel.ShowDialog() == DialogResult.OK)
        {
            fileName = saveFileExcel.FileName;
            //Fixed-old code: 11 para->add 1:Type.Missing
            workbook.SaveAs(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        }
        else
            return;
        // Exit from the application
        //app.Quit();
    }
    catch (System.Exception ex)
    {
    }
    finally
    {
        app.Quit();
        workbook = null;
        app = null;
    }
}
Consider:
System.Threading.Thread.CurrentThread.CurrentCulture = oldCI;
Delete this line or move to under the line that closes the Excel application.
It works for me.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With