エクセルのデータを範囲選択してStringGridに貼り付け及びその逆を行いたいのですが、どのようにコードを書けば良いでしょうか。
自分ではどこまで出来て、どこが分からないの?
分からない部分を具体的に質問してね。
開発環境も
まったくどうしていいのか分かりません、っていうのは
質問にはならないからな
>エクセルのデータを範囲選択して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
ちょいと変更
//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;
KHE00221さん 早速のご回答ありがとうごさいます。可動するコードまで書いて頂きとても助かりました。私が自力で解決を目指していたら1週間は苦闘しそうです。プログラムの書き方の勉強にもなりました。delphiが好きになれそうです。
ツイート | ![]() |