Sie können nicht programmgesteuert festlegen, welche Version von Excel verwendet werden soll. Die PIAs bestimmen nur, an welcher Schnittstelle oder an welchem Objektmodell Sie sich entwickeln. Aber welche Version von Excel tatsächlich ausgeführt wird, wird von der Registrierung gesteuert.
Wenn es jedoch um die Ausführung der PIAs geht, werden Sie tatsächlich mit der höchsten auf dem System installierten PIA arbeiten. Wenn Sie also gegen die Excel 2003-PIA entwickeln, der Client aber Excel 2007 mit der Excel 2007-PIA verwendet, wird Ihr Code gegen die Excel 2007-PIA ausgeführt - und er sollte ordnungsgemäß ausgeführt werden, da die Excel 2007-PIA abwärtskompatibel ist. Das heißt, jede höher nummerierte PIA-Version (und Excel-Objektmodell) ist abwärtskompatibel zu Befehlen, die mit einem älteren PIA- und älteren Excel-Objektmodell kompiliert wurden. Beachten Sie, dass, wenn der Client sowohl die Excel 2007- als auch die Excel 2003-PIAs auf der Maschine hat, die höhere versionierte PIA geladen wird, unabhängig davon, welche Version von Excel ausgeführt wird - also würde die Excel 2007-PIA ausgeführt, wenn beide PIAs verfügbar wären.
[Bearbeiten: Eine Einschränkung ist, dass die Excel 2007 PIAs 100% abwärtskompatibel sein sollten, wenn sie VB.NET oder C# 4.0 verwenden. Wenn C# 3.0 oder niedriger verwendet wird, verursacht die Tatsache, dass optionale Parameter tatsächlich erforderlich sind, wenn sie ab C# 3.0 aufgerufen werden, bei der Ausführung mit dem PIA- oder Objektmodell der höheren Version eine Unterbrechung in einem Code. Es ist jedoch relativ selten, und mit C# 4.0 sollte dieses Problem in der Theorie weggehen.]
Ok, so haben Sie nicht viel Kontrolle über die PIAs, weil die PIA, gegen die Sie entwickelt haben, nicht wirklich steuern Sie, welche PIA tatsächlich auf dem Client-Rechner ausgeführt wird.
Sie haben auch nicht viel Kontrolle darüber, welche Version von Excel gestartet wird.Wenn Sie z. B. eine neue Excel-Instanz erstellen über:
Excel.Application excelApp = new Application();
Die geladene Excel-Anwendung wird entsprechend der aktuellen in der Registrierung festgelegten Version festgelegt. 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‘. Wenn Sie dies alleine ändern, könnte es zwar ausreichen, aber ich würde lieber eine Reparatur durchführen, um sicherzustellen, dass alle Registrierungseinstellungen korrekt korrigiert werden. (Und ich konnte nicht wissen, was alle Einstellungen sein sollte.) Ok, ich habe gerade ein anderes: Sie würde auch ändern müssen:
[HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\ProgID]
einen Wert von „Excel.Application.12“ zu halten . Aber ich würde dringend empfehlen, stattdessen eine Reparatur durchzuführen. Ich weiß nicht, welche anderen Einstellungen geändert werden müssen, daher ist ein Wechsel von Hand etwas riskant.
Darüber hinaus sollten Sie die folgenden Tasten sowie finden:
HKEY_CLASSES_ROOT\Excel.Application.11
HKEY_CLASSES_ROOT\Excel.Application.12
Da das sind die Versionen von Excel, die Sie installiert haben.
(Siehe here für eine weitere Diskussion.)
ich ziemlich sicher bin, es mit den zu tun hat, um 2007 zu sein installieren -> 2003
Ja, das ist 100% richtig . Sie könnten versuchen, eine Reparatur für Excel 2007 auszuführen, dies wäre die einfachste Aufgabe. Wenn dies nicht funktioniert, dann werde ich beide deinstallieren und dann beide neu installieren. Ich würde Excel 2003 deinstallieren und dann 2007 deinstallieren (die Reihenfolge, in der Sie sie installierten) und dann Excel 2003 installieren und dann Excel 2007 installieren, so dass Sie beide Versionen in der richtigen Reihenfolge installieren.
Beachten Sie jedoch, dass Excel 2007 beim Aufruf von Excel.Application excelApp = new Application()
standardmäßig ausgeführt wird.
Die tatsächliche empfohlene Praxis ist nicht zu beiden Versionen von Excel auf dem Computer des Entwicklers ausgeführt werden. Weitere Informationen hierzu finden Sie unter:
ich verwendet, um mehrere Versionen von Excel auf meinem gleichen Entwicklungsmaschine zu haben, und ich fühlte mich persönlich, dass die Nachteile waren nicht so kompliziert wie diese Artikel es klingen lassen. Im Allgemeinen ist der Excel 2007 PIA abwärtskompatibel zu Excel 2003 PIA und alles funktioniert gut. Aber ich habe mich einmal in ein Register-Chaos ähnlich wie deines geraten und beschlossen, "das Richtige zu tun". Ich deinstallierte beide und dann nur Excel 2007 neu.
Von dort installierte ich virtuellen PC, der frei ist (VM-Waren ist wirklich ein wenig besser, aber es ist nicht frei) und installierte dann meine niedrigeren Versionen von Excel für 2003 , 2002, 2000 und '97 auf separaten VMs. Es ist definitiv etwas Arbeit, aber sobald Sie das tun, ist alles 100% sauber.
Das sagte, ich würde wahrscheinlich nicht wirklich gegen niedrigere Versionen von Excel auf einer VM entwickeln möchten, wäre es zu schwer, Visual Studio innerhalb einer VM gehostet zu verwenden. Diese VMs eignen sich daher nur zum Testen der Bereitstellung, um sicherzustellen, dass Ihr System gegen verschiedene Clientkonfigurationen arbeiten kann. Sinn ergeben?
Hoffe, das hilft!
Mike
Können Sie versuchen, eine Reparatur von Excel 2007 laufen und sehen, ob das korrigiert? – x0n
Es ist möglich, aber ich fürchte, das wird die 2003 PIAs für den Website-Code aufrüsten, wenn ich daran arbeiten muss. Ich denke, ich könnte hin und her springen, aber ich bin ein wenig besorgt darüber, wie das funktionieren wird, sobald es auf den Computern unserer internen Benutzer installiert ist. –
Es wird nicht die PIAs ändern. Sie können die GAC überprüfen, um sicher zu sein, aber es ist 99,99% sicher, dass Sie sowohl die Excel 2003 und Excel 2007 PIAs auf Ihrem Computer bereits haben. Die PIA-Setups ändern sich also nicht durch eine Reparatur. Aber eine Reparatur sollte die Registrierung beheben, um die aktuelle Version Excel 2007 statt Excel 2003 zu machen. Siehe meine Antwort unten für weitere Details. –