поставщик c# для excel не зарегистрирован

#c# #excel #database #accessibility

Вопрос:

Для некоторых проектов мне нужны опции экспорта и импорта из/в Excel.

Для этого я использую этот код:

         private void myButton12_Click(object sender, EventArgs e)
        {
            string path = string.Empty;
            string ext = string.Empty;
            OpenFileDialog file = new OpenFileDialog();

            if (file.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                path = file.FileName;
                ext = System.IO.Path.GetExtension(path);

                if(ext == ".xls" || ext == ".xlsx")
                {
                    Console.WriteLine("ok");
                    DataTable dt = new DataTable();
                    dt = ReadExcel(path, ext);

                    dataGridView13.DataSource = dt;
                }
            }
        }

        public DataTable ReadExcel(string fileName, string fileExt)
        {
            string conn = string.Empty;
            DataTable dtexcel = new DataTable();
            if (fileExt.CompareTo(".xls") == 0)
                conn = @"provider=Microsoft.Jet.OLEDB.4.0;Data Source="   fileName   ";Extended Properties='Excel 8.0;HRD=Yes;IMEX=1';"; //for below excel 2007  
            else
                conn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="   fileName   ";Extended Properties='Excel 16.0;HDR=NO';"; //for above excel 2007  
            using (OleDbConnection con = new OleDbConnection(conn))
            {
                try
                {
                    OleDbDataAdapter oleAdpt = new OleDbDataAdapter("select * from [Sheet1$]", con); //here we read data from sheet1  
                    oleAdpt.Fill(dtexcel); //fill excel data into dataTable  
                }
                catch(Exception e)
                {
                    Console.WriteLine(e);
                }
            }
            return dtexcel;
        }
 

Проблема в том, что я получаю это исключение:

 The provider 'Microsoft.ACE.OLEDB.12.0' is not registered on the local computer.
 

Посмотрев в Интернете, мне кажется, что это связано с необходимостью конфигурации x86, которую я пробовал… Я также пытался переключиться на некоторые другие, но ни один из них не сработал,

Я действительно не могу найти никакого решения своей проблемы,

Есть идеи, в чем может быть проблема?

Спасибо

Ответ №1:

Если вы запускаете свое приложение в целевом процессоре X64, вам нужен «AccessDatabaseEngine_X64.exe» , если вы запускаете свое приложение в X86, вам нужно «AccessDatabaseEngine.exe» со страницы ниже :

https://www.microsoft.com/en-us/download/details.aspx?id=13255