Q&A

  • 제 소스 좀 봐주세요..그리고 답변도..
begin

if qryXl.RecordCount >= 1 then

qryXl.First;

for i:=1 to qryXl.RecordCount +1 do

begin

xcode := qryXl.FieldByName('code').AsString;

xname := qryXl.FieldByName('name').AsString;

xtel := qryXl.FieldByName('tel').AsString;

xaddr := qryXl.FieldByName('addr').AsString;

StringGrid1.Cells[1,i] := xcode;

StringGrid1.Cells[2,i] := xname;

StringGrid1.Cells[3,i] := xtel;

StringGrid1.Cells[4,i] := xaddr;

qryXl.Next;

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

var

i, j, rc, cc : integer;

lh_handle : THandle;

ExcelAppl : variant;

begin

lh_handle := FindWindow( 'excel', nil );

if lh_handle <> 0 then

begin

ExcelApplication1.disConnect;

end;

ExcelApplication1.Connect;

ExcelApplication1.Visible[1] := true;

ExcelApplication1.caption := ' 스트링그리드의데이타를 엑셀로';

ExcelApplication1.Workbooks.Add(xlWBATWorksheet,0);

ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.Item[1] );

ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.sheets[1] As _Worksheet);

cc := StringGrid1.ColCount;

rc := StringGrid1.RowCount;

for i:=1 to rc do

for j:=1 to cc do

begin

ExcelWorksheet1.cells.Item[i,j] := StringGrid1.Cells[j,i];

end;

end;

// ExcelApplication1.Quit;

// ExcelApplication1.DisplayAlerts[0] := true;

// ExcelApplication1.Disconnect;

procedure TForm1.Button3Click(Sender: TObject);

var

i, j, rc, cc : integer;

begin

ExcelApplication1.Connect;

ExcelApplication1.Visible[1] := true;

ExcelApplication1.caption := ' 쿼리한결과의 데이타를 엑셀로';

ExcelApplication1.Workbooks.Add(xlWBATWorksheet,0);

ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.Item[1] );

ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.sheets[1] As _Worksheet);

cc := StringGrid1.ColCount;

rc := StringGrid1.RowCount;

for i:=1 to rc do

for j:=1 to cc do

begin

ExcelWorksheet1.cells.Item[i,j] := StringGrid1.Cells[j,i];

end;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

ExcelApplication1.Disconnect;

end;



위의 프로그램을 실행하고 버튼3을 눌렀을때.. 엑셀이 뜨면서 스트링그리드의 내용이

엑셀로 가거든요... 여기서 엑셀을 닫지 않고 버튼3을 또 누르면.. 엑셀에 있던 자료가

없어져요.. 음.. 엑셀을 띄워놓고.. 작업을 계속 하고 싶은데..자료가 없어지니까..

다른 버튼을 새로 만들어서 새로운것을 가져올때도 마찬가지겠죠... 쩝..

어떻게 해결 방법이 없을까요?

엑셀을 닫고 새로 열면 에러가 나서.. 폼을 닫을때 종료한는걸로 하려고 해서 그래요..

답변 부탁드립니다..



