私はDevExpress cxGrid(データベースに接続されています)を使用しているDelphiアプリケーションを持っています。ExcelからcxGridにデータを貼り付けるには
Excelからグリッドにデータをコピー&ペーストできる必要があります。
これは可能ですか?もしそうなら、それを行う方法、どの追加のコンポーネントが必要ですか?
私はDevExpress cxGrid(データベースに接続されています)を使用しているDelphiアプリケーションを持っています。ExcelからcxGridにデータを貼り付けるには
Excelからグリッドにデータをコピー&ペーストできる必要があります。
これは可能ですか?もしそうなら、それを行う方法、どの追加のコンポーネントが必要ですか?
Clipboard.HasFormat(CF_TEXT)
でフォーマットを確認してください。
Clipboard.AsText
でテキストを抽出します。
StringList.Text := Clipboard.AsText
で行を分割します。文字列リストの各項目はクリップボードからの行になりました。
スプリット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;
Excelアプリケーションからコンテンツをコピーした後、クリップボードの内容を確認できます。 CTRL + Vショートカットでクリップボードの内容を解析し、それぞれのセルにデータを設定します。
は、おそらくのために行くための最も簡単な形式はテキストとしてそれを引き出し、Textプロパティを通じて文字列リストにそれを固執することです。リスト内の各項目は行全体になり、htタブ文字でマークされた列境界でセルに分割できます。 –
彼は問題の開発者です、彼の仕事です... – ComputerSaysNo
これは、TStringListを使用して区切り文字を割り当ててから、TStringList変数の数に配列の長さを設定するだけで、配列内の対応する文字列アイテムに各アイテムをコピーするか、文字列リスト内の各アイテムにアクセスすることができます – ComputerSaysNo
@Dorin Duminica Excelデータは2Dです。あなたの提案は1D配列にフラット化されませんか? –
@Dorin Duminicaあなたがデリミタプロパティを参照していると思われますが、一般的には機能しません。 –