PROGRAMMING WORKSHOP

CustomUI...[Ribbon]_01

2007버전을 깔아만 놓고 별로 열어 보려고 하지 않다가
질문하시는 분들의 화일이 차차..2007버전으로 하기 시작한다
그렇다면 2007버전을 시작해야지..
앞으로 프로그래밍워크샵에서는 주로 2007버전으로 다루기로 한다

우선 2007버전을 탁 열면 그동안 사용하였던 인터페이스에
익숙했던 사용자들은
@#$#$뭐야..뭐가 이래??!!!
라고 할만 한 변화가 있고
그중에서 가장 큰 변화는 메뉴의 모양새다
전혀 그동안의 컨셉과는 틀린 엉뚱..쌩뚱하다..
그래서 그냥 닫아버리고 만다

대개 2003버전을 사용하는 상태에서 버전업없이
별도로 2007을 세팅시키고 사용하고 있을것이고
당분간은 2가지 버전을 같이 사용하는 것이 좋을 것이다

더구나 개발자들의 입장에서 보면 약이 오른다
이전 버전에서 메뉴를 다루는 코딩을 이제 겨우
감이 잡혀 가는데..아니 왠 전혀 쌩뚱한 것들을 널어 놓았으니
개발자들을 곤혹스럽게 만든다..
개발자들이 열을 받는다
세계의 많은 개발자들에게 비난을 엄청 먹던 메뉴시스템이였다

그런데 가만히 살펴보면 무척이나 고민하면서 만든 작품이다
많은 연구와 사용자들과의 인터뷰(Research ,feed back and Interview)
등을 통하여 최적의 시스템을 만들어 보려고 한 것일 것이다
그들이 설정한 메뉴시스템의
User Interface를 디자인한 철학(UI Design Philosophy)을
요약하면..

  • •Focus..눈을 끌고
  • •Context..시각적으로 의미있는 내용을 담고
  • •Efficiency..효율적이고
  • •Consistency..일관성을 유지하고
  • •Permanence..성능이 좋고
  • •Predictability..예측할수 있고

이지만 ...첨 볼때는
전혀 눈에 들어오지 않고
시각적으로 전혀 감이 안오고
전혀 효율적인것 같아 보이지 않고 화면만 꽉찬 진열장같고
전혀 일관성이 없이 들쑥날쑥해 보이고
성능??!!!뭔 성능??!!개나발이네..!@#라는 소리가 절로 나오고
예측..이것을 누르면 뭐가 될지 예측이 전혀 안되어 보이지만
조금씩 눈에 익기 시작하면..
말이 되기 시작한다
으흠...생각을 많이 했군!!!이라는 소리가 결과적으로 나오고..
슬슬 사용자에게 매력을 이루어가게 된다
아무튼 2007버전이 낯섫고 닥아가기 껄끄러웠던 이유는
New-UI-System(User Interface System,메뉴시스템)때문이였다

실은 엑셀의 이전버전에 접하지 않았던 새로운 엑셀사용자들의
입장에서 볼때는 하나도 껄끄러울것이 없다
히야..좋다..메뉴가 한눈에 다 보이네..
관련된것 끼리 직관적으로 어떤 작업을 수행하는것인지 알수있게
잘 되어있네..
라고 충분히 할수 있는 것일것이다
단지 기존 시스템에 익숙해져있던 사용자들에게 습관을
바꾸게 하려니 마찰이 있는 것이다

Unlearn what you have learned
배운것을 잊어먹어라!!!
기존의 시스템에 억메이는 분들에게 이런 말이 필요할것 같다

그러니..
개발자들입장에서 비난만 하고 있다면 흐름에 역행하는 것이고
변화에 같이 동참하여야 할 것이다
많은 초보유저들이 사용을 하기 시작한다는 점!!!

