//값받아올때는 아래처럼
for i := 1 to 314 do begin// 엑셀의 행 갯수인데요. 갯수는 임의로 넣었습니다.
for j:=1 to stgrid1.ColCount do begin
stgrid1.Cells[j-1,i-1]:=myxlapp.cells[i,j];
end;
end;
현재 SQL문이 지원되는 것은 자체 DB엔진을 소유하고 있는 RDBMS, ORDBMS들과, 쿼리에 필요한 드라이버를 제공하고 있는 ISAM 방식의 로컬DB들 뿐입니다. EXCEL은 그 어떤 것도 지원하지 않습니다. 자료 자체가 sequential access를 지원할 수 있도록 sorting 되지 않으니까요.
하지만, EXCEL 자료를 가지고, 특정한 필요에 따라, '쿼리문으로 작업하듯' 작업할 수는 있겠지요?
'자료를 추출하고 싶다'고 하셨는데, 갈 길은 그리 쉽지는 않고, 매우 다양한 경로를 갖고 있을 듯 합니다.
1. EXCEL FILE은 특정한 포맷을 지닌 경우 ACCESS 파일로 변환 가능하다고 들었습니다. 이 방법을 이용할 수 도 있을 것 같구요.. (ACCESS 파일은 아시다시피 DB파일이고, 당연히 SQL이 지원됩니다)
2. EXCEL은 XML로 변환 가능합니다.
3. 위와 같은 변환 방식이 어렵다면, EXCEL 객체를 GRID 계통의 컴퍼넌트에 적재시킨 뒤, 그 컴퍼넌트를 갖구 작업할 수도 있을 거 같네요.
저두 여기서 자료를 얻어서 연습하고 있는데요.
도움이 됐으면 하네요.
..
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,comobj, StdCtrls, Buttons, Grids, DBGrids;
****** => comobj 삽입하시구요.
..
// 버튼 클릭시 스트링그리드에 엑셀 화일 불러오기 입니다.
procedure TForm1.BitBtn1Click(Sender: TObject);
var
sString : string;
MyXLApp : Variant ;
i,j,l,m:integer;
begin
screen.Cursor:=crhourglass;
MyXLApp:= CreateOleObject('Excel.application');
MyXLapp.workbooks.open( 'c:test.xls'); // 엑셀화일위치를 설정
MyXLapp.Sheets['sheet1'].Select ;
//값받아올때는 아래처럼
for i := 1 to 314 do begin// 엑셀의 행 갯수인데요. 갯수는 임의로 넣었습니다.
for j:=1 to stgrid1.ColCount do begin
stgrid1.Cells[j-1,i-1]:=myxlapp.cells[i,j];
end;
end;
MyXLApp.quit ;//종료시키는 부분
end;
도움이 되길 바랍니다....