AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Herausfinden, welche Excelversion genutzt werden kann
Thema durchsuchen
Ansicht
Themen-Optionen

Herausfinden, welche Excelversion genutzt werden kann

Ein Thema von xZise · begonnen am 13. Aug 2009 · letzter Beitrag vom 17. Aug 2009
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#11

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 14. Aug 2009, 20:08
Hallo,

Also es funktioniert nicht so ganz. Also bei mir funktionierts (D2k9), aber TurboDelphi meckert:
Zitat:
[Pascal Fehler] UWerkzeuge.pas(89): E2089 Ungültige Typumwandlung
Und zwar ist das in der ersten If-Bedingung und auch in der zweiten.
Delphi-Quellcode:
function GibExcelVersion : TExcelVersion;
var
  tmp : TGUID;
begin
  // Test auf MSO 2k3 / MSO 2k7
  Result := evKeine;
  if Succeeded(CLSIDFromProgID(PWideChar('Excel.Application.11'), tmp)) then
    Result := ev2003
  else if Succeeded(CLSIDFromProgID(PWideChar('Excel.Application.12'), tmp)) then
    Result := ev2007;
end;
Wenn man das aber "aufteilt" also etwa so:
Delphi-Quellcode:
var
  s : string;
  pw : PWideChar;
  i : Integer;
begin
  s := 'Excel.Application.11';
  pw := PWideChar(s);
  i := CLSIDFromProgID(pw, tmp);
  if Succeeded(i) then
Das liefert keinen Fehler, aber das liefert auch kein Succeeded.
Ich muss dazu sagen, dass die aufgeteilte Version so sein sollte, aber ich kann dafür meine Hand leider nicht ins Feuer legen

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
marky522

Registriert seit: 30. Okt 2006
29 Beiträge
 
Delphi XE2 Professional
 
#12

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 15. Aug 2009, 09:21
Hallo,

also ich mach das immer so:

Delphi-Quellcode:
 excel2007:=false;
 try
  Excel:=CreateOleObject('excel.Application');
  if Excel.Version = '12.0then excel2007:=true;
  Excel.quit
 except
  excole:=false;
 end;
Der Code liefert in der Variable excel2007 "true",
wenn Excel2007 gestartet werden konnte.

Mfg
Markus
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#13

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 15. Aug 2009, 10:27
Hallo Fabian,

warum gehst Du nicht über die Registry ? Dazu nutze ich diese Tabelle :
Delphi-Quellcode:
{-----------------------------------------------------------------}
{- Programm       - Release Ver - SP 1      - SP 2      - SP 3   -}
{-----------------------------------------------------------------}
{- MS Office 2000 -  9.0.2      -  9.0.3    -  9.0.4    -  9.0.6 -}
{- MS Office XP   - 10.0.2      - 10.0.3    - 10.0.4    - 10.0.6 -}
{- MS Office 2003 - 11.0.5      - 11.0.6    - 11.0.7    - 11.0.8 -}
{- MS Office 2007 - 12.0.4      - 12.0.6215 - 12.0.6425 -        -}
{-----------------------------------------------------------------}
Für MSO XP und höher brauchst Du diese beiden Registry Key:
Zitat:
HKLM\SOFTWARE\Microsoft\Office\x.0\Registration
HKLM\SOFTWARE\Microsoft\Office\x.0\Common\ProductV ersion
Für x einfach die Version eintragen.

Bei Office 2000 musst Du die FileVersion von der Datei mso9.dll auslesen.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#14

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 15. Aug 2009, 13:08
Okay über die Registry könnte ich auch gehen. Aber muss ich beide Einträge überprüfen?

Und eine theoretische Frage: Was ist wenn zwar Excel nicht installiert ist, aber das OleObjekt?

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 15. Aug 2009, 13:11
Zitat:
Und eine theoretische Frage: Was ist wenn zwar Excel nicht installiert ist, aber das OleObjekt?
Dann wäre etwas falsch gelaufen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#16

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 15. Aug 2009, 13:16
Naja aber in der Theorie könnte doch auch eine andere Office Suite das Objekt zur Verfügung stellen oder?

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 15. Aug 2009, 13:18
Ich kenne keine andere Office-Suite, welches eine Excel-Com-Klasse bereitstellt. Und wenn eine das machen würde, müsste die sich ja kompatibel verhalten.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#18

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 15. Aug 2009, 13:38
Zitat von xZise:
Okay über die Registry könnte ich auch gehen. Aber muss ich beide Einträge überprüfen?
Über den Schlüssel Registration kann die Edition ermittelt werden und über den Schlüssel Common\Productversion ermittelst Du die Versionsnummer.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#19

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 15. Aug 2009, 14:07
Zitat von RWarnecke:
warum gehst Du nicht über die Registry ?
Die Funktion CLSIDFromProgID() geht auch über die Registry.
Allerdings ist die Registry eine Abstraktionsebene tiefer.
Es ist softwaretechnisch eine Ungeschicktheit eine tiefere Abstraktionsebene als nötig zu wählen.
Man möchte ja nicht wissen, was in der Registry steht, sondern welche COM-Klassen zur Verfügung stehen.

Delphi-Quellcode:
function ClassIDExists(classID:WideString):Boolean;
var
  tmp : TGUID;
begin
  Result := Succeeded(CLSIDFromProgID(PWideChar(classID), tmp));
end;

function GibExcelVersion : TExcelVersion;
begin
  // zuerst prüfen, ob Excel 2007 vorhanden - Reihenfolge ist wichtig
  if ClassIDExists('Excel.Application.12') then
    Result := ev2007;
  else if ClassIDExists('Excel.Application.11') then
    Result := ev2003
  else
    Result := evKeine;
end;
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#20

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 15. Aug 2009, 15:01
Hallo sx2008,
aber da gibt es das Problem, das er es nicht kompilieren kann. Zumindest unter Turbo Delphi Explorer. Mit Delphi 2009 kann ich das kompilieren.
Aber wenn man das aufteilt (siehe oben), dann kompiliert er zwar, meldet dann aber das weder MSO 2007 noch MSO 2003 installiert ist (also nicht bei mir, sondern bei einem Freund der das mitentwickelt).

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz