#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