Laden...

Primary Interop Assemblies OHNE Installation ??

Erstellt von messer0815 vor 13 Jahren Letzter Beitrag vor 3 Jahren 4.220 Views
M
messer0815 Themenstarter:in
2 Beiträge seit 2010
vor 13 Jahren
Primary Interop Assemblies OHNE Installation ??

Hi zusammen!

Ich habe hier folgenden Sachverhalt:

In meiner .NET Anwendung wird mit Hilfe der "Microsoft.Office.Interop.Excel"-Libary ein Excel File erzeugt und in diesem werden Felder geschrieben und zum Teil eingefärbt. Das funktioniert alles soweit.

Hier folgt die Konfiguration des Entwicklungsrechners:

  • das .NET Framework ist installiert
  • im Verzeichnis "C:\WINDOWS\assembly" ist die Libary "Microsoft.Office.Interop.Excel" vorhanden
  • Office 2003 mit .NET Programmierunterstützung ist installiert
  • Betriebssystem ist XP Prof SP3

Auf dem **Zielrechner **ist die "Microsoft.Office.Interop.Excel"-Libary nicht vorhanden, daher kann dort meine Anwendung die Excelaktionen nicht ausführen. Weiterhin ist auf dem Zielrechner nur Office 2000 drauf. Fehlermeldung auf dem Zielrechner ist daher:

Innermost Exception Message .NET

Could not load file or assembly 'Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' or one of its dependencies. The system cannot find the file specified.

Innermost Exception Type

System.IO.FileNotFoundException

Hier nun meine Fragen:- Liege ich richtig in der Annahme, dass man zum Verwenden der Office PIA'S (also auch der Microsoft.Office.Interop.Excel) in meiner .NET Anwendung das .NET Framwork der Version 1.1 und mindestens Office 2003 installiert haben muss?
Die User haben leider nur Office 2000 installiert, und ich habe keine offiziellen PIA's dazu gefunden.

  • Gibt es eine Möglichkeit, auf dem Zielrechner die benötigten PIA Libaries OHNE eine Installation (z.B. wie sie während der Office Installation passiert oder mit der Microsoft Installer EXE) verfügbar zu machen? Ich dachte dabei an eine *.dll die man vielleicht mit in das Release der Anwendung packen könnte.

  • Gibt es eine Möglichkeit, Excel Operationen (Erzeugen des XLS-Files und das Bearbeiten) auch ohne die benutzten PIA's durchzuführen? Vielleicht mit älteren Schnittstellen wie OLE?

Die User auf den Zielrechnern haben leider keine Rechte, Installationen auszuführen, weshalb sie die Libary nicht selbst insallieren können.

Vielen Dank fürs helfen und Grüße, Hendrik

199 Beiträge seit 2006
vor 13 Jahren

Du musst deine Anwendung gegen die kleinste Version kompilieren, die verwendet werden soll. das heißt, du brauchst auf dem Entwicklungsrechner Office 2000, wenn du dieses unterstützen willst.

Excel kannst du außerdem per ODBC ansprechen. Genaueres dazu kann ich jetzt aber ehrlich gesagt nimmer sagen. Das ist schon zu lange her, dass ich das gemacht habe. Aber ich weiß jedenfalls noch, dass es funktioniert.
Ansonsten gibt es noch die Möglichkeit mit Komponenten zu arbeiten. Aspose bietet zum Beispiel einige Komponenten dafür an (www.aspose.com)

M
messer0815 Themenstarter:in
2 Beiträge seit 2010
vor 13 Jahren
61 Beiträge seit 2009
vor 13 Jahren

Funktioniert die Excel 2000 Variante, würde mich sehr interessieren.

Die COM-Interop-Schnittstelle ist ja lediglich nur eine Remotesteuerung und es kann ja nur gesteuert werden was da ist. Demnach ist der Link von dir zur MSDN ein Mittel der Steuerung zu sagen, was sie steuern soll.

Aber alternativ könnte es auch über OLE gehen. Bei Excel 2003 Dateien würde das so aussehen:

Hallo w1z4rd2003,

hast du mal den Zugriff über OleDb ausprobiert?
Hier mal ein Snippet:

  
string fileName = "Mappe1.xls";  
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="""+fileName+@""";Extended Properties=""Excel 8.0;HDR=Yes""";  
  
using (OleDbConnection oleDbConnection = new OleDbConnection(connectionString))  
using (OleDbCommand oleDbCommand = oleDbConnection.CreateCommand())  
{  
  oleDbConnection.Open();  
  
  oleDbCommand.CommandText = "CREATE TABLE [Tabelle6]([Text] Char,[Zahl] Integer,[Datum] Date)";  
  oleDbCommand.ExecuteNonQuery();  
    
  oleDbCommand.CommandText = "UPDATE [Tabelle6$] SET [Text]='Hallo'";  
  oleDbCommand.ExecuteNonQuery();  
}  
  

Dieses Zitat ist etwas überarbeitet von mir und stammt ursprünglich von dN!3L.
Der Beitrag dazu ist hier.

Man müsste jetzt nur herausfinden, ob es auch bei Excel 2000 Dateien geht. Wobei es möglicherweise im Dateiformat nicht so große Unterschiede geben mag.

In der Zeit vor fünf Minuten ist Jetzt die Zukunft. Jetzt ist die Gegenwart. Die Zeit, in der ich zu erzählen begonnen habe, ist die Vergangenheit von Jetzt und die Zukunft von der Gegenwart der Zeit, fünf Minuten bevor ich zu erzählen begann.

J
1 Beiträge seit 2020
vor 3 Jahren

Ich hatte denselben Fehler, allerdings bereits beim Debuggen und nicht erst nach der Installation auf einem anderen Rechner. Daraufhin habe ich über den Paketmanager nuget das Paket ExcelDna.Interop installiert. Danach ging es und die Fehlermeldung kam nicht mehr. Ich nehme an, dass die benötigten dlls bei der Erstellung der msi Installer Datei mit berücksichtigt werden und der Zugfiff auf Excel dann auch bei Insallation auf einem anderen Rechner funktioniert.

Jens Kluge