Frage

Umwelt:

Windows XP Maschine
Sowohl Excel 2007 und Excel 2003 installiert ist (in dieser Reihenfolge, nicht chronologisch).
C # 3.5

Problem:

Wenn ich die PIA verwenden, um einige Office Automation zu tun, ich verwenden Sie die folgende Codezeile:

var excel = new ApplicationClass();

Die PIA-Version bezieht sich speziell auf sie als Excel 12.
C: \ WINDOWS \ assembly \ GAC \ Microsoft.Office.Interop.Excel \ 12.0.0.0__71e9bce111e9429c \ Microsoft.Office.Interop.Excel.dll
Aber:

 excel.Version;//this is 11.0 instead of 12.0

Wenn ich also versuchen, eine Datei mit Endung .xlsx zu öffnen, warnt er mich über verlorene Funktionalität in der Dateikonvertierung und öffnet es mit Excel 2003. Ich bin mir ziemlich sicher, dass es mit der Installation, um seine 2007 zu tun hat - 2003>, aber ich kann nicht deinstallieren 2003 auf meinem Rechner b / c wir einige Büroautomation auf unserem Webserver für ein nicht verwandtes Projekt, das verwendet Excel 2003

Ich habe am Policy.11.0.Microsoft.Office.Interop.Excel.config Sachen sah, aber es sagt,

<bindingRedirect oldVersion="11.0.0.0" newVersion="12.0.0.0"></bindingRedirect>

Also, bin ich ratlos. Warum kann nicht sagen, dass ich das COM-Interop, welche Version von Excel zu verwenden?

War es hilfreich?

Lösung

Sie können nicht programmatisch befehlen, welche Version von Excel zu verwenden. Die PIA nur diktieren, welche Schnittstelle oder Objektmodell, das Sie entwickeln gegen. Aber welche Version von Excel ist tatsächlich von der Registrierung gesteuert läuft.

Wenn es darum geht, die PIAs zu laufen, aber Sie werden tatsächlich laufen gegen die höchste Ebene PIA auf dem System installiert ist. Also, wenn Sie gegen die PIA Excel 2003 entwickeln, aber der Kunde hat Excel 2007 mit dem Excel 2007 PIA, läuft der Code gegen den Excel 2007 PIA - und es sollte gut laufen, weil die Excel 2007 PIA kompatibel ist rückwärts. Das heißt, jede höhere Nummer PIA-Version (und Excel-Objektmodell) ist rückwärtskompatibel zu Befehle kompilierten gegen eine ältere PIA und älteres Excel-Objektmodell. Beachten Sie, dass, wenn der Kunde hat sowohl die Excel 2007 und Excel 2003 PIAs auf der Maschine, dann die höhere versioniert PIA würde geladen werden, unabhängig davon, welche Version von Excel ausgeführt wird -., So dass der Excel 2007 PIA laufen würde, wenn beide PIAs verfügbar waren

