Je nachdem, ob die App (32/64 Bit) die Verbindung verwendet, könnten Sie einfach installieren
Zusammenfassung:
-
alle Büros von 2007-2016 enthalten den Anbieter "Microsoft.ACE.Oledb.12.0"
-
je nach Architektur Ihrer Anwendung wählen Sie den entsprechenden Laufzeit-Engine (32/64)6
-
Überprüfen Sie Ihre Anbieter mit dem PowerShell-Befehl auf beiden 32- und 64-Bit-Systemen:
(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 finden sich unter http://live.sysinternals.com/strings.exe
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
Das 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
die "Microsoft.ACE.OLEDB.15.0" enthält
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
hat die Version "Microsoft.ACE.OLEDB.16.0"
13 Stimmen
Nur ein Randbemerkung: Die Verwendung von OLEDB zum Lesen einer Excel-Datei ist eine veraltete Technologie, sehr langsam und wie Sie festgestellt haben, erfordert die manuelle Installation von zusätzlichen Paketen 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.
7 Stimmen
Wenn Sie in Sql Server importieren, können Sie diese Abfrage von ssms ausführen:
execute master.dbo.xp_enum_oledb_providers
Es wird Ihnen sagen, welche Anbieter es denkt, dass Sie haben. Es hat mir gesagt, dass ich sowohl Microsoft.ACE.OLEDB.16.0 als auch Microsoft.ACE.OLEDB.12.0 hatte, aber als ich versuchte, Daten zu importieren, bekam ich die gleiche "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 jeweils). Es macht Sinn, an diesem Punkt die Verluste zu begrenzen und auf die Microsoft-Software zu verzichten.1 Stimmen
Sehen Sie 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 auf dem Server, nicht auf Ihrer lokalen Maschine ist.6 Stimmen
Hier ist einer, der funktionieren sollte; - Es ist: Nicht wirklich dokumentiert, aber ich habe einen Weg gefunden, um sowohl die 32-Bit- als auch die 64-Bit-Versionen zu installieren. Fügen Sie einfach das Kommandozeilenargument "/passive" zum Befehl hinzu: "C:\Verzeichnispfad\AccessDatabaseEngine_x64.exe" /passive