Я видел много решений этой проблемы, которые, по-видимому, основаны на компиляции на 64-битной машине (которая у меня есть) и запуске приложения на 32-битной машине (которой я являюсь). компиляция в режиме x86 не помогает. То, что я делаю, это попытка поймать:
При открытии файла Excel я просто делаю попытку поймать провайдера 12.0. Если 12 не удается, я прибегаю к 4.0, и это работает!
Однако проблема продолжается для следующего кода:
public void CreateExcelFile(DataTable dt)
{
string data = null;
int i = 0;
int j = 0;
string sFileName = null;
Microsoft.Office.Interop.Excel.Application xlApp;
Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
for (int k = 0; k < dt.Columns.Count; k++)
{
xlWorkSheet.Cells[1, k+1] = dt.Columns[k].ToString();
}
for (i = 1; i <= dt.Rows.Count - 1; i++)
{
for (j = 0; j <= dt.Columns.Count - 1; j++)
{
data = dt.Rows[i].ItemArray[j].ToString();
xlWorkSheet.Cells[i + 1, j + 1] = data;
}
}
SaveFileDialog oDialog = new SaveFileDialog();
oDialog.FileName = "SubSectorErrors";
oDialog.Filter = "Excel files | *.xls";
if (oDialog.ShowDialog() == DialogResult.OK)
{
sFileName = oDialog.FileName;
}
if (sFileName != null)
{
xlWorkBook.SaveAs(sFileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
//open the file:
System.Diagnostics.Process.Start(sFileName);
//MessageBox.Show("Report saved with file: " + sFileName, "To Excel", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
//oEXLApp.ActiveWorkbook.Close(false, Missing.Value, Missing.Value);
MessageBox.Show("Cannot export to excel...", "Can't export", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);
}
}
Я не уверен, что здесь можно сделать, поэтому я не получаю ошибку провайдера 12.0, так как я даже не указываю провайдера !!!