AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Fehler bei Excel.workbooks.Open (...)
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler bei Excel.workbooks.Open (...)

Ein Thema von Andreas Leix · begonnen am 6. Aug 2008 · letzter Beitrag vom 6. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
Andreas Leix

Registriert seit: 28. Apr 2008
31 Beiträge
 
#1

Fehler bei Excel.workbooks.Open (...)

  Alt 6. Aug 2008, 09:51
Hallo zusammen !

Arbeite unter delphi2007. Habe mir Routinen geschrieben um in eine bestehende Excel-Datei
Daten reinzuschreiben. Das klappt wunderbar mit Excel 2007. Auf anderen Rechnern ist aber Excel 2000 drauf
und da läuft mein Programm nicht .

Dazu verwende ich folgenden Code

Delphi-Quellcode:
uses ExcelXP;
...
var Excel : TExcelApplication;
    WB : _WorkBook;
...
  WB:= Excel.Workbooks.Open (strDokument, emptyParam, emptyParam, emptyParam, emptyParam,
                              emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam,
                              emptyParam, emptyParam,emptyParam, emptyParam,lcid );
Wie gesagt mit Excel 2007 läuft das Prima,
mit Excel2000 gibts bei "Workbooks.Open" einen Laufzeitfehler ( "Zugriffsverletzung ....")

Nun habe ich bezgl workbooks.Open schon gelesen, dass sich da die ANZAHL der Aufrufparameter geändert hat.

Wie kann man denn mit sowas umgehen. Mein Programm soll ja auf verschiedensten Ziel-systemen mit evtl. unterschiedlichen Excel-Versionen laufen.

Die Excel-Version könnte ich zu Laufzeit wahrscheinlich noch irgendwie bestimmen,
aber was mach ich mit dem Aufruf von Workbooks.Open ?
Der läßt sich ja nur mit genau der Anzahl von Parametern compilieren!

Da ist doch ein allgemeines Problem beim Einbinden der Unit ExcelXP, oder ?


Hat jemand eine Ahnung ?

Gruß Andreas
  Mit Zitat antworten Zitat
Errraddicator

Registriert seit: 26. Jun 2008
161 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Fehler bei Excel.workbooks.Open (...)

  Alt 6. Aug 2008, 09:52
Warum gibste überhaupt die ganzen Leerparameter mit an?
Kannste nich einfach nur Workbooks.Open('Name') schreiben?

...

Edit:
Achso Du nutzt diese TExcelApplication Klasse.
Sah mir zuerst nach OLE aus.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Fehler bei Excel.workbooks.Open (...)

  Alt 6. Aug 2008, 10:01
Zitat:
Achso Du nutzt diese TExcelApplication Klasse.
Sah mir zuerst nach OLE aus.
Die Klasse verwendet ebenfalls OLE. Es handelt sich halt nur um frühe Bindung
Markus Kinzler
  Mit Zitat antworten Zitat
Andreas Leix

Registriert seit: 28. Apr 2008
31 Beiträge
 
#4

Re: Fehler bei Excel.workbooks.Open (...)

  Alt 6. Aug 2008, 10:05
Würde ich mit "später Bindung" um das Problem herum kommen ?

Wenn ja , wie stell ich das an?


Gruß Andreas
  Mit Zitat antworten Zitat
Errraddicator

Registriert seit: 26. Jun 2008
161 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Fehler bei Excel.workbooks.Open (...)

  Alt 6. Aug 2008, 10:25
Also ich mache es im Moment so...

Delphi-Quellcode:
procedure prod();
var
  vExcel: Variant;
  vWorkbook: Variant;
  vWorksheet: Variant;
  rowIdx: Integer;
begin
  CoInitialize(nil);
  try
    vExcel := CreateOleObject('Excel.Application');
    vWorkbook := vExcel.Workbooks.Open('Datenquelle.xls');
    vWorksheet := vWorkbook.ActiveSheet;

    rowIdx := 2;
    while <SonstWas> do
    begin
      ShowMessage(vWorksheet.Cells[rowIdx, 3]);
    // usw halt
