J'essayais d'accéder au fichier MS Excel 2016 en utilisant C #, mais la chaîne de connexion ne fonctionne que jusqu'en 2013, MS Excel.
Ma chaîne de connexion actuelle:
Fournisseur = Microsoft.ACE.OLEDB.12.0; Source de données = c:\monFichier\monExcel2007file.xlsx; Propriétés étendues = "Excel 12.0 Xml; HDR = YES";
Existe-t-il une chaîne de connexion oledb modifiée pour MS Excel 2016?
Cela m'est arrivé après la mise à niveau d'une installation locale d'Office 13 vers Office 16 via le programme Office 365. Je recevais cette exception: le fournisseur 'Microsoft.ACE.OLEDB.12.0' n'est pas enregistré sur la machine locale.
Je n'ai pas été en mesure de trouver un moyen d'installer le pilote via le processus d'installation d'Office 365.
Je devais installer https://www.Microsoft.com/en-us/download/details.aspx?id=13255 - la version x64 ne résolvait pas le problème, devait utiliser la version 32 bits.
Ma chaîne de connexion dans App.config
<add key="Excel07ConnectionString" value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES'"/>
Code utilisant:
var excelConnectionString = ConfigurationSettings.GetExcelConnection(fileLocation);
var dataTable = new DataTable();
using (var excelConnection = new OleDbConnection(excelConnectionString))
{
excelConnection.Open();
var dataAdapter = new OleDbDataAdapter("SELECT * FROM [Users$]", excelConnection);
dataAdapter.Fill(dataTable);
excelConnection.Close();
}
Console.WriteLine("OpenExcelFile: File successfully opened:" + fileLocation);
return dataTable;
Cela a fonctionné pour moi:
private string ExcelConnection(string fileName)
{
return @"Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data Source=" + fileName + ";" +
@"Extended Properties=" + Convert.ToChar(34).ToString() +
@"Excel 8.0" + Convert.ToChar(34).ToString() + ";";
}