Wobei die Stringliste noch viel mehr Features bietet.
Delphi-Quellcode:
function GetAds4Excel(ads: TAdoDataset): string;
var
sl, sl2: TStringList;
i: Integer;
begin
sl := TStringList.Create;
sl2 := TStringList.Create;
try
sl2.Delimiter := #9;
for i := 0 to ads.FieldCount - 1 do
if ads.Fields[i].Visible then
sl2.Add(ads.Fields[i].DisplayLabel);
sl.Add(sl2.DelimitedText);
Ads.First;
while not Ads.Eof do begin
sl2.Clear;
for i := 0 to ads.FieldCount - 1 do
if ads.Fields[i].Visible then
sl2.Add(ads.Fields[i].DisplayText);
sl.Add(sl2.DelimitedText);
Ads.Next;
end;
//sl.LineBreak := #10;
Result := sl.Text;
finally
sl2.Free;
sl.Free;
end;
end;
Und wenn man will, kann man auch noch die Enumeratoren ausnutzen.
Delphi-Quellcode:
function GetAds4Excel(ads: TAdoDataset): string;
var
sl, sl2: TStringList;
F: TField;
begin
sl := TStringList.Create;
sl2 := TStringList.Create;
try
sl2.Delimiter := #9;
for F in ads.Fields do
if F.Visible then
sl2.Add(F.DisplayLabel);
sl.Add(sl2.DelimitedText);
Ads.First;
while not Ads.Eof do begin
sl2.Clear;
for F in ads.Fields do
if F.Visible then
sl2.Add(F.DisplayText);
sl.Add(sl2.DelimitedText);
Ads.Next;
end;
//sl.LineBreak := #10;
Result := sl.Text;
finally
sl2.Free;
sl.Free;
end;
end;
Damit optimiert man sogar noch die vielen Stringconcatinierungen, bzw. das Speichermanagement, welches nur noch einmal pro Zeile alles zusammenfügt und nicht bei jedem einzelnem Wert.
Mit der selben Technik lassen sich auch CSVs erstellen oder auslesen, wobei das ja schon eine
CSV ist, nur eben mit Tabulator als Trennzeichen.