Je nachdem, welche Anwendung (32/64-Bit) die Verbindung verwendet, können Sie einfach installieren
Zusammenfassung:
-
alle Versionen von 2007 bis 2016 enthalten den Anbieter "Microsoft.ACE.Oledb.12.0"
-
je nach Architektur Ihrer Anwendung wählen Sie den entsprechenden Laufzeitmotor aus (32/64)6
-
Überprüfen Sie Ihre Anbieter mit dem Powershell-Befehl aus beiden 32- und 64-Bit-Shell:
(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
-
und Sie werden sehen, welchen Anbieter Ihr System verwenden kann
die lange Geschichte: Die Zeichenfolgen können mit http://live.sysinternals.com/strings.exe gefunden werden
z.B. auf einem 64-Bit-System mit installierten 32-Bit-Treibern
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE14\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\MSO.DLL" | findstr "ACE.O"
auch im kommenden Office 2016
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\MSO.DLL
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSO.DLL
finden Sie die Zeichenfolgen
-
Microsoft.ACE.OLEDB
-
Microsoft.ACE.Oledb.12.0
Office 2013 kommt auch mit csi.dll
c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\Csi.dll
c:\Program Files\Common Files\Microsoft Shared\OFFICE15\Csi.dll
das enthält "Microsoft.ACE.OLEDB.15.0"
und Office 2016
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\Csi.dll
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\Csi.dll
das hat die Version "Microsoft.ACE.OLEDB.16.0"
13 Stimmen
Nur ein seitlicher Kommentar: Die Verwendung von OLEDB zum Lesen einer Excel-Datei ist veraltete Technologie, sehr langsam und erfordert, wie Sie festgestellt haben, die manuelle Installation zusätzlicher Pakete auf Ihrem Zielrechner. (Zugegeben, die Frage wurde 2011 gestellt.) Verwenden Sie stattdessen ClosedXml (verfügbar auf NuGet), das sofort einsatzbereit ist.
7 Stimmen
@ShaulBehr Es wäre schön gewesen, aber ClosedXml funktioniert nur für .xlsx-Dateien, nicht für .xls-Dateien.
7 Stimmen
Wenn Sie in Sql Server importieren, können Sie diese Abfrage von ssms ausführen: Es wird Ihnen sagen, welche Provider es denkt, dass Sie haben. Es hat mir gesagt, dass ich sowohl Microsoft.ACE.OLEDB.16.0 als auch Microsoft.ACE.OLEDB.12.0 habe, aber als ich versuchte, Daten zu importieren, bekam ich dasselbe 'nicht auf Ihrem lokalen Computer registriert' wie der OP, sowohl für Excel 16 als auch für Excel 2007 Dateiformate (oledb.16.0 und oledb.12.0). Es macht Sinn, an diesem Punkt auf die Microsoft-Software zu verzichten.
1 Stimmen
Siehe auch diese Antwort stackoverflow.com/a/14401857/21579 für den Unterschied zwischen Microsoft.Jet.OleDb und Microsoft.Ace.OleDb.
4 Stimmen
@user1040323,
execute master.dbo.xp_enum_oledb_providers
sagt Ihnen, was sich auf dem Server und nicht auf Ihrem lokalen Computer befindet.6 Stimmen
Hier sollte es funktionieren; - Es ist: Nicht wirklich dokumentiert, aber ich habe einen Weg gefunden, beide 32-Bit- und 64-Bit-Versionen zu installieren. Fügen Sie einfach das Befehlszeilenargument "/passive" zum Befehl hinzu: "C:\Verzeichnispfad\AccessDatabaseEngine_x64.exe" /passive