function CsvToExcel(Eingabe:
string):boolean;
var
CsvArray:TStringDynArray;
ArrayMax, SegmentNr, Zeile, Spalte, PosUmbruch, Zeilenumbruchnacher:integer;
CsvExcel:variant;
begin
Eingabe := StringReplace(Eingabe,#$D#$A,'
<><><>',[rfReplaceAll]);
//Zeilenumbruch abfangen, da hiermit innerhalb des Arrays nicht mehr gearbeitet werden kann
CsvArray := explode('
;', Eingabe);
//explode und StringReplace bei großen Dateien besser durch etwas schnelleres ersetzen!
SegmentNr := 0;
Zeile := 1;
Spalte := 1;
CsvExcel := CreateOLEObject('
Excel.Application');
try
CsvExcel.Visible:=false;
CsvExcel.DisplayAlerts:=false;
CsvExcel.Workbooks.Open(ExtractFilePath(ParamStr(0))+'
resources\csv.xls');
CsvExcel.Workbooks[1].Worksheets[1].Select;
repeat
if (CsvArray[0+SegmentNr] <> '
')
and (copy(CsvArray[0+SegmentNr],1,6) <> '
<><><>')
then begin
if (POS('
<><><>',CsvArray[0+SegmentNr]) > 0)
then begin
PosUmbruch := PosEx('
<><><>', CsvArray[0+SegmentNR]);
CsvExcel.cells[Zeile,Spalte] := copy(CsvArray[0+SegmentNR], 1, PosUmbruch-1);
Spalte := 1;
Zeile := Zeile+1;
CsvExcel.cells[Zeile,Spalte] := copy(CsvArray[0+SegmentNR], PosUmbruch+6);
SegmentNr := SegmentNr+1;
Spalte := Spalte+1;
continue;
end
else begin
CsvExcel.cells[Zeile,Spalte] := CsvArray[0+SegmentNR];
SegmentNr := SegmentNr+1;
Spalte := Spalte+1;
continue;
end;
end
else if (copy(CsvArray[0+SegmentNr],1,6) = '
<><><>')
then begin
Spalte := 1;
Zeile := Zeile+1;
CsvExcel.cells[Zeile,Spalte] := copy(CsvArray[0+SegmentNR],7);
SegmentNr := SegmentNr+1;
Spalte := Spalte+1;
continue;
end
else begin
SegmentNr := SegmentNr+1;
Spalte := Spalte+1;
continue;
end;
until (SegmentNr = length(CsvArray)-1);
except begin
CsvExcel.quit;
CsvExcel := unassigned;
Result := false;
exit;
end;
end;
CsvExcel.ActiveWorkBook.SaveAs(ExtractFilePath(ParamStr(0))+'
resources\'+'
tmp.xls');
CsvExcel.quit;
CsvExcel := unassigned;
Result := true;
end;