Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi unit Excel97: Range in D5 aber nicht in D7 (https://www.delphipraxis.net/58088-unit-excel97-range-d5-aber-nicht-d7.html)

MaBuSE 1. Dez 2005 09:29


unit Excel97: Range in D5 aber nicht in D7
 
Hallo,
heute wende ich mich mal wieder mit einem kleinen Problem an Euch.

Ich habe eine Delphi 5 Anwendung die aus $(DELPHI)\Imports die Unit Excel97 eingebunden hat.

Es wird aus dieser Unit Range verwendet.
Delphi-Quellcode:
var r: Range;
In Delphi 7 ist in der Unit Excel97 kein Range definiert.

Die 2 Unit Excel97 scheint in Delphi7 nicht zu der in Delphi 5 kompatibel zu sein.

in der Unit ExcelXP ist auch kein Range definiert.

Was mach ich nun am besten?

Ich muss das Programm von D5 nach D7 portieren und möchte aber nichts an der Funktionalität ändern.

Über eine Antwort würde ich mich freuen.

Euer MaBuSE

marabu 1. Dez 2005 09:40

Re: unit Excel97: Range in D5 aber nicht in D7
 
Hallo MaBuSe,

wie wäre es mit ExcelRange?

Grüße vom marabu

MaBuSE 1. Dez 2005 09:59

Re: unit Excel97: Range in D5 aber nicht in D7
 
Danke für die schnelle Antwort.
Zitat:

Zitat von marabu
wie wäre es mit ExcelRange?

Das gibt es zumindest :-)

Aber die Eigenschaft Value hat sich im Typ geändert. Es gibt aber noch eine Eigenschaft Value2 die Passen würde (weil Variant).
Entspricht
Delphi-Quellcode:
Delphi7.Excel97.ExcelRange.Value2
dem
Delphi-Quellcode:
Delphi5.Excel97.Range.Value
?

marabu 1. Dez 2005 10:17

Re: unit Excel97: Range in D5 aber nicht in D7
 
Sind eigentlich beide vom Typ OleVariant, aber ein Unterschied ist da schon:

Aus der MS Excel Referenz
Der einzige Unterschied zwischen dieser Eigenschaft (Value2) und der Value-Eigenschaft besteht darin, dass die Value2-Eigenschaft die Datentypen Currency und Date nicht verwendet. Sie können auf Werte, die mit diesen Datentypen formatiert sind, als Gleitkommazahlen zugreifen, indem Sie den Datentyp Double verwenden.

marabu

MaBuSE 1. Dez 2005 10:52

Re: unit Excel97: Range in D5 aber nicht in D7
 
Zitat:

Zitat von marabu
Sind eigentlich beide vom Typ OleVariant, aber ein Unterschied ist da schon:

In Delphi5 stimmt das:
Delphi-Quellcode:
...
  Range=interface (System.IDispatch)
    ['{00020846-0000-0000-C000-000000000046}']
  public
...
    property Value: System.OleVariant dispid $6;
    property Value2: System.OleVariant dispid $56C;
...
  end;
...
Aber in Delphi 7 gibt einen Syntaxfehler:
(FSheet.Range ist vom Typ ExcelRange)
Delphi-Quellcode:
...
  FSheet.ConnectTo(FExcelWork.Sheets.Item[1] as ExcelWorksheet);
  FSheet.Range['B1', 'B1'].Value := FCbKag.Text;
...
Fehlermeldung beim Kompilieren
[Fehler] FrmProdukt.pas(958): '[' erwartet, aber ':=' gefunden

(Ich weiß, ein Feld kann auch eleganter ohne Range zugewiesen werden, aber ich will den ursprünglichen Quelltext und damit das Verhalten so wenig wie möglich ändern. Das ist nicht von mir programmiert, ich muß nur portieren.)
Das Tooltip zeigt folgendes:
prop ExcelRange.Value: [RangeValueDataType: OleVariant]: OleVariant - ExcelXP.pas


Hmmm, da steht ExcelXP, die hat er automatisch eingebunden, weil in dem Delphi7 natürlich das OfficeXP Package installiert ist.

Ich muß das mal Testen, evtl lasse ich dann das Ganze auf OfficeXP.

Ansonsten hast du Recht, habe nachgeschaut, das ist ein unterschied zw. Excel97.ExcelRange und ExcelXP.ExcelRange.

Danke noch mals
MabuSE

marabu 1. Dez 2005 11:51

Re: unit Excel97: Range in D5 aber nicht in D7
 
So geht das:

Delphi-Quellcode:
uses
  ExcelXP,
  Windows;

procedure TDemoForm.ButtonClick(Sender: TObject);
var
  wb: ExcelWorkbook;
  ws: ExcelWorkSheet;
  r: ExcelRange;
begin
  xl.Connect;
  wb := xl.WorkBooks.Add(null, GetUserDefaultLCID);
  ws := wb.Sheets.Add(null, null, 1, null, GetUserDefaultLCID) as ExcelWorkSheet;
  r := ws.Range['B1', 'B1'];
  r.Value2 := 'marabu';
  ShowMessage(r.Value2);
  xl.Disconnect;
end;
marabu

MaBuSE 1. Dez 2005 11:55

Re: unit Excel97: Range in D5 aber nicht in D7
 
Zitat:

Zitat von marabu
So geht das:

Danke, genau so hatte ich es gemacht. (Deswegen die Frage nach dem values2 weiter oben)
Das Projekt ist nun portiert, nun muß von der Fachabteilung getestet werden :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 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