Also zu 1. nochmal. Ich glaube jetzt habe ich die Antwort, aber wiso das so ist, keine Ahnung?
noch zur Info: damit die Übertragung der Daten schneller geht mache ich folgendes:
Delphi-Quellcode:
var
Data : OleVariant;
...
begin
...
i := 0;
for iCol := 0 to TDataSource.DataSet.FieldCount - 1 do
begin
if TDataSource.DataSet.Fields[iCol].Visible then
inc(i);
end;
...
Data := VarArrayCreate([0, TDataSource.DataSet.RecordCount - 1, 0, i - 1], varVariant);
...
while (not TDataSource.DataSet.Eof) do
begin
...
if (FExcelServer.Version.Major >= 11) and // Excel 2003 und höher
(iCol = iDatum) then // iDatum ist die Spalte des Datums
begin
Data[iRow, iCol - i] := TDataSource.DataSet.Fields.Fields[iCol].AsDateTime
end
else
begin
Data[iRow, iCol - i] := Trim(TDataSource.DataSet.Fields.Fields[iCol].AsString);
end;
end;
...
FExcelServer.WriteRange(FStartRow,
FStartCol,
TDataSource.DataSet.RecordCount,
VisibleFieldCount,
Data);
...
end;
TDataSource.DataSet.Fields.Fields[iCol].AsDateTime ergibt für heute 40213. Also wird ja eigentlich nur diese Zahl eingetragen, aber Excel scheint es trotzdem zu erkennen.