StringGridでカット・&ペーストするのには

解決


MT  2009-03-30 18:03:03  No: 33787

エクセルのデータを範囲選択してStringGridに貼り付け及びその逆を行いたいのですが、どのようにコードを書けば良いでしょうか。


それで  2009-03-30 18:12:55  No: 33788

自分ではどこまで出来て、どこが分からないの?
分からない部分を具体的に質問してね。


ついでに  2009-03-30 19:19:44  No: 33789

開発環境も

まったくどうしていいのか分かりません、っていうのは
質問にはならないからな


KHE00221  2009-03-31 04:34:52  No: 33790

>エクセルのデータを範囲選択してStringGridに貼り付け及びその逆を行いたいのですが、どのようにコードを書けば良いでしょうか。

このようにコードを書いて下さい

uses
   ClipBrd, StrUtils;

//ClipBord to StringGrid
procedure TForm2.Button1Click(Sender: TObject);
var
    ClipBoard: TClipBoard;
    StringList: TStringList;
    X,Y,X2: Integer;
    S,S2: String;
    Col,Row: Integer;
begin

    StringList := TStringList.Create;
    ClipBoard := TClipBoard.Create;
    ClipBoard.Open;

    StringList.Text := ClipBoard.AsText;
    Y := 0;
    Row := StringGrid1.Row;
    while Y < StringList.Count do
    begin
      Col := StringGrid1.Col;
      S := StringList[Y];
      X := 1;
      while X <> 0 do
      begin
        X2 := PosEx(Char(9),S,X);
        if X2 = 0 then
        begin
          S2 := Copy(S,X,Length(S));
          X := 0;
        end
        else
        begin
          S2 := Copy(S,X,X2-X);
          X := X2 + 1;
        end;
        StringGrid1.Cells[Col,Row] := S2;
        Inc(Col);
      end;
      Inc(Y);
      Inc(Row);
    end;

    ClipBoard.Close;
    ClipBoard.Free;
    StringList.Free;
end;

//StringGrid to ClipBoard
procedure TForm2.Button2Click(Sender: TObject);
var
    ClipBoard: TClipBoard;
    StringList: TStringList;
    X,Y: Integer;
    S: String;
begin
    StringList := TStringList.Create;
    for Y:=StringGrid1.Selection.Top to StringGrid1.Selection.Bottom do
    begin
      S := '';
      for X:=StringGrid1.Selection.Left to StringGrid1.Selection.Right do
      begin
        S := S + StringGrid1.Cells[X,Y];
        if X <> StringGrid1.Selection.Right then S := S + Char(9);
      end;
      StringList.Add(S);
    end;
    ClipBoard := TClipBoard.Create;
    ClipBoard.Open;
    ClipBoard.AsText := StringList.Text;
    ClipBoard.Close;
    ClipBoard.Free;
    StringList.Free;
end;

BDS 2006 + EXCEL 2002


KHE00221  2009-03-31 04:53:50  No: 33791

ちょいと変更

//ClipBord to StringGrid
procedure TForm2.Button1Click(Sender: TObject);
var
    StringList: TStringList;
    X,Y,X2: Integer;
    S,S2: String;
    I,Col,Row,MaxCol: Integer;
begin

    StringList := TStringList.Create;
    ClipBoard.Open;

    StringList.Text := ClipBoard.AsText;
    Y := 0;
    Row := StringGrid1.Row;
    MaxCol := StringGrid1.Col;
    while Y < StringList.Count do
    begin
      Col := StringGrid1.Col;
      S := StringList[Y];
      X := 1;
      if S <> '' then
      begin
        while X <> 0 do
        begin
          X2 := PosEx(Char(9),S,X);
          if X2 = 0 then
          begin
            S2 := Copy(S,X,Length(S));
            X := 0;
          end
          else
          begin
            S2 := Copy(S,X,X2-X);
            X := X2 + 1;
          end;
          StringGrid1.Cells[Col,Row] := S2;
          Inc(Col);
          if MaxCol < Col then MaxCol := Col;
        end
      end
      else
      begin
        for I := StringGrid1.Col to MaxCol-1 do
        begin
          StringGrid1.Cells[I,Row] := '';
        end;
      end;
      Inc(Y);
      Inc(Row);
    end;

    ClipBoard.Close;
    StringList.Free;
end;

//StringGrid to ClipBoard
procedure TForm2.Button2Click(Sender: TObject);
var
    StringList: TStringList;
    X,Y: Integer;
    S: String;
begin
    StringList := TStringList.Create;
    for Y:=StringGrid1.Selection.Top to StringGrid1.Selection.Bottom do
    begin
      S := '';
      for X:=StringGrid1.Selection.Left to StringGrid1.Selection.Right do
      begin
        S := S + StringGrid1.Cells[X,Y];
        if X <> StringGrid1.Selection.Right then S := S + Char(9);
      end;
      StringList.Add(S);
    end;
    ClipBoard.Open;
    ClipBoard.AsText := StringList.Text;
    ClipBoard.Close;
    StringList.Free;
end;


MT  2009-03-31 20:03:51  No: 33792

KHE00221さん  早速のご回答ありがとうごさいます。可動するコードまで書いて頂きとても助かりました。私が自力で解決を目指していたら1週間は苦闘しそうです。プログラムの書き方の勉強にもなりました。delphiが好きになれそうです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加