Sprich Du machst für jedes Objekt was Du direkt brauchst eine Variable vom Typ Variant und kannst dann mehr oder weniger direkt VBA programmieren.
Der Compiler kennt die Funktionen dann allerdings natürlich nich, d.h. der meckert falsch geschrieben Funktionen etc. erst zur Laufzeit an.

Aber so mache ich das im Moment und das klappt wunderbar.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Fehler bei Excel.workbooks.Open (...)

  Alt 6. Aug 2008, 10:53
Besser OleVariant.
Du könntest auch die passenden Wrapper für Office2000 installieren. du scheinst die für OfficeXP gewählt zu haben
Markus Kinzler
  Mit Zitat antworten Zitat
Errraddicator

Registriert seit: 26. Jun 2008
161 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Fehler bei Excel.workbooks.Open (...)

  Alt 6. Aug 2008, 10:54
Echt?
Ok, werde ich demnächst dann wohl berücksichtigen.

Was hat das denn fürn Sinn wenn ich fragen darf?
Bzw. wo is der Unterschied zwischen Variant und OleVariant?
  Mit Zitat antworten Zitat
Andreas Leix

Registriert seit: 28. Apr 2008
31 Beiträge
 
#8

Re: Fehler bei Excel.workbooks.Open (...)

  Alt 6. Aug 2008, 11:06
Ich probier´s jetzt gerade ohne die fix gebundenen Typen TExcel, Tworkbook...,
sondern mit mit OLEVariant.
Ich komm dabei ein bisschen weiter, allerdings muß ich erst verschiedene Stellen,
wo ich die TExcelApplication und TWorksheetetc verwendet habe umändern.

Ein anderes Package einzubinden bringt nichts !!
Ich will die Software weitergeben und
weiss zur Compile-Zeit ja nicht,
welches Office auf dem Ziel-Rechner installiert ist.

Gruß
Andreas
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Fehler bei Excel.workbooks.Open (...)

  Alt 6. Aug 2008, 11:12
OleVariant ist ein COM-Typ ist zwar momentan dasselbe könnte sicgh aber ändern.
Zitat:
Ein anderes Package einzubinden bringt nichts !!
Ich will die Software weitergeben und
weiss zur Compile-Zeit ja nicht,
welches Office auf dem Ziel-Rechner installiert ist.
Dann nimm trotzdem das von Office2000. das funktioniert dann mit den neuren auch. Umgekehrt, wie du siehst, nicht.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

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

Re: Fehler bei Excel.workbooks.Open (...)

  Alt 6. Aug 2008, 11:38
Ich würde die frühe Bindung empfehlen und bei Problemen kurzzeitig auf die späte Bindung umschalten:
Delphi-Quellcode:
uses ExcelXP;
...
var Excel : TExcelApplication;
    WB : _WorkBook;
    x : OleVariant;
...
  x := Excel.Workbooks.Open(strDokument);
  // man kann hier sogar benannte Parameter verwenden.
  // das erhöht die Lesbarkeit des Code und man erspart sich die "EmptyParam"-Orgie
  x := Excel.Workbooks.Open(FileName:=strDokument); // "FileName" ist der Parametername

  // zur Sicherheit prüfen, dass auch wirklich ein Dispatch-Interface vorliegt:
  if VarType(x) <> varDispatch then
     raise Exception.Create('Problem bei Ansteuerung von Excel');

  // und jetzt wieder zurück zur frühen Bindung
  WB := IDispatch(x) as _WorkBook;

  // jetzt gibt es 2 Referenzen auf das Workbook-Objekt
  // wer mag, kann jetzt die Referenz auf IDispatch-Interface freigeben
  x := Unassigned;
Mit diesem Trick kann man das Beste aus beiden Welten (frühe und späte Bindung) vereinen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:52 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