(pywin32)에서 Word 작업하기 [4] - 문자열 입력/검색/삭제

개요



새 문서에 Range 객체로 문자열을 입력/취득/삭제합니다.
다음 번은 「저장」또는 「Sentences/Paragraphs/Words/Charactors를 사용한 무엇인가」로 합니다.

이번에 이용하는 Word 오브젝트





전회까지 소개한 메소드/프로퍼티는 생략.


객체 이름
속성/메소드
설명
링크


문서
-
문서의 한 문서
msdn

Range()
Range 객체를 생성하는 메서드
msdn

콘텐츠
문서 전체를 나타내는 Range 객체
msdn

Range
-
인접한 영역을 나타내는 객체
msdn

시작
Range의 시작 문자 위치를 설정 또는 취득
msdn


Range의 끝 문자 위치를 설정 또는 취득
msdn

텍스트
Range의 텍스트를 설정 또는 취득
msdn

Delete()
Range 텍스트 삭제
msdn


문자를 입력/취득하는 경우 Range를 이용합니다.
※Range와 매우 닮은 선택 도 있습니다. 별도 설명 예정.

지금까지의 모델에서는 단순화를 위해 「쇼트 컷적 관련」은 생략하고 있습니다만, 실은 「Document와 Range의 사이」에도 관련이 있습니다.



코드



qtconsole의 확인 결과를 나타내겠지만, 전회와 같이 템플리적인 처리는 생략합니다.
↓의 「★어떤 것의 처리★」 부분에 기술하고 있는 이미지로 읽어 주세요.
import win32com.client

#Wordを起動する : Applicationオブジェクトを生成する
Application=win32com.client.Dispatch("Word.Application")

#Wordを画面表示する : VisibleプロパティをTrueにする
Application.Visible=True

#新規ドキュメントを作成する : Documents.Add()する。
doc=Application.Documents.Add()


なんらかの処理


#Wordを終了する : Quitメソッドを呼ぶ
Application.Quit()

문자열 입력/취득



「아이 우에오」라고 키보드로 손 입력해, 아래 그림의 파일을 작성해, 이것을 Range로 조사해 보겠습니다.



Range(0,1) 가 어떤 영역을 나타내는지 텍스트를 취득해 조사해 보겠습니다.
In [194]: doc.Range(0,1).Text
Out[194]: 'あ'

「아」를 포함한 영역이었습니다.
Range(2,4)도 살펴보겠습니다.
doc.Range(2,4).Text
Out[195]: 'うえ' Range(2,3)

「우」와 「에」를 포함한 영역이었습니다.

Range(1,1) 라고 하는 폭 제로가 무엇을 나타내는지, "!"를 넣어 조사해 보겠습니다.
In [199]: doc.Range(1,1).Text="!"

In [201]: doc.Range(0,3).Text
Out[201]: 'あ!い'

「아」와 「이」의 사이에 끼워졌습니다.
Range(x,x) 는 문자와 문자의 경계를 나타내는 폭 제로의 영역과 같습니다.

"!"의 입력 전의 상태는, 도적으로 나타내면...



이었던 것 같습니다.

Range.Delete()를 사용하여 "!"를 삭제해 봅니다.
# "!"が入力されていることを確認
In [201]: doc.Range(0,3).Text
Out[201]: 'あ!い'

# "!"の位置を確認。
In [211]: doc.Range(1,2).Text
Out[211]: '!' # Range(1,2)

# "!"を削除 : Range(1,2).Delete()を実施。
In [212]: doc.Range(1,2).Delete()
Out[212]: 1

In [214]: doc.Range(0,3).Text
Out[214]: 'あいう' # "!"が削除できた。


Document.Content를 사용하여 전체 문서의 텍스트를 가져옵니다.
In [215]: doc.Content.Text
Out[215]: 'あいうえお\r'

마지막 CR(\r)을 포함하여 문서 전체와 같습니다.

Content 속성은 "문서 전체를 나타내는 Range 객체"이므로 Range() 메서드와 Start, End를 사용하여 Content와 등가인 Range 객체를 만들어 봅니다.
In [215]: doc.Content.Text
Out[215]: 'あいうえお\r'

In [216]: doc.Content.Start
Out[216]: 0

In [217]: doc.Content.End
Out[217]: 6

In [219]: doc.Range(doc.Content.Start,doc.Content.End).Text
Out[219]: 'あいうえお\r'

doc.Content 와 Range(Content.Start,Content.End) 가 등가인 것을 알았습니다.

마지막으로 손으로 입력한 모든 항목을 삭제해 봅니다. 앞에서와 같이 Content 속성은 "문서 전체를 나타내는 Range 객체"이므로 이 Range 객체의 Delete()를 호출해 봅니다.
In [220]: doc.Content.Text
Out[220]: 'あいうえお\r'

In [221]: doc.Content.Delete()
Out[221]: 1

In [222]: doc.Content.Text
Out[222]: '\r'

전체 문서를 삭제할 수 있습니다.

관련



Python(pywin32)에서 Word 작업하기 [1] - Word 객체 모델
Python(pywin32)에서 Word 작업하기 [2] - Word 시작/종료
Python(pywin32)에서 Word 작업하기 [3] - 새 문서 만들기
Python(pywin32)에서 Word 작업하기 [4] - 문자열 입력/취득/삭제
파이썬 (pywin32)에서 Word 작업하기 [5] - 문서를 파일에 저장, Word 옵션 변경
Python(pywin32)에서 Word 작업하기 [6] - 특정 제목이 있는 창 작업
Python(pywin32)에서 Word 작업하기 [7] - 기존 문서 열기/닫기(Documents.Open(), Document.Close())
Python(pywin32)에서 Word 조작하기 [8] - 단락 단위의 문자열 취득, 통계 (페이지 수, 단락 수, etc) 취득

참고


  • 문서에 문자열 삽입 - MSDN
  • 개체 모델 - MSDN
  • PyWin32 Documentation - Tim Golden's Stuff
  • VOV (VBA, OLE, VBScript)를 통한 자동 조작 - 스크립트 기반 프로그래밍 언어 팬의 담배
  • COM(Component Object Model)에 대해 살짝 학습해 나가는 그 1 도입편 - Qiita
  • VBScript로 Word 파일 페이지 수 목록 만들기 - Segmentation Fault
  • Office Space Microsoft Word 문서에서 텍스트 찾기 및 바꾸기
  • 모두의 단어 매크로
  • 좋은 웹페이지 즐겨찾기