AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi DataSet in Excel exportieren, Integer immer 64 als Wert

DataSet in Excel exportieren, Integer immer 64 als Wert

Ein Thema von Eppos · begonnen am 24. Sep 2012 · letzter Beitrag vom 26. Sep 2012
Antwort Antwort
Seite 1 von 2  1 2   
Eppos

Registriert seit: 7. Aug 2006
Ort: Heilbronn
496 Beiträge
 
Delphi XE5 Ultimate
 
#1

DataSet in Excel exportieren, Integer immer 64 als Wert

  Alt 24. Sep 2012, 14:08
Hallo zusammen,

ich versuche mich gerade an Delphi XE2.
Mein Funktion für den Export in Excel aus einem DataSet heraus hat unter Delphi 5 einwandfrei funktioniert.

Ich Speichere die Daten in ein

ExcelArray : OLEVariant;

Wenn ich dieses Array nun an Excel übergebe erscheint immer in Zahlenfeldern "64".

Hat jemand eine Idee?

Vielen Dank

Eppos
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.804 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: DataSet in Excel exportieren, Integer immer 64 als Wert

  Alt 24. Sep 2012, 14:10
Zeig mal etwas Code.
Markus Kinzler
  Mit Zitat antworten Zitat
Eppos

Registriert seit: 7. Aug 2006
Ort: Heilbronn
496 Beiträge
 
Delphi XE5 Ultimate
 
#3

AW: DataSet in Excel exportieren, Integer immer 64 als Wert

  Alt 24. Sep 2012, 14:14
Delphi-Quellcode:
procedure SetExcelTable( vDS : TDataSet; vForm : TForm);
const
  xlWBATWorksheet = -4167;
  xlContinuous = 1;
var
  XLApp: Variant;
  XLWorkbook: Variant;
  XLSheet: Variant;
  XLArrayData : OLEVariant;
  XLCellBegin: Variant;
  XLCellEnd: Variant;
  XLRange: Variant;

  iColumnsCount: Integer;
  iRowsCount: Integer;
  i: Integer;
  j: Integer;
begin
  try
    XLApp.DisplayAlerts := False;
    Screen.Cursor := crHourGlass;
    try
      XLWorkbook := XLApp.Workbooks.Add(xlWBATWorkSheet);
      XLSheet := XLWorkbook.Sheets[1];

      vDs.DisableControls;
      iRowsCount := vDS.RecordCount + 1;

      iColumnsCount:= vDS.FieldCount;

      XLArrayData := VarArrayCreate([1, iRowsCount, 1, iColumnsCount], varVariant);

      vDS.First;

      for i := 2 to iRowsCount do
      begin
        for j:= 1 to iColumnsCount do
          case vDS.Fields.Fields[j - 1].DataType of
            ftString : XLArrayData[i, j] := vDS.Fields.Fields[j - 1].AsString;
            ftInteger : XLArrayData[i, j] := vDS.Fields.Fields[j - 1].AsInteger;
            ftFloat, ftCurrency : XLArrayData[i, j] := vDS.Fields.Fields[j - 1].AsFloat;
            ftDate,ftDateTime : begin
                                  XLArrayData[i, j] := FormatDateTime( 'dd.mm.yyyy hh:mm:ss', vDS.Fields.Fields[j - 1].AsDateTime );
                                  XLArrayData[i, j] := StringReplace( XLArrayData[i, j], ' 00:00:00', '', [rfReplaceAll] );
                                end;
          else ;
          end;
        vDS.Next;
      end;
      XLCellBegin := XLSheet.Cells[1, 1];
      XLCellEnd := XLSheet.Cells[iRowsCount, iColumnsCount];
      XLRange := XLSheet.Range[XLCellBegin, XLCellEnd];
      XLRange.NumberFormat := '@';
      XLRange.Value := XLArrayData;
      XLRange.Borders.LineStyle := xlContinuous;
      for i:= 1 to iColumnsCount do
        XLSheet.Columns[i].AutoFit;

      XLApp.Visible := True;
      vDs.EnableControls;
    finally
      vDs.EnableControls;
      vForm.Enabled:= True;
      Screen.Cursor := crDefault;
      XLApp.DisplayAlerts:= True;
      VarClear(XLArrayData);
    end;
  except
    vDs.EnableControls;
    XLApp.Quit;
  end;
end;
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

AW: DataSet in Excel exportieren, Integer immer 64 als Wert

  Alt 24. Sep 2012, 15:08
Es gibt nicht nur ftInteger sondern auch noch ftSmallint, ftWord, ftLargeint.
Delphi-Quellcode:
        for j:= 1 to iColumnsCount do
          case vDS.Fields.Fields[j - 1].DataType of
             ...
          else
             // Zelle sollte sinnvollen Wert erhalten
             // ohne Zuweisung ist XLArrayData[i, j] undefiniert
             XLArrayData[i, j] := 'unsupported datatype';
          end;
Andreas
  Mit Zitat antworten Zitat
Eppos

Registriert seit: 7. Aug 2006
Ort: Heilbronn
496 Beiträge
 
Delphi XE5 Ultimate
 
#5

AW: DataSet in Excel exportieren, Integer immer 64 als Wert

  Alt 24. Sep 2012, 15:11
@shima
Ich habe die Else-Anweisung hinzugeüfgt, dort springt er überhaupt nicht rein.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

AW: DataSet in Excel exportieren, Integer immer 64 als Wert

  Alt 24. Sep 2012, 15:21
Ich habe die Else-Anweisung hinzugeüfgt, dort springt er überhaupt nicht rein.
Na, das ist doch schon mal was.

Dann verwende mal eine Zwischenvariable für das Feld damit du besser debuggen kannst
Delphi-Quellcode:
var
  f:TField;

    for j:= 1 to iColumnsCount do
    begin
       f := vDS.Fields.Fields[j - 1];
       case f.DataType of
          ftString : XLArrayData[i, j] := f.AsString;
          ftInteger : XLArrayData[i, j] := f.AsInteger;
 
         ...
Zusätzlich solltest du den Datentyp Variant überall durch OleVariant ersetzen.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: DataSet in Excel exportieren, Integer immer 64 als Wert

  Alt 24. Sep 2012, 15:22
der Bösewicht ist

XLRange.NumberFormat := '@';

versuch es mal mit

XLRange.NumberFormat := '#.##0,00';
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

AW: DataSet in Excel exportieren, Integer immer 64 als Wert

  Alt 24. Sep 2012, 15:33
XLRange.NumberFormat := '#.##0,00';
Geht aber nicht, weil sich das NumberFormat auf den gesamten Range (der auch String- & Datumsfelder enthalten kann) bezieht.
Das ist schon mal ein grundlegender Fehler.
Andreas
  Mit Zitat antworten Zitat
Eppos

Registriert seit: 7. Aug 2006
Ort: Heilbronn
496 Beiträge
 
Delphi XE5 Ultimate
 
#9

AW: DataSet in Excel exportieren, Integer immer 64 als Wert

  Alt 24. Sep 2012, 15:37
Danke an Shmia und Bummi.

Ich habe die Zeile
XLRange.NumberFormat := '@';
einfach auskommentiert
und jetzt geht es!
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.658 Beiträge
 
Delphi 7 Personal
 
#10

AW: DataSet in Excel exportieren, Integer immer 64 als Wert

  Alt 24. Sep 2012, 15:53
Da Excel wie seine Schwester Word etwas zickig ist versuch es mal so:
excel.activesheet.Cells.NumberFormat := '@'; Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf