Vérifiez le format avec Clipboard.HasFormat(CF_TEXT)
.
Extrayez le texte avec Clipboard.AsText
.
Diviser en rangées avec StringList.Text := Clipboard.AsText
. Chaque élément de la liste de chaînes est maintenant une ligne du presse-papiers.
Fendez chaque ligne dans des cellules individuelles en utilisant une fonction de Split:
function Split(const s: string; Separator: char): TStringDynArray;
var
i, ItemIndex: Integer;
len: Integer;
SeparatorCount: Integer;
Start: Integer;
begin
len := Length(s);
if len=0 then begin
Result := nil;
exit;
end;
SeparatorCount := 0;
for i := 1 to len do begin
if s[i]=Separator then begin
inc(SeparatorCount);
end;
end;
SetLength(Result, SeparatorCount+1);
ItemIndex := 0;
Start := 1;
for i := 1 to len do begin
if s[i]=Separator then begin
Result[ItemIndex] := Copy(s, Start, i-Start);
inc(ItemIndex);
Start := i+1;
end;
end;
Result[ItemIndex] := Copy(s, Start, len-Start+1);
end;
cela peut être réalisé plus facile et plus élégant en utilisant une TStringList et en assignant le caractère séparateur, puis définissez la longueur du tableau au nombre de la variable TStringList ET que juste copier chaque élément à son élément de chaîne correspondant dans le tableau ... ou vous pouvez simplement accéder à chaque élément de la liste de chaînes – ComputerSaysNo
@Dorin Duminica Excel données est 2D, votre suggestion ne l'aplatirait-il pas simplement dans un tableau 1D? –
@Dorin Duminica Je soupçonne que vous faites référence à la propriété Delimiter, mais cela ne fonctionnera pas en général –