그래서..이쯤하여
프로그래밍 워크샵에서
이눔의 Custom UI..사용자정의 메뉴를 살펴보기로 하고
2007버전의 다른 변화된 내용들을 살펴나가서 프로그래밍하는데
좀더 화려한 기능을 만끽하도록 하여야 할것 같다
분명 그들이 Custom을 붙였으니 사용자가 맞춤형태로 스스로
구성할수 있다는 소린데..
참..이 불규칙해보이고 껄끄러운 녀석들을 어떻게 사용자입맛에
맞추지????
알고 나면 기존의 메뉴시스템보다 환상적이다..really fantastic!!

Ribbon설계만 다룬 책들이 있을 정도이니
내용이 얼마나 방대한지 알수 있다
* Customizing the Office 2007 Ribbon
* RibbonX For Dummies

기본적인 원리만 알면 나머지 응용은 각자의 몫!!!

메뉴를 리본이라고 하였고
리본을 정의하는 코드를 XML문으로 작성하였으니
Ribbon+XML하여 RibbonX라고 이름을 붙이게 된다
혹은 Ribbon Extensibility(리본의 확장)의 의미에서 RibbonX라고 할수 있겠다
그렇다면 2007메뉴시스템(Ribbon)을 알려면
우선 XML을 알아야 한다!!라고 하면 겁부터 나려나??!!
XML은 알 만큼만 알면 된다
세상에 전부 아는 것은 없다
[알만큼 알고 응용하고 필요하면 참고정보를 찾아보면 된다]
거부반응일으키지마시고..

그렇다면 Ribbon을 재구성하려면 XML문을 작성하여야하고
그렇다면 이 XML문으로 된 화일을 어디엔가 저장하여야 할것이 아닌가??
어디에 저장할까??Where does ribbonX go??

File Formats[화일의 구조]

우선 2007화일 구조의 이해가 필요하다
2003까지는 엑셀화일은 바이나리(Binary)화일이였다
엑셀이라는 것을 통하지 않고 열면..전혀 알수 없는 문자들이였으나
2007버전은 텍스트문서라고 해도 과언이 아닌 XML문의 집합이다
이렇게 해보시기 바란다
2007버전을 열고 아무내용이나 띡띡입력하고 저장한다
확장자명은 xlsx라는 확장자가 붙는다
이번에는 2007버전을 열고 VBA모듈을 열고 변수라도 하나 작성하고
저장하려고 하면 메시지박스가 뜨고 난리다..
그냥 저장하면 VBA가 날라가요!!!그러니..어쩌구 메시지가 뜬다
하라는대로 하고 화일타입을 선택하고(xlsm)저장하면
확장자가 xlsm이라는 것으로 저장되고 아이콘도 모양이 살짝틀리다
물론 그냥 저장할때 xlsm으로 저장하는 습관은 개발자들에게 좋을것이다
나머지..
추가기능화일(add-in)은 xlam 이라는 확장자
양식화일(template)은 xltx 라는 확장자
양식화일도 VBA가 들어있다면 xltm 이라는 확장자
또한 XML 형식이 아닌 이전의 바이나리형식으로 저장하고 싶다면
xlsb 라는 확장자 물론 VBA코드가 포함되거나 아니거나 마찬가지다
이전 버전형식인 텍스트형식이 아닌 바이너리로 저장되고
물론 이것은 zip화일로 해보았자..XML문을 볼수없는 것
참..골치아프네??!!하시려나..개발자라면 이정도는 즐길줄 알아야..!!

화일들도 확장자가 틀리다는 것을 아시고
그냥 xlsm 확장자(VBA포함된 화일)을 대상으로 이야기 해본다
VBA작성없이도 저장할때 화일 타입을 xlsm을 선택하여 저장하는
습관을 갖는것이 좋을것이고..
그런데 뭐가 xml문서라는 거야??!!!
그냥 엑셀화일아니야???!!!
workshopTest.xlsm
이라고 이름으로 저장된 화일의 아이콘을 선택하고
오른쪽마우스를 크릭하여 이름바꾸기를 하고
이름바꾸기에 나타난 이름에서 확장자 부분...
xlsm을 지우고 zip 이라는 확장자로 바꿔보시기 바란다



