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

Excel & VBA---Brain Training


XML화일 엑셀로 읽어들이기

Silverlight이야기를 슬슬 시작하려고 한다
Silverlight를 우선 잘 이해하려면 XML문을 이해하는 것 부터
시작이 된다
왜냐면 Silverlight를 구성하는 언어는 XAML이라는
XML의 형식의 문서를 중심으로 이루어지는 것이니까..
그동안 짬짬이 이야기를 했었으나
왜 XML문이 필요한지 감이 잘오지않은 분들이 많었을 것이다
그러나 엑셀에서 한단계 더나가던가
엑셀을 좀더 적극적 확장적으로 활용하기 위하여서는
XML문을 엑셀같이 활용할수 있게 될 것이다

아래와 같이 XML문서가 있다
외국예제를 복사하여 옮겨 놓은 것이다
이것을 텍스트문서에 복사하여 XML확장자로 저장한후
엑셀의 테이블로 불러들이는 문제..

풀지는 못하더라도 문제의식을 갖고 딜다 보시면 된다
그래야 해설화일이 올라오더라도 더 빨리, 깊이 이해하게 되니까!!

<?xml version="1.0"?> <notes> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> <note> <to>Tom</to> <from>Jani</from> <heading>work</heading> <body>about next week meeting</body> </note> <note> <to>Jim</to> <from>Jani</from> <heading>private</heading> <body>asking to go hiking weekend</body> </note> </notes>

위와 같은 xml화일을 웹페이지에서 읽어서 처리한다면
아래와 같이 되는 것이고..
엑셀로 처리하면 엑셀테이블형식이 될 수 있을 것이고
워드에 불러 들이면 워드의 표현형식으로 만들수도 있는 것이고
모바일폰에 불러들이면 나름대로 디자인한 형식대로 표현할수있게 되는 것이다
주고 받는 데이타의 표준이라고 보시면 되는 것이다
뭔소린지 이해를 못하더라도 이 코너를 마칠때가 되면
몇단계 업그레이드 될것이고 많은 다른 것들이 낯섫지 않게 받아들이게
될 것이다



	    
		Tove    
		Jani    
		Reminder    
		Don't forget me this weekend!
	 
	    
		Tom    
		Jani    
		work    
		about next week meeting
	 
	    
		Jim    
		Jani    
		private    
		asking to go hiking weekend
	 

현대의 정보는 데이타베이스와 더불어 데이타베이스에서
만들어지거나 엑셀에서 만들어지거나
핸드폰에서 만들어지거나
모두 공통의 데이타를 주고 받는 언어는 XML이라고 보시면 된다
그러니 이해하고 활용하는 것은 새로운 도전거리이고
알아야 할 것이다

XML에서 중요한 말은 ML이다 이것은 MarkUp Language
라고 하고 Mark up 즉 어떤 표시를 하여 결과를 얻어낸다는 의미다

예를 들어서 위의 XML문을 텍스트문서로 복사하여 옮기고

처음과 마지막을

<Pre>..위의 내용...</Pre>라고 한후 확장자를 htm으로 하여 저장하고 열어보시고.. 또 두번째는 <xmp>..위의 내용...<xmp>

라고 입력하고 같은 요령으로 htm확장자로 저장하고
열어 보시기 바란다..
결과가 다르게 나타날것이다

위에서 표시한 것을 모두 TAG라고 한다
어떤 표시를 결과물로 나타내고 싶은 문자열의 앞뒤에 붙이면
시스템에서 이것을 알아서 해석하여 표현을 해주는 것이다
그냥 어떤 표시만 해주면 규칙대로 정해진 결과물을 웹페이지로
나타나게 하는 것이다
그런 규칙을 만들어 놓은 것이 Markup Language인 것이다

물론 위의 내용을 엑셀화일을 열어 놓고
화일열기를 하면 목록으로 열기 대화상자가 나타나고
엑셀시트에 목록으로 불러들인다..



이것도 엑셀자체가 XML문 Tag를 해석하는 기능이 들어있어서
자체적으로 해석하여 시트상에 뿌려주는 것이고
위의 htm은 웹브라우져가 자체적으로 갖고 있는 기능이 들어 있어서
나름대로의 버전으로 해석하여 표현하는 것이다
데이타는 하나의 XML이라는 형식으로 보관되면
각각 불러 들이는 프로그램에서 해석하여 자신의 것에 맞게 표현하게
되는 셈이다
이렇게 어떤 곳,어떤 타입의 프로그램에서 불러들여도 사용할수 있는
데이타화일로서의 역할을 할수 있게 한것이 XML화일의 목적인 것이다
물론 위의 문제는 VBA로 불러 들여 보는 문제인것이지..
메뉴로 불러 들이자는 것은 아니니..
VBA로 풀어 보시는 연습을 하시도록

이것은 좀 힌트를 드리고 하여야 할 것 같다
우선 XML문 같은 것을 해석하는 라이브러리가 하는 일을
Parsing한다고 한다..문자열을 분석하여 원하는 문자만 잡아내는 일을
Parsing이라고 하고 XML문을 해석하는 외부라이브러리를 참조한다



위와 같이 VBA편집기의 참조를 버전..아무것이나 선택해도 괞찮다
버전이 업그레이드 되면서 다양한 Parsing기능과 하는일이 추가 되지만
이 문제와 같이 문서를 불러서 Parsing하는 정도는 아무 버전에나
있는 기본적 기능이니까..
맨위에서 엑셀에서 메뉴를 사용하여 불러들이는 것도 결국은
이 Parsing 라이브러리중 하나를 사용하는 것이니
개발자들도 이런 라이브러중
아무 버전의 것이나 참조한후..
위의 XML문서를 test.xml이라는 이름으로 아래의 코드를 실행시키는
프로시져가 있는 통합문서와 같은 폴더에 넣고

Sub Test() Dim oXML As New DOMDocument Dim bLoadOK As Boolean oXML.Load bLoadOK = oXML.Load(ThisWorkbook.Path & "\test.xml") If bLoadOK Then MsgBox oXML.xml End If End Sub

이라고 해 보시기 바란다
위에 문자열로 저장한 내용이 그대로 나타나는 것은
불러 들인 것이다
이것을 여러분들이 스스로 Parsing하여 엑셀의 테이블에
넣는다고 생각을 해보시기 바란다
아마도 개체지향적 사고를 잘 키우고 계신분들은
이렇게 저렇게 oXML의 메소드나 속성을 찾아서
뚝딱거려 보실것이고..
혹은 문자열로 받아서 순전히 문자열함수로 토막을 치고..
따져서 만들수도 있을 것이다
실은 위의 화일을 불러 들이는 것도 VBA에서 제공하는
IO 함수를 사용하여 불러들여서 처리를 할 수도 있다
그러나..이런 일을 하기 위한 목적으로 만들어 놓은 라이브러리를
참조하여 활용하는 것이 효율적일 것이다



BrainTraining_068.



XML과 엑셀 2007-OpenXML

XML이 도대체 뭔가??
웹페이지는 HTML문으로 구성이 되어 있다
이것도 하나의 프로그래밍언어이다
H--Hyper T--Text--M--Markup--L--Language 이다
XML과 마찬가지로 이것도 Mark-Up-Language인것이다
어떤 표시를 할테니..나를 이해하는 프로그램은 알아서 표현하라!!
MS의 익스프로어같은 웹브라우져들이 XML도 해석할줄 알고
HTML도 해석할줄 아는 것이다
이렇게 모든 프로그램들이 MarkUp Languaqge를 알아서 해석하는
기능들을 갖추게 되고 데이타를 전송하고 싶으면 그냥
XML로 전송하면 알아서 해석하여 표현하게 되는 것이다
XML문을 이해못하는 프로그램은 아마도 이제는 없을 것이다

XML is the most common tool for
data transmissions between all sorts of applications
XML문은 모든 종류의 프로그램사이에 정보를 주고 받는 가장
일반적인 도구이다
실버라이트..윈도우폰등등 모두 xml형식의 문을 이해하고 처리하게 되고
엑셀자체도 2007버전이후부터는 xml문으로 데이타가 구성이 된다
2007버전엑셀화일의 확장자 뒤에 .zip을 하고 열어 보시면
엑셀의 모든 정보가 xml문으로 저장이 되어 있음을 알수 있다
엑셀화일 확장자끝에 b라고 표현된 것은 binary의 약자로서
이것은 .zip확장자를 붙이면 데이타부분은 모두 bin확장자가 되어
이것은 xml화일포멧이 아닌 바이나리포멧으로 저장되는 것

그래서 2007버전이후에는 실은 엑셀화일을 열지 않고도
다른 엑셀화일의 정보를 읽어오기도 하고 수정도 할수 있게 되는 것이다
물론 오피스만의 특정한 xml TAG를 이해하는 도구를 준비하고
그러니 XML에 대한 감각을 익히고
2007버전의 화일을 열지 않고 프로그래밍적으로 편집을 할수도 있는 것이다

Office Open XML (also informally known as OOXML or OpenXML) is a zipped,
XML-based file format developed by Microsoft
for representing spreadsheets, charts, presentations and
word processing documents.
오피스 공개 XML(비공식적으로 OOXML 혹은 OpenXML로 알려진)은
Zipped(zip확장자로 압축된) MS에 의하여 개발된
스프레드시트,챠트(엑셀), 프레젠테이션(PPT) 워드화일의
XML베이스의 화일포멧이다

2007에서 2010으로 버전업되는 과정에서 이부분을 발전시켜나가는 것이다

2007화일의 XML로 저장된 내용을 편집하기 위한 대강의 그림을
아래의 링크페이지에서 관찰하여 보시면 엑셀,오피스에서의 XML의 위치를 좀더
감을 잡을수 있을 것이다
Editing Data in an Excel 2007 Open XML File with VBA
VBA로 2007엑셀화일의 XML내용의 데이타를 편집하기


MS기술쎈터의 영문이지만 대강 그림만 보아도 감을 잡을수 있을 것이다
척척 읽어 낸다면 더더욱 좋고..!!
그래서 영어하시라고 계속 떠드는 것이니..영어에도 관심갖으시면
더욱 바람직한 발전이시고..

또한 OpenXML을 다루는 것은 실무에서 그렇게 절실한 내용은 아닐 것이다
그냥 2007버전이후의 발전방향이 그렇다는 정도만 아시는 것이
부담이 적을 것이다
실은 OpenXML은 VSTO와 더불어 VB.net측면에서 엑셀을 다룰때
엑셀이 없는 사람이 엑셀의 정보를 읽거나 쓰고 싶을때..
필요한 컨셉이 되는 것이지만..이것 또한 당장은 그렇게
절실하지 않다..아마도 특별한 소루션을 만드는 일이 아니라면
별로 필요하지 않은 것들이라고 보아도 좋을것이다
그래도 이 부분이 궁금하고 강화하고 공부하시고 싶다면
Office OpenXML SDK(software deveoplopment kit)를 다운받아서
학습을 하시면 좋으실 것이다
(참!! 위의 SDK의 내용은 .Net FrameWork의 라이브러리를
활용하는 것들이니..VSTO환경의 분들만 필요한 내용들이다)
xml포멧의 엑셀이나 워드, 파워포인트의 xml형식에 쉽게 접근할수 있는
라이브러리와 개체에 대한 설명들이 있을 것이니..
아무튼..
MS의 꿈과 이상은 크지만..별로 절실한 욕구가 일어나지 않는다
오히려..그냥 엑셀화일의 XML화일 버전을 읽고 쓰기 보다는
다른 Application에서 발생되는 XML화일을 VBA로 엑셀에서
활용하는 것이 유용할 것이다
또한 VBA로 엑셀의 정보만 XML화일로 보내고 받는 것이
융통성이 있고 좋다