Nie można zaprogramować polecenia, której wersji programu Excel użyć. PIAs tylko dyktują, z którym interfejsem, lub modelem obiektu, nad którym pracujesz. Ale która wersja programu Excel faktycznie działa, jest kontrolowana przez rejestr.
Jeśli chodzi o uruchamianie PIA, będzie to jednak działać przeciwko PIA najwyższego poziomu zainstalowanej w systemie. Jeśli więc rozwiniesz się przeciwko PIA w programie Excel 2003, ale klient ma Excel 2007 z PIA programu Excel 2007, twój kod będzie działał przeciwko PIA programu Excel 2007 - i powinien działać dobrze, ponieważ program Excel 2007 PIA jest zgodny wstecz. Oznacza to, że każda wersja PIA o wyższym numerze (i model obiektowy programu Excel) jest wstecznie kompatybilna z komendami skompilowanymi ze starszym modelem PIA i starszym modelem obiektów programu Excel. Zauważ, że gdyby klient miał zarówno PIAs Excel 2007, jak i Excel 2003 na maszynie, to ładowałaby się PIA z wyższą wersją, niezależnie od wersji Excela, więc uruchomiłaby PIA programu Excel 2007, gdyby obie PIA były dostępne.
[Edytuj: jednym zastrzeżeniem jest to, że oceny PIA programu Excel 2007 powinny być w 100% zgodne z poprzednimi wersjami podczas korzystania z VB.NET lub C# 4.0. Jeśli używasz C# 3.0 lub poniżej, fakt, że opcjonalne parametry są rzeczywiście wymagane, gdy zostanie wywołany z C# 3.0 lub poniżej, spowoduje złamanie jakiegoś kodu podczas działania na wyższej wersji PIA lub modelu obiektowego. Jest to stosunkowo rzadkie, ale z C# 4.0 problem ten powinien zniknąć, teoretycznie.]
OK, więc nie masz dużej kontroli nad PIA, ponieważ PIA, które opracowałeś przeciw kontrolować, które PIA będą faktycznie działać na komputerze klienta.
Nie masz dużej kontroli nad wersją programu Excel.Na przykład podczas tworzenia nowej instancji programu Excel za pomocą:
Excel.Application excelApp = new Application();
Załadowana aplikacja Excel jest ustawiona zgodnie z aktualną wersją ustawioną w rejestrze. Obecna wersja jest zapisywana w:
HKEY_CLASSES_ROOT\Excel.Application\CurVer
Wygląda klawisza „Curver” w Twoim przypadku będzie mieć wartość domyślną „Excel.Application.11”, zamiast „Excel.Application.12”. Samo zmienienie tego może załatwić sprawę, ale wolałbym zamiast tego wykonać naprawę, aby upewnić się, że wszystkie ustawienia rejestru zostały poprawione poprawnie. (I nie mógł wiedzieć, co wszystkie ustawienia powinny być.) Ok, ja po prostu znaleźć jeszcze jedno: czy trzeba także zmienić:
[HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\ProgID]
posiadać wartość „Excel.Application.12” . Ale zdecydowanie zaleciłbym wykonanie naprawy zamiast tego. Nie wiem, jakie inne ustawienia mogą wymagać zmiany, więc zmiana ich ręcznie jest nieco ryzykowna.
Ponadto, należy znaleźć następujące klucze, a także:
HKEY_CLASSES_ROOT\Excel.Application.11
HKEY_CLASSES_ROOT\Excel.Application.12
Ponieważ są to wersje programu Excel, które zostały zainstalowane.
(Patrz here do dalszej dyskusji.)
Jestem pewien, że ma do czynienia z zainstalować kolejność jest 2007 -> 2003
Tak, to jest 100% poprawne . Możesz spróbować uruchomić naprawę w programie Excel 2007, byłoby to najłatwiejsze do zrobienia. Jeśli to nie zadziała, to odinstaluj oba, a następnie zainstaluję je ponownie. Chciałbym odinstalować program Excel 2003, a następnie odinstalować 2007 (odwracając kolejność, w której zostały zainstalowane), a następnie zainstalować program Excel 2003, a następnie zainstalować program Excel 2007, aby zainstalować obie wersje we właściwej kolejności.
Należy jednak pamiętać, że w ten sposób program Excel 2007 będzie domyślnie uruchamiany po wywołaniu Excel.Application excelApp = new Application()
.
Zalecana praktyka to , a nie, aby obie wersje programu Excel działały na komputerze programisty. Więcej na ten temat patrz:
Kiedyś miałem kilka wersji programu Excel na moim samej maszynie rozwoju, a ja osobiście czułem, że downsides się nie tak skomplikowane, jak te artykuły sprawiają, że brzmi. Zasadniczo program Excel 2007 PIA jest kompatybilny z poprzednimi wersjami programu Excel 2003 PIA i wszystko działa poprawnie. Ale kiedyś dostałem się do rejestru podobnego do twojego i zdecydowałem się "postąpić właściwie". Odinstalowałem oba, a następnie ponownie zainstalowałem program Excel 2007.
Stamtąd zainstalowałem Virtual PC, który jest darmowy (VM ware jest w rzeczywistości trochę lepszy, ale nie jest darmowy), a następnie zainstalowałem moje niższe wersje programu Excel 2003 , 2002, 2000 i '97 na oddzielnych maszynach wirtualnych. Z pewnością jest trochę pracy do skonfigurowania, ale kiedy to zrobisz, wszystko jest w 100% czyste.
To powiedziawszy, prawdopodobnie nie chciałbym faktycznie rozwijać przeciwko niższych wersji programu Excel na maszynie wirtualnej, byłoby zbyt trudno używać Visual Studio hostowane w maszynie wirtualnej. Tak więc te maszyny wirtualne są dobre tylko do testowania wdrażania, aby upewnić się, że system może działać w różnych konfiguracjach klienta. Ma sens?
Mam nadzieję, że to pomoże!
Mike
Czy możesz spróbować uruchomić naprawę programu Excel 2007 i sprawdzić, czy to rozwiązuje? – x0n
Jest to możliwe, ale obawiam się, że podniesie PIA z 2003 roku do kodu strony, kiedy będę musiał nad tym popracować. Sądzę, że mógłbym podskakiwać w przód iw tył, ale jestem trochę zaniepokojony tym, jak to będzie działało po zainstalowaniu na komputerach naszych wewnętrznych użytkowników. –
Nie spowoduje to zmiany PIA. Możesz sprawdzić GAC, ale masz 99,99% pewności, że już posiadasz PIA w programie Excel 2003 i Excel 2007. Tak więc konfiguracje PIA nie zmienią się, wykonując naprawę. Ale naprawa powinna naprawić rejestr, aby bieżąca wersja była Excel 2007 zamiast Excel 2003. Zobacz moją odpowiedź poniżej, aby uzyskać więcej szczegółów. –