이것의 의미는 2007버전은 화일을 zip화일로 압축하는 기술이
적용되어 있는 것이다
xlsm이라는 확장자가 붙어있다 하더라도 이미 여러개의 화일이 압축이 되어있는 상태인 것이다
그것을 확인하기 위하여 위에서 만든 zip확장자의 화일을
ZIP으로 열어보면..열리는 것이다



위의 그림과 같이 xml화일이 잔뜩 만들어져있음을 알 것이다
엑셀화일이 이전의 엑셀화일이 아님을 알수 있다
VBA코드만 바이너리화일로 저장되어있음을 알수 있다
물론 코드가 없는 화일 xlsx로 저장하면 이 화일은 만들어지지 않는것이고
xlsx와 xlsm이 틀린점은 이 VBA코드화일이 있냐 없냐의 차이인것이다
그런데 우리가 이것을 크게 신경쓸 필요는 없다..
단지 RibbonX코드가 어디에 저장될것인가만 알면 된다

이렇게 만든 이유는 XML문이 만국공통의 언어화되어있으니
엑셀없이도 XML문..즉 텍스트문으로 다른 곳에서 불러서
사용할수 있게 확장성을 키워 놓은 상태라는 것 뿐..
우리가 신경쓸일은 아니다
그냥 2007엑셀화일은 단독화일이 아닌 여러개의 xml화일로 구성되어있는 Package file이라고 알아두시고



그런데..메뉴의 모양을 입맛대로 만들기 위하여서는
XML문을 조금은 이해하는 것이 좋을 것이고
이곳에서 메뉴... Ribbon이라는 이름으로 불려지고 있으니
앞으로는 메뉴라는 것 대신에 Ribbon으로 부르도록 하자



리본디자인을 위하여 XML문을 잘 활용하고 있다..
위에서 확장자를 zip으로 만든것을 압축해제하시고
그 내부에 customUI라는 폴더를 하나 만들어 넣어 보시기 바란다



Creating customUI.xml File

그리고 텍스트문서편집기를 열고 아래와 같은 xml문을
입력하고 ..아래의 내용을 복사하여 붙여넣고..

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="true"> </ribbon> </customUI>

그리고 이 내용을 customUI.xml이라는 화일로 저장한다
이렇게 한 작업을 xml문서로 RibbonX코드를 저장하였다는 것이 된다
[위에서 만든 cusomUI폴더]내에 저장하는 것이다
이렇게 완료된 상태에서 zip화일을 2007버전을 열어놓은 상태에서
화일열기로 불러들이면 메시지가 뜨지만



무시하고 열면 여는 순간 엑셀이 화일을 분석해 보니..
자기 화일임을 알고 열리게 된다
즉 zip화일이라도 엑셀화일임을 인식하는 것이다
그렇지만 정상적으로 한다면 zip확장자를 다시 xlsm으로 바꾸고
여는 것이 좋을것이다

아무튼 열었는데 아무일이 벌어지지 않는다..
Ribbon이 어떻게 변할줄 알았는데 안변했다..
그런데 아무일도 벌어지지 않는다..
이거 완전히 개발자 엿먹이는 수작아닌가??!!
그래서 다시 압축화일로 바꿔서 열어 폴더를 하나..하나 따져 본다
폴더이름이 수상쩍은 녀석이 하나 있다



직관적으로 느낌이 오는 것이 아하!!
위에서 만든 customUI/customUI.xml 화일을 이곳에 등록을
시켜야 하지 않겠는가????
그런데 코드를 알아야지???
인터넷에 아래와 같은 키워드를 때린다
Relationship of customUI
간단하게 하나 얻는다

<Relationship Id="someID" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml" /> 그런데 ID값이 수상쩍다..someID라고 하였으니
ID는 알아서 넣으라는 소리다
위의 ID를 그냥 사용하자
숫자만 입력하여 보았더니..에러가 난다고 하면서
스스로 복구하고 ID를 숫자와 문자가 섞인 것으로 스스로
만들어 놓는것을 발견할수 있다
아무튼..
그냥 압축화일내의 .rels.xml화일을 복사하여 옮긴후
텍스트편집기로 열고 위의 내용을 다른 Relationship이 있는 곳에
붙여 넣는다



이제 닫고 확장자를 xlsm으로 바꾸고
2007버전에서 열어 본다



성공했다..
Ribbon이 몽땅 날라가고 없다..
왜 몽땅 날라갔냐구??
위의 customUI.xml 문 즉 RibbonX코드에서 그렇게 하라고 시킨것이다

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="true"> </ribbon> </customUI>

Ribbon Tag의 startFromScratch속성값을 True로 주면
기존의 리본을 모두 지우고 새로 시작한다는 속성인것이다
start From Scratch..처음 부터 다시한다는 숙어이다
이 속성을 False로 주면 기존의 Ribbon은 모두 나타난다
이제 부터 여러분 마음대로 Ribbon을 구성할수 있다는 소리다
customUI.xml 문서에 몇가지 약속된 말들을 사용하면 된다

위의 Ribbon의 재구성은 화일단위로 이루어지는 것이니..
다른 화일에는 하나도 영향을 미치지 않으니 참 편리하다
이전 버전은 다른 화일에도 영향을 주어서 제어하기가
참 불편했다고 할수 있다

Editing customUI.xml File

이제 Ribbon을 바꾸고 싶으면 customUI.xlm화일만 텍스트편집기로
열고 편집하면 된다
아래의 xml문(RibbonX 코드)를 zip화일로 열고
customUI.xml화일의 내용을 지우고 붙여 넣어 보시고
다시 열어보시기 바란다

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="true"> <tabs> <tab id="CustomTab" label="MyFirstTab"> <group id="NewCompany" label="NewCompany Group"> <button id="btnOne" label="Insert Company Name" size="large" onAction="InsertCompanyName" imageMso="CreateForm" /> <button id="btnTwo" label="Insert Company Address" size="large" onAction="InsertCompanyAddress" imageMso="AddressBook" /> </group > </tab> </tabs> </ribbon> </customUI>

위와 같이 편집한후 zip화일을 다시 xlsm으로 바꾼후
열어 보면 아래와 같이 최초로 Ribbon이 만들어 졌다



버튼을 크릭하면 에러메시지가 뜬다
물론 onAction="프로시져명"의 프로시져를 작성하지 않아서 그렇지!!!
또한 RibbonX코드에 한글을 넣으면 실행이 되지 않을것이다
XML문 자체를 열어보면 에러가 나는 것을 볼수 있다
왜그럴까???
XML문의 작성규칙에서 어긋난 부분이 있어서 그렇다
다음 페이지에서 다루도록하고..

화일을 작성하고
zip화일로 변환하고
zip화일에 customUI폴더를 만들고
customUI폴더내에 xml문을 작성하고
다시 xlsm으로 변환하고
참 번거롭기 그지 없다

불편하면 만들어 내는 것이 사람인지라..
RibbonX Editor 같은 키워드로 웹을 뒤지면
다양한 편집기가 나온다
그중의 하나가 아래와 같다
다운로드 받으시고 다음 페이지를 기다리자..
한결 편리함을 느끼게 된다
zip화일을 열고 닫고 그딴것 할필요가 없게된다
Office 2007 Custom UI Editor,공짜니까 다운받으시고..

위의 절차를 간소화하고
그냥 RibbonX 코드에만 신경을 쓰면 되게 된다
실은 위의 편집기는 외국것이라서 한글관계에서 처리가 안되는 부분이있어서
번거로움이 한가지 있기는 있으니..

한글 문제가 없는 적절한 편집기를 더 검색하여
마땅한것이 있으면 연결할것이다

위의 작업을 순서대로 했는데 뭔가 안된다면
.Net FrameWork 2.0 이상이 시스템에 설치되었는지
확인하시기 바란다
이것도 무료 제공되는 것이니 다운 받아서
설치하시면 된다

아래의 화일에서 몇가지 더 해보고
다음 페이지에서 또 확장해 나가본다






***[LOG-IN]***