본문 바로가기

OS/Windows

Office 파일 버전관리 혹은 비교

SCM(CVS, SVN, git, hg..) 등은 텍스트 파일에 대한 버전 관리를 한다.

하지만 오피스 파일은 바이너리 화이라 SCM에 넣는다고 해도 diff를 사용하기가 어렵다. 또한 바이너리는 SCM 프로그램이 증분된 부분만 업데이트하기 어렵기 때문에 커밋을 할 때마다 용랑이 곱절이 되기 일 수 이다.

부가적인 설명을 하자면

abcd라는 내용이 기존에 커밋이 되어 있고

abcde라는 내용을 추가하면 SCM에는 +e에 대한 데이터만 추가적으로 저장하는 것이 보통이다.

따라서, abcd + abcde = 9의 크기(언제까지나 이것은 절대적인 값이 아니다)가 아닌 abcde+알파의 데이터의 저장비용이 드는 것이다.


용량문제야 그렇다고 해도, 어떤 부분이 변화되었는지 알 수 있는 것은 SCM이 제공하는 장점중에 하나이다.

접근을 바꾸어서 보면 바이너리 데이터로 저장이 되어도 diff를 해주는 도구가 이를 지원하면 되는 것이 아닌가?


나는 SVN의 경우 TortoiseSVN을 사용한다. (가끔 명령 프롬프트를 쓰기도 한다.)

Diff Viewer를 기본 제공하는 TortoiseMerge를 사용하지 않고 WinMerge를 사용한다.


이게 UI 반응 속도가 빠르고 색상도 맘에 들기 때문이다. 사실 탐색기를 통해 이용할 수 있는 윈도우 애플리케이션이기 때문이다.


인터넷을 찾다보니 xdocdiff라는 이름의 WinMerge 플러그인이 있었다.

이 플러그인이 지원하는 포맷은 MS 오피스 뿐만 아니라 rtx나 pdf 파일도 지원을 하고 있었다.

(설치방법은 해당 사이트에 가서 zip파일을 받아보면 readme 파일에 적혀있으니 패스)

참고로 이 플러그인은 xdoc2txe.exe라는 프로그램을 실행을 간편히 해주는 래퍼 프로그램이다.


엑셀 비교 - 아래와 같이 A2의 데이터를 b에서 d로 바꾸었다.


한가지 빠진 것이 있는데,

[플러그 인] 메뉴 > List... 에서 Enable plugins에 체크가 되어 있어야 된다.

안 되어 있으면 아래와 같이 보인다. (바이너리 데이터를 연구하는 사람으로서는 도움이 되기도 하겠지만, xlsx는 zip으로 압축되어 있는 xml 파일이다)


만약 이런 경우 언패커에서 '자동' 혹은 'amb_xdocdiffPlugin.dll'을 직접 선택한다. 여러개 플러그인을 사용할 수도 있으니 <자동>이 나을 것 같다.



만약 행이 여러개인 경우에는 아래와 같이 보인다.



워드 비교 - 아래와 같이 다르게 하였다.


아래와 같이 보여주었다.



마지막으로 비교관련 오픈소스 프로젝트를 정리해보았다.


Feature review: "Compare Excel (.xls) files"


Java - Apache POI 기반

https://github.com/na-ka-na/ExcelCompare (Excel & ODS 파일지원)

Simple-Excel - https://github.com/tobyweston/simple-excel



상용

닷넷 기반

GroupDocs.Comparison for .NET Library


4 TOPS Compare Spreadsheets using Microsoft Excel (69 $)

http://www.synkronizer.com/ 


Mac OS X

ARAXIS MERGE (심지어 이미지 비교까지 된다)