Skip Navigation Links.
Expand VBAVBA
엑셀프로그래밍이 필요한 이유
Expand ExcelExcel
Expand External LibraryExternal Library
Expand SolutionSolution
Expand EssayEssay

ADO_004 | 엑셀화일을 데이타베이스로..

엑셀데이타를 만들어 저장하고
ADO로 읽어서
ADO와 XML을 연합시켜서
XML화일을 만들기

정보관리,분석을 하고 싶다면 엑셀+ADO는 되어야 한다 왜냐면 편리하고,빠르고,효율적이고 코드가 간략하고 등등..이니까..
아래와같이 테스트용 테이타를 만들어서
코드를 실행하는 화일과 같은 홀더에 저장되고

Sub CreateDummyBook() Const DUMMY_BOOK As String = "\SampleForADO_XML_DATAS.xls" On Error Resume Next Kill ThisWorkbook.Path & DUMMY_BOOK Application.DisplayAlerts = False With Workbooks.Add .SaveAs ThisWorkbook.Path & DUMMY_BOOK With .Worksheets("Sheet1").Range("A1:E5") .Formula = "=""Data_""&column()" .Copy .Cells.PasteSpecial xlPasteValues With .Offset(1).Resize(100, 5) .Formula = "=int(rand()*100)+100" .Copy .Cells.PasteSpecial xlPasteValues End With End With .Close True End With Application.DisplayAlerts = True End Sub

I/O함수 KILL을 사용하여 화일지우고
Workbooks.Add하여 통합문서 만들고
SaveAs 메소드로 정해진 화일명으로 저장하고
수식을 문자열로 전달하여 각셀에 수식을 만들어서 열머리를 만들고
워크시트함수를 활용하여 정해진 범위개체속에 수식을 넣어서 통합문서의 계산엔진을
가동시켜서 계산이 완료된후 Copy/PasteSpecial하여 값만 붙여 넣고
화일을 닫는다

이제 이것을 ADO로 읽어서 XML화일로 만들어 보자
ADO를 참조시키고
XML라이브러리도 적당한 버전으로 참조시키시고

Sub Convert_Excel_Data_to_XML()
Dim oMyconnection As Connection
Dim oMyrecordset As Recordset
Dim oMyXML As DOMDocument
Dim oMyWorkbook As String
Const DUMMY_BOOK As String = "\SampleForADO_XML_DATAS.xls"

Set oMyconnection = New Connection
Set oMyrecordset = New Recordset
Set oMyXML = New DOMDocument

On Error Resume Next

oMyWorkbook = Application.ThisWorkbook.Path & DUMMY_BOOK

oMyconnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
             "Data Source=" & oMyWorkbook & ";" & _
             "Extended Properties=excel 8.0;" & _
             "Persist Security Info=False"
oMyrecordset.Open "Select * from [Sheet1$A1:E100]", _ 
	 oMyconnection, adOpenStatic

oMyrecordset.Save oMyXML, adPersistXML
oMyXML.Save (ThisWorkbook.Path & "\Output.xml")
oMyrecordset.Close
Set oMyconnection = Nothing
Set oMyrecordset = Nothing
Set oMyXML = Nothing
End Sub

ADO의 Connection 개체생성하고
ADO의 Recordset개체생성하고
Connection개체의 Open 메소드에 필요한 정보를 위와 같이 전달하여
Connection을 열고 Open 메소드
RecordSet개체의 Open메소드로 데이타테이블을 연다
이때 시트를 테이블로 인식하기 위하여서는 [Sheet1$A1:E100]과 같이
시트명 뒤에 $표시를 반드시 붙여준다
또 다른 표현도 있지만 다음 화일에서 이야기 하도록 하고
Sheet를 테이블로 인식하기 위하여서는 시트명뒤에 $표시를 잊지 마시고
XML개체를 생성하여 Recordset개체가 갖고 있는 테이블정보를
Recordset의 Save메소드의 XML개체를 매개변수로 전달하면
지가 스스로 해석하고 알아서 XML화일을 만들어준다



ADO가 해주는 일중에 XML화일을 만드는 일을 살펴보았다
그럼 다음 화일에서 또!!

2007버전이상에서는 ConnectionString을 아래와 같이 하시면 될 것이다
oMyconnection.Open _
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& oMyWorkbook & ";Extended Properties=Excel 12.0 Xml;"


XLADO_004_XLtoADOtoXML.