Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Excel 2010: Datum eintragen (https://www.delphipraxis.net/155309-excel-2010-datum-eintragen.html)

David Martens 18. Okt 2010 08:45

Excel 2010: Datum eintragen
 
Ich benutzt folgenden Code zum Eintragen von Daten in Excel:

Delphi-Quellcode:
var
  Data : OleVariant;
  ...
begin
  ...
  Data := VarArrayCreate([0, AData.DataSet.RecordCount - 1,
                                    0, i - 1], varVariant);

  ...

  if (FExcelServer.Version.Major >= 11) and (iCol = iDatum) then
  begin
    if (FExcelServer.Version.Major >= 14) then
    begin
    // TODO: Umwandlung ????
//    Data[iRow, iCol - i] := StrToDateTime(AData.DataSet.Fields.Fields[iCol].AsDateTime;
    end
    else
      Data[iRow, iCol - i] := AData.DataSet.Fields.Fields[iCol].AsDateTime;
  end
  else
  begin
    sCell := Trim(AData.DataSet.Fields.Fields[iCol].AsString);
    sCellTest := StringReplace(sCell, '.', '', [rfReplaceAll]);

    if TryStrToFloat(sCellTest, fCellTest) then
    begin
      if (FExcelServer.Version.Major >= 11) and (Pos(',', sCell) > 0) then
      begin
        try
          sCell := StringReplace(sCell, '.', '#', [rfReplaceAll]);
          sCell[Pos(',', sCell)] := '.';
          sCell := StringReplace(sCell, '#', ',', [rfReplaceAll]);
          Data[iRow, iCol - i] := sCell;
        except
          Data[iRow, iCol - i] := Trim(AData.DataSet.Fields.Fields[iCol].AsString);
        end;
      end
      else
      begin
        Data[iRow, iCol - i] := Trim(AData.DataSet.Fields.Fields[iCol].AsString);
      end;
    end
    else
    begin
      Data[iRow, iCol - i] := Trim(AData.DataSet.Fields.Fields[iCol].AsString);
    end;
  end;

  ...
 
  FExcelServer.WriteRange(FStartRow,
                          FStartCol,
                          AData.DataSet.RecordCount,
                          Data);
Mal wieder eine neue Excelversion und nur Probleme.

Bis Excel 2007 geht alles gut: (FExcelServer.Version.Major = 11)
Der Vorteil mit
Delphi-Quellcode:
AData.DataSet.Fields.Fields[iCol].AsDateTime;
zu arbeiten liegt auf der Hand; damit bin ich unabhängig was das Format angeht.
Leider klappt das nicht mehr mit Excel 2010: (FExcelServer.Version.Major = 14).

Kann mir jemand sagen warum, wie ich das beheben kann?

Danke David

David Martens 18. Okt 2010 09:48

AW: Excel 2010: Datum eintragen
 
Ich hab mich mal von einem Tutorial auf Youtube link inspirieren lassen und folgende Änderung eingebaut:

Delphi-Quellcode:
  if (iCol = iDatum) then
  begin
    Data[iRow, iCol - i] := '=date(' + IntToStr(Jahr(AData.DataSet.Fields.Fields[iCol].AsDateTime)) + ',' +
                                       IntToStr(Monat(AData.DataSet.Fields.Fields[iCol].AsDateTime)) + ',' +
                                       IntToStr(Tag(AData.DataSet.Fields.Fields[iCol].AsDateTime)) + ')';
vobei Jahr(), Monat(), Tag() das Entsprechende zurückgibt.

mit Excel 2003 geht es schonmal, die anderen muß ich noch testen.

Edit: Geht doch nicht mit anderen Versionen. Eigentlich wäre ';' statt ',' richtig, aber das geht in keiner Version. Man ist das SCH...

Ines 20. Okt 2010 14:20

AW: Excel 2010: Datum eintragen
 
Hallo David,

wir verwenden immer noch Excel 2003 und ich weiß nicht, ob Dir das weiterhilft:

Ich übergebe ein Datum in der Form:
excel.cells[row,col] := FormatDateTime ('dd.mm.yyyy',mydate);

Viele Grüße Ines


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz