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

Excel & VBA---Brain Training


XML DOM 특강_02 | XML 데이타를 HTML과 Excel에서 활용해보기

XML의 목적은 정보를 적절히 보관하고 있는 역할이다
이 말은 다른 어떤 곳에서 활용하기를 기다리고 있는 셈인것이다
HTML은 표현도구라고 했다..
용도에 맞추어서 정보를 얻어다가 혹은 하드코딩으로 표현을 한다
(예전의 HTML즉 웹문서는 전부하드코딩을 하였다)
무슨 소리냐 하면 전혀 동적으로 움직이지 않는 그냥 있는 정보를
그대로 보기좋게 보여주는 정도였으나..
엑셀에서 동적으로 표현하듯이 HTML문서도 동적으로 표현하게 되고
동적으로 표현하자면 정보는 별도로 다른 곳에 보관하고 동적으로 어떤때는
이런 정보를, 또 다른 때는 다른 정보를 나타나게 하는 것이 일반적인 것이
된 것이다

아래는 XML의 정보를 HTML의 각 개체에 전달하는 것을 구현한 것이다

Smith Jill President All 160 Roberts William Vice President Marketing 175 Gonzalez Alejandra Vice President Sales 188 Billiker Brian Senior Software Architect Information Systems 176 Williamson Tara Account Manager Sales 196

Employees View

Last Name FirstName
Title Department
Extension


HTML문서에서는 모양을 한껏 내고
XML문서는 그냥 데이타만 보관하고 HTML에서 요구하는대로
전달하는 정보창고역할을 하고 있는 것이다

이렇게 네트워상에서 가볍게 XML문서형식으로 정보를 주고 받고
이것을 웹페이지에 표현을 하던..
워드문서에 표현을 하던..
파워포인트에 표현을 하던..
모바일폰에 표현을 하던..
실버라이트에 표현을 하던..
정보전달의 표준이 XML문서라는 것을 보여주기 위하여 기를 썼다

그러니..
위의 내용을 엑셀에서 똑같이 구현해보고
위의 HTML과 XML의 연결과정, 또한 참고로 보도록 하자


BrainTraining_068_4.



XML문서에서 XML문을 얻어내어 이것을 XMLDOM의 개체와 해당 속성을 사용하여 요리조리 엑셀에서 사용할 정보만 수집하여 우리와 친근한 VBA의 Collection개체에 문자열로 변환 보관하는 과정을



메시지 박스를 과정마다 띄우면서 이해할수 있게 표현하려고 노력하였으니
잘 챙기셨으면 좋겠다

XMLDocument개체는 모든 정보를 createNode메소드로 만들어서
상위 노드의 appendChild메소드로 계속 붙여 나가는 요령으로
만들면 되는 것..
정보의 상하관계를 규정하고 관리하는 좋은 개체이니
꼭 잘 챙기시는 것이 좀더 발전된 개발자가 되는 길이라는 점
잊지 마시기를..

HTML이나 XML이나 javascript등의 다른 개발영역을 비교할때
excel 이 왜 좋은지를 좀더 알게 된다
왜 그럴까..
일을 할때 무언가 정리를 할때 우리는 테이블이라는 형식이 반드시
필요하게 된다
엑셀에서는 그냥 테이블이 만들어져있는 상태라고 하는 것으로도
우리는 거저 먹는 셈이다
이 테이블이 없다면 매번 그려대야 한다 html에서 즉 웹페이지에서 테이블을 하나 만든다고 치면

<table> <tr> <td>데이타</td><td>데이타</td> <tr> <tr> <td>데이타</td><td>데이타</td> <tr> </table>

위와 같이 html 코딩을 해야 한다..
워드에서 테이블을 그릴려면 역시 테이블을 만드는 작업을 해야 한다
이것 하나만 해도 엑셀은 뛰어 나다
XML 태그와 같이 table, tr, td와 같은 태그를 만들어 주어야 하는 것이다
위와 같이 코딩을 하면 아래와 같이 html이 번역하여 보여주는 것이다

데이타데이타
데이타데이타

위의 코딩만으로 부족하다..테이블이 외곽선이 하나도 없고..
데이타라는 정보만 나타난다
엑셀에서도 테두리선을 서식하듯이 html도 서식명령을 해주어야 하는 것이다
아래와 같이 코딩을 하게 된다

<style> #myTable{ border:1px solid black; } #myTable td{ border:1px solid silver; font-family:맑은 고딕; } </style> <table id='myTable'> <tr> <td>데이타</td><td>데이타</td> <tr> <tr> <td>데이타</td><td>데이타</td> <tr> </table>



위와 같이 Style이라는 태그를 사용하여 서식을 하기 위한
코딩을 해준다
위와 같은 상태는 하드코딩이다
프로그래밍적으로 만들어진 것이 아니다
웹이 초창기때는 위와 같이 보여주고 싶은 페이지를 하드코딩하여야 했다
불편하다...뭔가 동적으로 정보가 바뀌게 해주고 싶어진 것이다
엑셀에 VBA가 생기듯이..
웹에서는 VBScript나 JavsScript가 만들어지게 된 것이다
위와 같은 테이블을 만들고 싶다면 아래와 같이 코딩한다

