워드 파일에서 전체 텍스트의 내용을 특정 페이지 단위로 텍스트 파일에 저장해주는 매크로입니다.
워드 파일일 전체를 텍스트로 변환해 주는 프로그램은 많지만, 페이지 단위로 깔끔하게 나눠주는 프로그램이 없어서 W. Polmann(www.ecm-e.de) 이란 분이 작성한 doc_splitter() 매크로를 참조하여 작성해 봤습니다.
이 분의 코드가 독일어(?)로 되어있고, 워드에서 복사/붙여넣기를 통해 분할된 doc파일을 생성하다 보니 속도가 너무 느려서 FileSystemObject를 이용해서 바로 텍스트 파일에 저장되게 하였습니다.
이미지를 포함해 워드를 분할하실 분은 W. Polmann씨의 매크로와 좀 수정하시는게 빠를 것 같습니다.
필요하신 분이 과연 있을지는 모르겠지만 오랫만에 포스팅합니다. ^_^;
Sub Doc2Text_Splitter()
Dim origDoc, splitFileName
Dim Message, dlgTitle, dlgDefault
Dim curPage, pageCount, pageSize
Dim FSO, FileObject
origDoc = ActiveDocument.Name
Message = "몇 페이지씩 자를까?"
dlgTitle = "Doc Splitter"
dlgDefault = "2"
pageSize = InputBox(Message, dlgTitle, dlgDefault)
pageCount = ActiveDocument.ActiveWindow.Panes(1).Pages.Count
Set FSO = CreateObject("Scripting.FileSystemObject")
'// 문서의 처음으로 돌아감
Selection.HomeKey Unit:=wdStory
For curPage = 1 To pageCount Step pageSize
'// 문서명_xxxx.txt 형식의 파일로 저장
splitFileName = Left(origDoc, Len(origDoc) - 4) & "_" & Right("000" & curPage - 1, 4) & ".txt"
Dim Message, dlgTitle, dlgDefault
Dim curPage, pageCount, pageSize
Dim FSO, FileObject
origDoc = ActiveDocument.Name
Message = "몇 페이지씩 자를까?"
dlgTitle = "Doc Splitter"
dlgDefault = "2"
pageSize = InputBox(Message, dlgTitle, dlgDefault)
pageCount = ActiveDocument.ActiveWindow.Panes(1).Pages.Count
Set FSO = CreateObject("Scripting.FileSystemObject")
'// 문서의 처음으로 돌아감
Selection.HomeKey Unit:=wdStory
For curPage = 1 To pageCount Step pageSize
'// 문서명_xxxx.txt 형식의 파일로 저장
splitFileName = Left(origDoc, Len(origDoc) - 4) & "_" & Right("000" & curPage - 1, 4) & ".txt"
'// 자르기를 시작할 페이지로 이동
Selection.GoTo What:=wdGoToPage, Name:=curPage
startPosition = Selection.Start
'// 페이지의 마지막 위치로 이동해서 커서 위치를 확인
Selection.GoTo What:=wdGoToPage, which:=wdGoToNext, Name:=(curPage + pageSize)
Selection.MoveRight Unit:=wdCharacter, Count:=1
endPosition = Selection.End
Selection.GoTo What:=wdGoToPage, Name:=curPage
startPosition = Selection.Start
'// 페이지의 마지막 위치로 이동해서 커서 위치를 확인
Selection.GoTo What:=wdGoToPage, which:=wdGoToNext, Name:=(curPage + pageSize)
Selection.MoveRight Unit:=wdCharacter, Count:=1
endPosition = Selection.End
'// 복사할 위치값 체크
If startPosition < endPosition Then
'// 선택영역을 반전
ActiveDocument.Range(startPosition, endPosition - 1).Select
'// 파일을 생성하고 저장
Set FileObject = FSO.CreateTextFile(ActiveDocument.Path & "\" & splitFileName, True, True)
'FileObject.WriteLine (Selection.FormattedText.Text)
FileObject.WriteLine (Selection.Text)
FileObject.Close
Set FileObject = Nothing
End If
If startPosition < endPosition Then
'// 선택영역을 반전
ActiveDocument.Range(startPosition, endPosition - 1).Select
'// 파일을 생성하고 저장
Set FileObject = FSO.CreateTextFile(ActiveDocument.Path & "\" & splitFileName, True, True)
'FileObject.WriteLine (Selection.FormattedText.Text)
FileObject.WriteLine (Selection.Text)
FileObject.Close
Set FileObject = Nothing
End If
Next curPage
Set FSO = Nothing
End Sub
'Development' 카테고리의 다른 글
Windows 2008 R2 (IIS 7.5) 기반에서 Url Routing 사용하기 (0) | 2010.06.09 |
---|---|
Prototype에서 Ajax를 이용한 동적HTML (0) | 2006.12.11 |
웹페이지 레이아웃 구성시 반드시 지킬 것들.. (0) | 2006.10.20 |
Excel 서버객체 이용하기 (0) | 2006.09.12 |
에디트 플러스 - Key매크로 (2) | 2006.09.12 |