Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

메모장

Excel File 불러오기. 본문

Delphi

Excel File 불러오기.

우유한잔하죠 2016. 1. 20. 17:59

이전 글에서 엑셀 파일을 생성했다면 이제는 불러오고 쓸 차례다.

덮어쓰기 방식은 소개하지 않고 삽입 방법만 소개할 예정이다.

다른 방법이 있는것 같지만 내가 쓴 방법은 ADOQuery와 ADOConnection 컴포넌트를 사용하는 방법이다.

간단히 설명하자면 엑셀파일은 데이터베이스, 파일 안의 sheet는 테이블로 보면 되겠다. Sheet에다가 SQL에서 사용하는 INSERT문을 사용하면 끝!

방법

1. 먼저 폼에 ADOQuery와 ADOConnection 컴포넌트를 올려 놓는다. (name은 각각 QRY와 conn으로 지정했음. 이후 잦은 QRY와 conn 단어 사용 예정.)

2. ADOQuery의 Connection 속성을 'conn'으로 지정.

3. ADOConnection의 LoginPrompt 속성을 False로 설정.

4. ADOConnection의 Provider 속성을 'Microsoft.ACE.OLEDB.12.0'로 설정.


5. 코드

procedure XlsLoad; var cat : _Catalog; sSql :String; begin conn.Close; conn.Connected := False; try conn.ConnectionString := //'Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=;Data Source='+'D:\Log.xls' //+';Extended Properties="Excel 8.0";Persist Security Info=True;'; //xls의 경우 위 주석의 코드로 하면 됨. //xlsx 파일의 경우 'Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=' + 'C:\Log_dd.xlsx' + ';Mode=Share Deny None;Extended Properties="Excel 12.0 Xml;HDR=yes";Jet OLEDB:' + 'System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";' + 'Jet OLEDB:Engine Type=37;Jet OLEDB:Database Locking Mode=0;' + 'Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;' + 'Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;' + 'Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don''''t Copy Locale on compact=False;' + 'Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False'; conn.Connected := True; except ShowMessage('오류'); Exit; end; if conn.State <> [stOpen] then begin ShowMessage('엑셀파일에 연결할 수 없습니다.'); Exit; end; cat := CoCatalog.Create; cat.Set_ActiveConnection(conn.ConnectionObject); if cat.Tables.Count <= 0 then Exit; //연결 됐으니 QRY에 내용 넣기. QRY.Close; sSql := 'INSERT INTO [Sheet1$] VALUES(1,2,3,4,5)'; try QRY.SQL.Text := sSql; QRY.ExecSQL; finally conn.Close; end; end;


연결할 때 try except로 예외처리 해주는거 잊지 말고 코딩하면 되겠다.

* ADOConnection과 ADOQuery 두개를 추가할 때 자동으로 생성되는 uses절 항목 외에

  ADOX_TLB를 추가해 주어야 한다.


Comments