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
Eppos

Registriert seit: 7. Aug 2006
Ort: Heilbronn
523 Beiträge
 
Delphi 11 Alexandria
 
#1

DataSet in Excel exportieren, Integer immer 64 als Wert

  Alt 24. Sep 2012, 13: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.851 Beiträge
 
Delphi 11 Alexandria
 
#2

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

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

Registriert seit: 7. Aug 2006
Ort: Heilbronn
523 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 24. Sep 2012, 13: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, 14: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
523 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 24. Sep 2012, 14: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, 14: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
Antwort Antwort

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