[Edit: Ein Nachteil ist, dass der Excel 2007 PIAs sollte 100% abwärtskompatibel sein, wenn VB.NET oder C # 4.0 verwenden. Wenn C # 3.0 mit oder darunter, der Tatsache, dass optionale Parameter tatsächlich, wenn sie von C # 3.0 oder unten genannt erforderlich wird, eine Pause in einigem Code erzeugt beim Laufen gegen die höhere Version PIA oder Objektmodell. Es ist relativ selten aber, und mit C # 4.0, soll diese Frage geht weg, in der Theorie.]

Ok, so dass Sie nicht viel Kontrolle über den PIAs, weil die PIA, dass Sie gegen sich entwickelt nicht eigentlich die PIA tatsächlich auf dem Client-Rechner ausgeführt werden soll steuern.

Sie haben nicht viel Kontrolle darüber, welche Version von Excel entweder gestartet wird. Zum Beispiel, wenn Sie eine neue Excel-Instanz über:

Excel.Application excelApp = new Application();

Die geladenen Excel-Anwendung wird entsprechend den aktuellen Version Satz in der Registrierung. Die aktuelle Version wird gespeichert unter:

HKEY_CLASSES_ROOT\Excel.Application\CurVer

Es sieht aus wie die ‚CurVer‘ Schlüssel in Ihrem Fall wird ein Standardwert von ‚Excel.Application.11‘ haben, anstelle von ‚Excel.Application.12‘. dies allein ändern könnte den Trick tun, aber ich würde stattdessen eine Reparatur zu tun bevorzugen Sie sicher, dass alle die Registrierungseinstellungen richtig korrigiert zu machen sind. (Und ich kann nicht wissen, was alle Einstellungen sein sollten.) Ok, ich habe gerade ein anderes: Sie auch zu ändern brauchen würden:

[HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\ProgID]

einen Wert von „Excel.Application.12“ zu halten. Aber ich würde eine Reparatur laufen stattdessen wird dringend empfohlen. Ich weiß nicht, was andere Einstellungen benötigen könnten geändert werden, so dass sie mit der Hand zu ändern ein bisschen riskant ist.

Darüber hinaus sollten Sie die folgenden Tasten sowie finden:

HKEY_CLASSES_ROOT\Excel.Application.11
HKEY_CLASSES_ROOT\Excel.Application.12

Da es sich um die Versionen von Excel, die Sie installiert haben.

(Siehe hier für eine weitere Diskussion.)

  

Ich bin ziemlich sicher, es hat mit dem zu tun,   installieren, um 2007 zu sein -> 2003

Ja, das ist 100% richtig. Sie könnten versuchen, eine Reparatur auf Excel 2007 ausgeführt wird, würde dies die einfachste Sache zu tun. Wenn dies nicht funktioniert, dann würde ich beide deinstallieren und dann neu installieren sie beide. Ich würde Excel 2003 deinstallieren und dann deinstallieren 2007 (Umkehrung der Reihenfolge, in der sie installiert ist), und installieren Sie Excel 2003 und Excel 2007 dann so installieren, dass Sie beide Versionen in der richtigen Reihenfolge installieren.

Aber bedenken Sie, dass dadurch, Excel 2007 wird standardmäßig ausgeführt werden, wenn Sie Excel.Application excelApp = new Application() nennen.

Die tatsächliche empfohlene Praxis ist nicht beide Versionen von Excel auf dem Rechner des Entwicklers ausgeführt haben. Weitere Informationen hierzu finden Sie unter:

habe ich mehrere Versionen von Excel auf meiner gleiche Entwicklungsmaschine haben, und ich persönlich das Gefühl, dass die Nachteile nicht so kompliziert waren, da diese Artikel es klingen zu lassen. Im Allgemeinen ist die Excel 2007 PIA rückwärtskompatibel zu dem Excel 2003 PIA und alles funktioniert. Aber ich habe einmal in einem Registry Chaos ähnlich wie bei Ihnen und beschlossen, „das Richtige zu tun“. Ich deinstalliert beide und dann nur neu installiert Excel 2007.

Von dort habe ich installiert Virtual PC, die frei ist (VM ware ist eigentlich ein wenig besser, aber es ist nicht kostenlos) und dann 2003 meine niedrigeren Versionen von Excel installiert, 2002, 2000 und '97 auf separaten VMs. Es ist auf jeden Fall einige Arbeit einzurichten, aber wenn Sie dies tun, alles ist 100% sauber.

sagte, ich würde wahrscheinlich will nicht wirklich zu entwickelt gegen niedrigere Versionen von Excel auf einer VM, wäre es zu schwierig sein, Visual Studio innerhalb eines VM gehostet zu verwenden. So sind diese VMs nur gut für den Einsatz zu testen, um sicherzustellen, dass Ihr System gegen verschiedene Client-Konfigurationen arbeiten kann. Sinn?

Hope, das hilft!

Mike

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top