<style> #myTable{ //border:1px solid black; border-collapse:collapse; } #myTable td{ border:1px solid silver; font-family:맑은 고딕; padding:3px; font-weight:bold; font-size:12pt; } </style> <div id='container'>x</div> <script language="vbscript"> dim sHtm sHtm="<Table id='myTable'>" for iX= 1 to 5 sHtm=sHtm & "<tr>" for iY=1 to 20 sHtm=sHtm & "<td>" & int(rnd()*10)+1 & "</td>" next sHtm=sHtm & "</tr>" next sHtm=sHtm & "</table>" document.getElementById("container").innerHTML=sHtm </script>
x



위와 같이 자동으로 테이블을 만들면서 테이블의 각셀의
정보는 난수를 발생시켜서 넣어 주었다
위와 같이 웹페이지도 엑셀같이 웹페이지가 있고
서식을 하는 방법이 있고
프로그래밍하는 방법이 있는 것이고
개념은 같은 셈이다
엑셀은 더불어 계산엔진이라는 것을 달고 있다는 것이다

위에 이해하기 쉽게 VBScript로 작성을 하였는데..
VBA나 문법이 똑같다..
위의 HTML코딩에서 [script]라는 태그는 VBA 편집기의
모듈시트의 역할을 하는 구획인 셈이다
[script language='javascript']
[script language='vbscript']와 같이 사용하는 언어를 지정해주고
해당 언어로 작성하면 되는 것이다..
[script ]에 language속성을 지정하지 않으면 디폴트로
javascript로 사용하는 것으로 이해한다
순환하면서 HTML언어가 이해하는 문자열 정보를 줄줄이 만들어서
웹페이지의 어떤 개체의 innerHTML이라는 속성게 값을 쏙 넣어주는것이다

이렇게 동적으로 자동화를 시키면서
또 문제가 생기는 것이..데이타를 어디서 갖여다가 사용을 하여야 하는데..
뭔가 좋은 방법이 없을까..
여기에서 엑셀은 또 뛰어나다..
웬만한 데이타는 스스로 워크시트라는 창고에 갖고 있는 것이다
그러나 웹페이지는 어딘가에서 정보를 공급받아서
표현을 해주어야 하는데 어디서 정보를 갖여 올것인가.
물론 데이타베이스에서 갖여올수 있다
그러나 좀 작은 정보를 사용할때 마다 데이타베이스에서 갖여 오기도
뭣하고..
여기에서 엑셀또한 데이타베이스에서 정보를 갖여올수 있다
그러나 좀 작은 정보를 사용할때마다 데이타베이스를 귀찮게
할 필요가 없을때 엑셀은 그냥 워크시트를 활용하면 된다
그러나 웹페이지는 없다..
그래서 그런 욕구때문에 발생한 것이 XML 인것이다
만들어 놓고 편리하다보니 웹만이 아닌 이곳 저곳에서
활용할수 있는 생각들이 피어 나게 된 것이고..
그런 것이 발전의 과정인 것이다
엑셀입장에서 ..오호..엑셀통합문서가 다른 정보로 많이 찼는데
그럼 우리도 XML을 좀 쓰지..뭐...
이렇게 된 것이다
그래서 엑셀 자체에 List(목록)라는 것이 생겨 난다..
수동으로 XML화일을 불러들이기 위한 테이블개체를 만든 것이다
XML화일뿐만 아니라 데이타베이스의 테이블,쿼리등과 연결을
수동으로 하여도 훌륭한 소루선이 되는 파워가 있다
이것은 그냥 몇번 해보면 다 할수 있는 것이고..
VBA를 하는 입장에서는 그런 수동작업이 거추장스럽다
XML을 코딩없이 자동으로 불러 들여서 사용하자..
그래서 이 목록개체에 대하여 uno-xl-programming본문에서 몇번
설명을 하려고 노력하였으나..
스스로 별로 매력이 없다고 느껴서 그냥 완성하지 않은 상태에서
놓아 두어 버렸다
VBA를 한다면 별로 쓸데없는 일이라고 생각하여서 그냥 놓아두었다
아마도 많은분들이 의아하게 생각했을 것이다
왜 쓰다가 말았지???!!!
그냥 이렇게 VBA로 활용하는 방법으로 훨..좋으니까..
VBA의 파워를 잘 활용하는 셈이니까...
그래서 좀더 재미있게 이 페이지에서 계속 해 나갈것이니..
관심을 갖으시기 바란다

아무튼 위의 웹상에 구현한 것을 엑셀의 UserForm에
아래와 같이 구현해 보시기 바란다

xml화일은 위의 엑셀화일에 첨부된 것을 사용하시고..



다음 화일에서 위의 내용을 구현해 본다
작은 화일이지만
코딩테크닉에 필요한 내용이 많다
특히 UserForm의 각각의 콘트롤에 이름을 지을때 일관성있게
지어주면 아주 간단하게 정보를 넣고 빼고 할수있을 것이고
XML정보를 집합체에 배열이 될수있는 문자열로 재구성하여
보관하면 정보를 읽어내기가 훨씬 쉬워지고 간결해지고..
배열이 왜 프로그래밍이 핵심인지도 잘 이해하는데 도움이 될 것이고..
이렇게 XML화일에 담긴 정보는 어느곳에서나 활용하게
된다는 점..이 핵심이니..그런 개념으로 쌤플의 내용을 좀더
다른 모습으로..워크시트에 UserForm의 내용을 옮겨본다던지..
하시면 좋을 것이다


BrainTraining_068_5.