Запуск приложения на клиентском компьютере -> Oldeb Jet 12.0 не зарегистрирован - PullRequest
0 голосов
/ 15 февраля 2012

Я видел много решений этой проблемы, которые, по-видимому, основаны на компиляции на 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, так как я даже не указываю провайдера !!!

...