1  COMMENTS
  • Profile
    bhkmm 2000.06.08 04:37
    류응철 wrote:

    > begin

    > if qryXl.RecordCount >= 1 then

    > qryXl.First;

    > for i:=1 to qryXl.RecordCount +1 do

    > begin

    > xcode := qryXl.FieldByName('code').AsString;

    > xname := qryXl.FieldByName('name').AsString;

    > xtel := qryXl.FieldByName('tel').AsString;

    > xaddr := qryXl.FieldByName('addr').AsString;

    > StringGrid1.Cells[1,i] := xcode;

    > StringGrid1.Cells[2,i] := xname;

    > StringGrid1.Cells[3,i] := xtel;

    > StringGrid1.Cells[4,i] := xaddr;

    > qryXl.Next;

    > end;

    > end;

    > procedure TForm1.Button2Click(Sender: TObject);

    > var

    > i, j, rc, cc : integer;

    > lh_handle : THandle;

    > ExcelAppl : variant;

    > begin

    > lh_handle := FindWindow( 'excel', nil );

    > if lh_handle <> 0 then

    > begin

    > ExcelApplication1.disConnect;

    > end;

    > ExcelApplication1.Connect;

    > ExcelApplication1.Visible[1] := true;

    > ExcelApplication1.caption := ' 스트링그리드의데이타를 엑셀로';

    > ExcelApplication1.Workbooks.Add(xlWBATWorksheet,0);

    > ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.Item[1] );

    > ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.sheets[1] As _Worksheet);

    > cc := StringGrid1.ColCount;

    > rc := StringGrid1.RowCount;

    > for i:=1 to rc do

    > for j:=1 to cc do

    > begin

    > ExcelWorksheet1.cells.Item[i,j] := StringGrid1.Cells[j,i];

    > end;

    > end;

    > // ExcelApplication1.Quit;

    > // ExcelApplication1.DisplayAlerts[0] := true;

    > // ExcelApplication1.Disconnect;

    > procedure TForm1.Button3Click(Sender: TObject);

    > var

    > i, j, rc, cc : integer;

    > begin

    > ExcelApplication1.Connect;

    > ExcelApplication1.Visible[1] := true;

    > ExcelApplication1.caption := ' 쿼리한결과의 데이타를 엑셀로';

    > ExcelApplication1.Workbooks.Add(xlWBATWorksheet,0);

    > ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.Item[1] );

    > ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.sheets[1] As _Worksheet);

    > cc := StringGrid1.ColCount;

    > rc := StringGrid1.RowCount;

    > for i:=1 to rc do

    > for j:=1 to cc do

    > begin

    > ExcelWorksheet1.cells.Item[i,j] := StringGrid1.Cells[j,i];

    > end;

    > end;

    > procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

    > begin

    > ExcelApplication1.Disconnect;

    > end;

    >

    > 위의 프로그램을 실행하고 버튼3을 눌렀을때.. 엑셀이 뜨면서 스트링그리드의 내용이

    > 엑셀로 가거든요... 여기서 엑셀을 닫지 않고 버튼3을 또 누르면.. 엑셀에 있던 자료가

    > 없어져요.. 음.. 엑셀을 띄워놓고.. 작업을 계속 하고 싶은데..자료가 없어지니까..

    > 다른 버튼을 새로 만들어서 새로운것을 가져올때도 마찬가지겠죠... 쩝..

    > 어떻게 해결 방법이 없을까요?

    > 엑셀을 닫고 새로 열면 에러가 나서.. 폼을 닫을때 종료한는걸로 하려고 해서 그래요..

    > 답변 부탁드립니다..

    >

    안냐세요~ 류응철씨...

    버튼 3을 두번이상 클릭하면.. 자료가 없어진다고 하셨죠...

    그건 없어지는게 아니랍니다...

    엑셀은 작업을 sheet라는거로 나눠서 하지요...(여러가지 작업을 한번에 다루기 위해)

    그런데 류응철씨 소스를 보면 sheet는 추가를 시켰으나, 출력되는 sheet는 항상 sheet1로 되어 있잖아요...

    그래서 버튼을 계속클릭을 하면 자료가 지워지는 것처럼 보입니다...

    이해가 잘 안되시면요. 실행을 해보고서요.. sheet1을 작은창으로 만들어 보세요...

    그럼 이면에 다른 sheet들이 떠 있을거에요...

    저두 여기까지는 찾았으나... sheet를 어떻게 변화시킬지는 아직.... ^^;;;

    혹시 아시면.. 헤헤... 서로 도와주면 고맙잖아요... 헤헤헤

    그럼 즐거운 프로그램 하시고요... 답변 기다릴께요.....

    저번에도 몇번 답장 드렸는데... 답변은 안해주시던데...........