안녕하세요?
열려 있는 엑셀 파일(1.xls)의 활성화된 셀에 1을 입력하는 간단한 예제를 만들려고 합니다.
엑셀로 작업을 하다가 델파이로 만든 툴로 특정 작업을 해서 엑셀로 보내야 합니다.
open이나 add를 쓰면 새로 창이 열리므로 안 됩니다.
엑셀 작업과 델파이 어플리케이션 작업이 수시로 반복되므로 매 번 닫았다 열었다를 할 수 없는 형편입니다.
엑셀 매크로를 보니 application.windows('1.xls').activate로 쉽게 구현이 되는데 델파이로는 어떻게 해야 할 지 모르겠읍니다.
버튼을 누르면 실행이 되게 아래와 같이 해 봤읍니다.
1.xls은 열려 있는 상태입니다.
<!--CodeS-->
procedure TForm1.Button1Click(Sender: TObject);
var
Excel: Variant;
begin
Excel := CreateOleObject('excel.application');
Excel.Visible := true;
Excel.workbooks.open(GetCurrentDir + '\1.xls'); // 프로젝트가 있는 폴더의 1.xls 파일을 연다. 이 부분을 수정해야 합니다.
Excel.activecell.formular1c1 := '1'; // 활성화된 셀에 1을 입력한다.
end;
<!--CodeE-->
델파이로 엑셀을 제어하는 방법에 대해 추천해 주실 만한 책이 있으면 추천을 좀 부탁 드립니다.
도서관에 가서 찾아서라도 볼 터이니 절판된 것들이라도 좋습니다.
그럼 이만.
열려있는 Excel작업은 DDE(Dynamic Data Exchange)로 사용하셔야 할듯....
저도 DDE는 코딩해본지가 6년전 정도여서 지금은 가물가물합니다만
아래 코드를 예제로 테스트 하시면 일단은 님께서 실마리를 잡을수 있을 것 같습니다.
<!--CodeS-->
uses에 DDEMan을 포함시키구요
procedure TForm1.Button1Click(Sender: TObject);
var
DDEClientConv1 : TDdeClientConv;
DDEClientItem1 : TDDEClientItem;
P : PChar;
strTest : string;
begin
strTest := 'This is test program';
DDEClientConv1 := TDdeClientConv.Create(self);
DDEClientConv1.SetLink('Excel','Sheet1');
try
DDEClientConv1.OpenLink;
DDEClientConv1.PokeData('R5C2', PChar(strTest));
//-- R5C2는 Row로 다섯번째, Column으로 두번째를 의미합니다.
finally
DDEClientConv1.CloseLink;
DDEClientConv1.Free;
end;
end;
<!--CodeE-->
Excel이 열려있는 상태에서 테스트 해보세요..잘 나올 겁니다.
즐건 하루 되세요
-- Marek Wrote --