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
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