반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 


이번 시간에는 아주 간단히 MS 워드 문서(.docx)를 PDF로 변환할 수 있게 해주는 패키지에 대해 공부해보겠습니다.

 

참고로 저는 쥬피터 노트북 환경에서 해당 프로젝트를 진행하였으나, 그냥 파이썬 파일로 코딩하고 실행시키셔도 무방합니다.

 

편하신 방법으로 따라와 주세요.

 

1. docx2pdf 설치

 

먼저 이름에서 그 목적이 확실히 느껴지는 docx2pdf 패키지를 설치해줍니다.

 

쥬피터 노트북의 경우 항상 새로운 패키지나 모듈을 설치한 후에는 완전히 껐다가 새로 실행시켜 주셔야하는 점 주의 바랍니다.

 

쥬피터 노트북이 아닌 파이썬 인터프리터의 경우 커맨드 창에서 아래의 코드를 입력하고 실행시켜주세요.

 

pip install docx2pdf

 

 

2. MS Word 문서를 PDF로 변환하기

 

docx2pdf는 그 사용법이 매우 간단하고 기능이 한정적이라서 아래의 코드면 더 배울게 없습니다.

 

너무 간단해서 주석도 따로 달지 않았습니다.

 

from docx2pdf import convert

inputFile = "변환시킬 워드 문서.docx"
outputFile = "PDF로 변환된 워드 문서.pdf"

convert(inputFile, outputFile)

 

<실행이 완료 된 코드>

 

 

3. MS Word 문서를 PDF로 변환하기 (실습)

 

이대로 글을 끝내기엔 조금 짧은감이 있어서 실제로 워드 파일을 하나 만들어서 변환해보는 것을 보여드리겠습니다.

 

MS Word에서 새문서를 만들어서 아래와 같이 글을 입력하고 저장해줍니다.

 

 

자 이제 저장된 워드 파일(.docx)을 변환시켜 볼까요? 따로 코드는 넣지 않겠습니다.

 

코드를 실행시키니 아래와 같은 PDF문서가 생성되었습니다.

 

 

참고로 저는 맥북을 사용하는데 가장 처음 docx2pdf로 변환을 실행하니 아래와 같은 팝업창이 나와서 추가적인 설정을 해주었답니다.

 

처음 한번만 설정해주면 그 다음부터는 안해줘도 되는 것 같네요.

 

1) 아래와 같이 창이 뜨면 확인을 눌러줍니다.

 

2) 확인을 눌러주었더니 추가 권한을 요구합니다. 선택을 눌러주세요.

 

3) 엑세스 허가를 눌러줍니다.

참고로 제가 처음 변환을 시도했던 파일명이 학업계획서였으니 오해 없으시길 바랍니다.

 

오늘 준비한 내용은 여기까지입니다.

 

다음에 기회가 되면 윈도우 환경에서 어떻게 작동하는지 테스트 해보고, 초기 설정을 하는 부분이 있는지 확인해보겠습니다.

 


<참고 자료>

 

1. Python에서 Docx를 PDF로 변환_DelftStack

https://www.delftstack.com/ko/howto/python/python-convert-docx-to-pdf/

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<Python-docx 관련 글>

 

2021.12.27 - [파이썬 패키지/Word] - [Python-docx] 파이썬으로 MS워드 문서 다루기 1편. 문서 생성, 저장, 불러오기, 글자 입력

2021.12.28 - [파이썬 패키지/Word] - [Python-docx] 파이썬으로 MS워드 문서 다루기 2편. 이미지 삽입, 표 삽입

2021.12.30 - [파이썬 패키지/Word] - [Python-docx] 파이썬으로 MS워드 문서 다루기 3편. 기존 양식의 내용 읽는 법 (ft. 문단, 표 인덱싱)

2022.01.01 - [파이썬 패키지/Word] - [Python-docx] 파이썬으로 MS워드 문서 다루기 4편. 글자 폰트, 크기, 색깔 변경하기


이번 시간에는 문단을 정렬하는 방법과 표의 셀 안의 내용을 정렬하는 방법에 대해서 공부해보겠습니다.

문단 정렬
셀 정렬

실습을 위해서 '파이썬으로 MS워드 문서 다루기 3편'에서 사용했던 예제 문서를 사용하도록 하겠습니다.

 

3편을 보지 않고 오신분은 아래의 코드를 실행하시면 예제 문서가 자동으로 생성될 거예요. 

 

from docx import Document

document = Document()

document.add_heading('코딩유치원 python-docx 강의', level = 0)

p = document.add_paragraph('안녕하세요, 코린이 여러분!')
p.add_run(' 코딩유치원에 오신 것을 환영합니다.').bold = True

document.add_paragraph('문장 추가 1')
document.add_paragraph('문장 추가 2')
document.add_paragraph('문장 추가 3')
document.add_paragraph('문장 추가 4')

records = (
    (1, '하나', 'one'),
    (2, '둘', 'two'),
    (3, '셋', 'three')
)

table = document.add_table(rows=1, cols=3)

# 만든 표의 스타일을 가장 기본 스타일인 'Table Grid'로 설정
table.style = document.styles['Table Grid']

hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'No'
hdr_cells[1].text = '한국어'
hdr_cells[2].text = '영어'
for qty, id, desc in records:
    row_cells = table.add_row().cells
    row_cells[0].text = str(qty)
    row_cells[1].text = id
    row_cells[2].text = desc

document.save('예제 문서.docx')

 

 

1. 문단 정렬

 

가장 처음 배울 내용은 우리가 자주 사용하는 왼쪽, 오른쪽, 가운데, 양쪽 정렬을 적용하는 방법입니다.

 

적용 전과 적용 후의 문단 상태를 비교해보세요. 아시겠지만 paragraphs[0]이 첫번째 문단이므로 두번째 문단부터 적용한 것이랍니다.

 

from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH

document = Document('예제 문서.docx')

# 왼쪽 정렬
paragraph1 = document.paragraphs[1]
paragraph1.alignment = WD_ALIGN_PARAGRAPH.LEFT

# 가운데 정렬
paragraph2 = document.paragraphs[2]
paragraph2.alignment = WD_ALIGN_PARAGRAPH.CENTER

# 오른쪽 정렬
paragraph3 = document.paragraphs[3]
paragraph3.alignment = WD_ALIGN_PARAGRAPH.RIGHT

# 양쪽 정렬
paragraph4 = document.paragraphs[4]
paragraph4.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY

# 텍스트 배분 (글자를 흩어서 배치)
paragraph_last = document.paragraphs[-1]  # 마지막 문단
paragraph_last.alignment = WD_ALIGN_PARAGRAPH.DISTRIBUTE

# 현재 작업경로에 저장
document.save('예제 문서.docx')

 

<기존 예제  문서>

 

<정렬 후 예제  문서>

 

 

2. 셀 정렬

 

워드에서 표, 정확히는 셀 안의 내용들을 정렬하는 방법을 공부해 보겠습니다.

 

셀 정렬은 크게 수평 정렬과 수직 정렬로 나뉩니다.

 

1) 수평 정렬

 

먼저 예제 문서의 첫번째 열에 수평 정렬(좌측, 가운데, 우측)을 적용해보겠습니다. 공식 문서에서는 table 객체에다가 .alignment를 하라고 되어 있지만 해본 결과 되지 않는 것을 확인했습니다.

 

꼭 paragraphs 객체에 정렬을 적용해주세요.

 

from docx.enum.table import WD_TABLE_ALIGNMENT

document = Document('예제 문서.docx')

# LEFT : 왼쪽 정렬, CENTER: 가운데 정렬, RIGHT: 오른쪽 정렬
document.tables[0].rows[0].cells[0].paragraphs[0].alignment = WD_TABLE_ALIGNMENT.LEFT
document.tables[0].rows[0].cells[1].paragraphs[0].alignment = WD_TABLE_ALIGNMENT.CENTER
document.tables[0].rows[0].cells[2].paragraphs[0].alignment = WD_TABLE_ALIGNMENT.RIGHT

# 현재 작업경로에 저장
document.save('예제 문서.docx')

 

<실행 결과>

 

2) 수직 정렬

 

수직 정렬은 위에서 배운 수평 정렬이 paragraphs 객체에 적용한 것과 다르게 cells 객체에 적용해야 합니다.

(이 부분도 공식문서에 틀리게 작성되어 있어서 알아내느라 고생했네요ㅜㅜ)

 

from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT

document = Document('예제 문서.docx')

# LEFT : 위쪽 정렬, CENTER: 가운데 정렬, RIGHT: 아래쪽 정렬
document.tables[0].rows[0].cells[0].vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.TOP
document.tables[0].rows[0].cells[1].vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER
document.tables[0].rows[0].cells[2].vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.BOTTOM

# 현재 작업경로에 저장
document.save('예제 문서.docx')

 

<확인 결과>

수직 정렬 확인을 위해서 표 사이즈 크게 변경

 


<참고 자료>

 

1. python-docx 공식 문서

https://python-docx.readthedocs.io/en/latest/index.html

 

 

2 cell 정렬 관련 자료

https://programmerall.com/article/17671160550/

 

 

 

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<Python-docx 관련 글>

 

2021.12.27 - [파이썬 패키지/Word] - [Python-docx] 파이썬으로 MS워드 문서 다루기 1편. 문서 생성, 저장, 불러오기, 글자 입력

2021.12.28 - [파이썬 패키지/Word] - [Python-docx] 파이썬으로 MS워드 문서 다루기 2편. 이미지 삽입, 표 삽입

2021.12.30 - [파이썬 패키지/Word] - [Python-docx] 파이썬으로 MS워드 문서 다루기 3편. 기존 양식의 내용 읽는 법 (ft. 문단, 표 인덱싱)


이번 시간에는 글자의 스타일(폰트,크기,색상)을 적용하는 방법을 공부해보겠습니다.

 

 

1. 폰트

 

우선 폰트를 적용할 때에는 추가적인 import 필요하지 않습니다

 

<선 스타일 적용, 후 문단 추가 방법>

from docx import Document

# 새로운 문서 만들기
doc = Document()

#스타일 적용하기
style = document.styles['Normal']
font = style.font
font.name = 'Arial'

para = doc.add_paragraph('Some text\n')

 

위의 방법은 add_paragraph에도 적용할 수 있고, 위와 아래의 방법모두 add_run으로 쓰인 문장에 적용 가능합니다.

 

<선 문단 입력, 후 스타일 적용>

 

para.add_run('코딩유치원에 오신 것을 환영합니다.').bold = True

run = doc.paragraphs[0].runs[0]

run.font.name = 'Arial'

 

여기서 조금 불편한 점은 한글은 위의 방식으로 폰트 적용이 안되어서 다른 방법을 사용해야한다는 것입니다.

 

doc = Document('test.docx')

from docx.oxml.ns import qn

style = doc.styles['Normal']
style._element.rPr.rFonts.set(qn('w:eastAsia'), '맑은 고딕')
style.font.name = '맑은 고딕'
style.font.size = Pt(8)

para = doc.add_paragraph('맑은 고딕체 테스트')

# 저장
doc.save('test.docx')

 

 

2. 크기

 

문자 크기를 변경하기 위해서는 우선 아래와 같이 폰트 크기와 관련된 클래스를 import 해주어야 합니다.

from docx.shared import Pt

 

다음으로는 run 객체를 지정해주어야 하는데요. 저는 문단(paragraphs) 안의 모든 run 객체를 바꿔주는 코드를 짜보았습니다.

 

# 첫번째 문단의 문장(run)들을 리스트로 받기
para1 = doc.paragraphs[0].runs

# for 문을 이용해서 
for run in para1:
    run.font.size = Pt(20)

 

<동작 확인용 샘플코드>

from docx import Document
from docx.shared import Pt

doc = Document()

para = doc.add_paragraph('이 글자의 크기를 바꿔봅시다')

# 첫번째 문단의 문장(run)들을 리스트로 받기
para = doc.paragraphs[0].runs

# for 문을 이용해서 
for run in para:
    run.font.size = Pt(20)

# 저장
doc.save('test.docx')

 

<실행 결과>

 

3. 색깔

 

문자 색깔을 변경하기 위해서는 RGBColor 클래스를 import 해주어야 합니다.

 

from docx.shared import RGBColor

 

그 다음엔 문단을 하나 추가하고, 추가한 문단의 첫 문장을 run 객체로 선언해줍니다.

 

사실 paragraph를 생성하면 자동으로 run 객체를 생성하고 그것으로 문장을 써주는 개념이랍니다. 그래서 아래와 같이 add_run( )으로 문장을 써준 것이 아님에도 para2가 runs[0]를 가질 수 있는 것이죠.

para2 = doc.add_paragraph('글자 색깔을 바꿔봅시다')
run = para2.runs[0]
font = run.font

# RGB 컬러를 각각 16진수로 표현 (R, G, B)
font.color.rgb = RGBColor(0xFF, 0x24, 0xE9)

# 저장
doc.save('test.docx')

 

 

오늘 준비한 내용은 여기까지입니다.

 

오늘도 코딩유치원을 찾아주셔서 감사합니다.


<참고자료>

 

1.Python-docx을 이용한 워드 문서 자동 생성 - 3. 스타일 변경, Head

https://daaam11.tistory.com/12

 

2.[워드 문서 스타일 적용하기] python-docx 모듈 활용 - 네이버 블로그

https://m.blog.naver.com/sangja84/221530974938

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<Python-docx 관련 글>

 

2021.12.27 - [파이썬 패키지/Word] - [Python-docx] 파이썬으로 MS워드 문서 다루기 1편. 문서 생성, 저장, 불러오기, 글자 입력

2021.12.28 - [파이썬 패키지/Word] - [Python-docx] 파이썬으로 MS워드 문서 다루기 2편. 이미지 삽입, 표 삽입

 


 

지난 두 시간에 걸쳐서 python-docx 라이브러리로 워드 파일에 글자, 그림, 표를 삽입하는 방법을 배워봤습니다.

 

새로운 문서를 만들 때에도 필요하겠지만, 기존 문서의 내용에 무언가 추가하고 변경하기 위해서는 인덱싱(indexing)이 필요합니다.

 

엑셀에 행(row)과 열(column)의 개념이 있어, 원하는 셀(cell)의 내용을 인덱싱해서 가져올 수 있듯이 워드 파일도 이러한 개념을 잘 파악하고 있어야만이 마음대로 문서를 주무를 수 있답니다.

 

우선 오늘의 수업을 위해서 아래의 코드를 실행하셔서 '예제 문서.docx'를 만들어주세요.

 

from docx import Document

document = Document()

document.add_heading('코딩유치원 python-docx 강의', level = 0)

p = document.add_paragraph('안녕하세요, 코린이 여러분!')
p.add_run(' 코딩유치원에 오신 것을 환영합니다.').bold = True

document.add_paragraph('문장 추가 1')
document.add_paragraph('문장 추가 2')
document.add_paragraph('문장 추가 3')
document.add_paragraph('문장 추가 4')

records = (
    (1, '하나', 'one'),
    (2, '둘', 'two'),
    (3, '셋', 'three')
)

table = document.add_table(rows=1, cols=3)

# 만든 표의 스타일을 가장 기본 스타일인 'Table Grid'로 설정
table.style = document.styles['Table Grid']

hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'No'
hdr_cells[1].text = '한국어'
hdr_cells[2].text = '영어'
for qty, id, desc in records:
    row_cells = table.add_row().cells
    row_cells[0].text = str(qty)
    row_cells[1].text = id
    row_cells[2].text = desc

document.save('예제 문서.docx')

 

<실행 결과>

 

1. paragraph 인덱싱

 

먼저 문단(paragraph)을 인덱싱 하는 방법부터 시작해보겠습니다. 아래의 코드를 실행해보세요.

 

doc = Document('예제 문서.docx')

for i, paragraph in enumerate(doc.paragraphs):
    print(str(i+1) + ": " + paragraph.text)

 

그럼 아래와 같이 문단의 번호와 내용들이 출력됩니다.

 

여기서 잠깐

워드 문서에서 '레이아웃-줄 번호-페이지마다 다시 매기기'를 클릭하시면 문단 옆에 문단 번호가 표시된답니다.

문단 좌측에 인덱스가 추가된 모습

 

만약 특정 문단에 글을 추가하고 싶으시면 지난 시간에 배웠던 add_run( ) 함수를 이용해 주시면 됩니다.

양식에 내용을 추가할 때 사용하면 되겠죠?

# 추가하고 싶은 문단 (*실제 인덱스는 0부터 시작하므로 원하는 문단번호보다 +1 해주어야함에 주의)
p = doc.paragraphs[4]

p.add_run('문단에 굵은 글자 추가').

 

그리고 이런 경우가 자주 있을지는 모르겠지만 문단 중간에 새로운 문단을 추가하고 싶으면 아래의 코드를 이용하시면 됩니다.

# 3번째 문장 다음에 삽입 (*paragraphs[3]은 4번째 문장을 의미)
dco.paragraphs[3].insert_paragraph_before("문장을 삽입한다.")

 

 

2. table 인덱싱

 

위에서 문단을 인덱싱하고 내용을 가져왔을 때, 표(table)은 포함되지 않은 것을 보셨나요?

 

python-docx에서 표는 따로 분류되어 관리되며, 인덱싱 하는 방법도 조금 다릅니다.

 

 

1) 표의 특정 셀의 값 읽는 방법

 

엑셀과 매우 비슷하면서도 조금 다릅니다. 엑셀로 치면 sheet와 같은 것이 table입니다. 첫번째 시트, 두번째 시트가 있듯이 첫번째 표와 두번째 표를 table[인덱스]로 접근합니다.

 

rows[0]과 cells[0]은 행과 열로 셀 하나를 인덱싱하는 것이며, paragraphs[0]은 해당 셀의 내용(정확히는 문단)을 인덱싱 하는 것입니다. 만약 한 셀에 엔터를 치고 글자를 입력되어 있다면 paragraphs[1]로 인덱싱 해주어야겠죠?

 

# 문서 안의 모든 표를 가져옴
tables = doc.tables

# 가장 처음 표의 첫행, 첫열의 첫문단 내용 가져오기
tables[0].rows[0].cells[0].paragraphs[0].text

 

당연히 'No' 출력되겠죠? (No.라고 했어야했는데 잘 못한걸 이제 발견했네요)

 

 

2) 표의 모든 값에 접근하는 방법

 

표의 모든 값을 출력할 일이 있을지 모르겠지만 아래와 같이 가능합니다.

 

table = doc.tables[0]

for row in table.rows:
    for cell in row.cells:
        for para in cell.paragraphs:
            print(para.text)

 

이걸 응용해서 표의 모든 내용 중, '하나'를 찾아볼까요? 만약 그게 가능하면 글자를 추가해주거나 수정할 수도 있답니다.

 

# 첫번째 표 인덱싱
table = doc.tables[0]

for row in table.rows:
    for cell in row.cells:
        for para in cell.paragraphs:
            if(para.text == "하나"):
                para.add_run(' <-- 찾았다 하나')
                
# 확인을 위해서 저장하기
doc.save('예제 문서.docx')

 

실행해보니 하나를 잘 찾아서 글자도 잘 추가했네요.

 

이번 시간은 여기까지입니다.

 

오늘 공부한 내용을 가지고 얼른 회사에서 지루하게 반복해야 하는 문서업무를 자동화 해버리고 싶네요.


<참고 자료>

 

1. python-docx 공식 문서

https://python-docx.readthedocs.io/en/latest/index.html

 

2. 파이썬 DOCX 모듈의 사용방법_anakt님의 네이버 블로그

https://m.blog.naver.com/anakt/221842622079

 

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<Python-docx 관련 글>

 

2021.12.27 - [파이썬 패키지/Word] - [Python-docx] 파이썬으로 MS워드 문서 다루기 1편. 문서 생성, 저장, 불러오기, 글자 입력

2021.12.28 - [파이썬 패키지/Word] - [Python-docx] 파이썬으로 MS워드 문서 다루기 2편. 이미지 삽입, 표 삽입

2021.12.30 - [파이썬 패키지/Word] - [Python-docx] 파이썬으로 MS워드 문서 다루기 3편. 기존 양식의 내용 읽는 법 (ft. 문단, 표 인덱싱)


오늘은 지난 시간에 이어서 python-docx 라이브러리로 워드 파일에 이미지와 표를 삽입하는 방법을 공부해보겠습니다.

 

이번 시간 역시 VScode에서 쥬피터 노트북 파일(.ipynb)을 생성하여 코드를 실행해보겠습니다.

 

우선 가장 기본이 되는 Document 클래스를 import 해주세요.

from docx import Document

 

1. 이미지 삽입

 

우선 이미지를 삽입하려면 삽입할 이미지가 있어야겠죠?

 

이미지 파일을 하나 준비해주세요.

 

뭘 준비해야 할지 모르겠다면 그냥 화면을 캡쳐해서 jpg 혹은 png 파일로 저장해주세요.

 

cat.jpg

 

저는 귀여운 고양이 사진을 워드 문서에 삽입해보겠습니다.

 

코드 설명은 아래에 주석으로 달아두었으며, 주석을 달지 않은 부분이 잘 이해가 안가신다면 지난 글을 참고해주세요.

 

<이미지 삽입 코드>

# Cm와 Inch 단위를 사용하기 위한 모듈
from docx.shared import Cm, Inches
 
doc = Document()

# 사진의 크기를 Cm 단위로 설정하여 삽입
doc.add_picture('cat.jpg',width= Cm(16), height= Cm(9))

# 사진의 크기를 Inch 단위로 설정하여 삽입
doc.add_picture('cat.jpg',width= Inches(4), height= Inches(3))

doc.save('이미지 삽입.docx')

 

<실행 결과>

 

워드 파일을 직접 열어주어야 함.

 

 

2. 표 삽입

 

1) 행과 열 설정 및 표 만들기

 

우리가 워드를 사용할 때 표를 삽입하려면 가장 먼저 행과 열의 갯수를 설정해주어야 하죠?

Word 사용 시, 일반적인 표 삽입 과정

 

python-docx를 사용할 때에도 마찬가지로 가장 먼저 행(rows)와 열(cols)의 갯수를 설정해줍니다.

 

이전 시간에 배우셨던 add_paragraph의 개념과 동일하게 변수에 대입해줌으로써 객체화가 가능합니다.

 

<표 삽입 코드>

# 새로운 문서 만들기
doc = Document()

# 2행 3열의 표 만들기
table = doc.add_table(rows = 2, cols = 3)

# 만든 표의 스타일을 가장 기본 스타일인 'Table Grid'로 설정
table.style = doc.styles['Table Grid']

# 저장
doc.save('표 삽입.docx')

 

<실행 결과>

 

 

참고로 위에서  표 스타일을 Table Grid로 해주었는데, 이 스타일은 가장 기본적인 스타일입니다.

추후에 문단과 표를 정렬하고 스타일을 변경하는 방법에 대해서 다루어 보겠습니다.

 

2) 각 셀에 내용 입력

 

각 셀에는 아래와 같은 인덱싱 방법으로 표에 접근하여, 텍스트를 입력할 수 있습니다.

 

<표에 텍스트 삽입 코드>

# 표의 첫 행을 리스트로 가져오기
first_row = table.rows[0].cells

# 첫 행의 각 열들에 접근해서 값 입력 
first_row[0].text = 'a'
first_row[1].text = 'b'
first_row[2].text = 'c'

# 표의 두번째 행을 리스트로 가져온 후, 각 셀에 값 입력
second_row = table.rows[1].cells
second_row[0].text = 'd'
second_row[1].text = 'e'
second_row[2].text = 'f'

# 저장
doc.save('표 삽입.docx')

 

<실행 결과>

 

3) 행과 열 추가하기

 

행 추가

row_cells = table.add_row().cells

 

위에서 굳이 변수에 대입해준 이유는 나중에 새로 만든 셀들에 값을 입력할 때, row_cells[0]과 같이 인덱싱하여 텍스트 입력이 가능하기 때문입니다.

 

 

열 추가

 

열을 추가할 때에는 행을 추가할 때와 다르게 반드시 width 값을 꼭 입력해주어야 합니다.

 

col_cells = table.add_column(width=Cm(2)).cells

 

오늘 준비한 내용은 여기까지입니다.

 

다음 시간에는 위에서 잠시 언급했던 paragraph에 스타일을 주거나, 정렬하는 방법, 그리고 표에 스타일을 주거나 간격을 조정하는 방법을 공부해보겠습니다.


<참고자료>

 

1. python-docx 공식 문서

https://python-docx.readthedocs.io/en/latest/index.html

 

 

 

 

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<Python-docx 관련 글>

 

2021.12.27 - [파이썬 패키지/Word] - [Python-docx] 파이썬으로 MS워드 문서 다루기 1편. 문서 생성, 저장, 불러오기, 글자 입력

2021.12.28 - [파이썬 패키지/Word] - [Python-docx] 파이썬으로 MS워드 문서 다루기 2편. 이미지 삽입, 표 삽입

2021.12.30 - [파이썬 패키지/Word] - [Python-docx] 파이썬으로 MS워드 문서 다루기 3편. 기존 양식의 내용 읽는 법 (ft. 문단, 표 인덱싱)


 

오늘은 지난 시간에 배웠던 Pywin32 패키지의 win32com 모듈이 아닌, python-docx 라이브러리를 이용해서 word 파일을 다루어 보겠습니다.

 

 

1. 패키지 설치

 

아래의 코드를 터미널 창 혹은 주피터 노트북의 셀(cell)에 입력하고 실행시켜주세요. 참고로 해당 패키지는 Windows OS 뿐만 아니라 Mac OS에서도 잘 작동합니다.

pip install python-docx

 

2. 패키지 불러오기

 

python-docx 라이브러리에는 다양한 클래스들이 존재하며, 원하는 기능(스타일, 정렬, 표 등등)에 따라서 import 해주는 것이 조금씩 다릅니다.

 

아래는 몇가지 예로 든 것 외에도 많은 것들이 있으며, 오늘은 Document 클래스를 이용한 기능들만 알아보겠습니다.

# 가장 기본적인 기능(문서 열기, 저장, 글자 쓰기 등등)
from docx import Document

# 문단 정렬
from docx.enum.text import WD_ALIGN_PARAGRAPH

# 문자 스타일 변경
from docx.enum.style import WD_STYLE_TYPE

 

3. 새 워드문서 만들기

 

위에서 import를 했다면 문서 객체(Object)를 만들어 줄 차례입니다. 참고로 객체란 클래스(Class)를 변수로 선언해줌으로써 만들 수 있습니다.

 

doc = Document()

 

 

4. 워드문서 저장하기

 

현재는 그냥 새 워드문서가 파이썬 상에서만 존재하는 상태입니다. 이것을 우리가 사용하는 실제 워드 파일로 만들어주고 싶으면 아래의 코드로 객체를 저장해주어야합니다.

 

# 현재 작업경로에 저장
doc.save('저장하고 싶은 파일명.docx')

 

저장하실 때 특정 위치에 저장하고 싶으시면, 절대경로를 입력해주시면 됩니다.

 

저장된 docx 파일

 

5. 저장된 워드문서 불러오기

 

만약 기존의 워드파일을 불러오고 싶으시다면 아래와 같이 코딩해주시면 됩니다.

여기서 '저장하고 싶은 파일명'은 위에서 저장했던 파일명을 그대로 사용한 것입니다.

# 절대경로를 이용하는 방법
doc = Document(r'C:\Users\SANGWOO\Desktop\VSCODE\저장하고 싶은 파일명.docx')

# 현재작업 경로에 '파일명.docx'가 위치할 때
doc = Document('저장하고 싶은 파일명.docx')

불러온 파일 (실제 출력되지는 않음)

 

6. 워드문서에 글자 입력하기

 

워드의 가장 기본적인 기능인 글자를 입력하는 방법을 알아보겠습니다.

 

1) 제목 넣기

위와 같이 제목을 넣는 방법은 아래의 코드를 사용합니다. 코드와 이미지를 보면서 비교해보세요.

 

# 제목
doc.add_heading('가장 큰 제목 (아래에 밑줄)', level=0)
doc.add_heading('제목 크기, H1', level=1)
doc.add_heading('제목 크기, H2', level=2)
doc.add_heading('제목 크기, H3', level=3)
doc.add_heading('제목 크기, H4', level=4)
doc.add_heading('제목 크기, H5', level=5)
doc.add_heading('제목 크기, H6', level=6)

 

level이 어디까지 가능한지 확인은 해보지 않았으며, 레벨 3 밑으로는 글자 크기가 더 작아지지 않는 것으로 보입니다.

 

2) 문단(paragraph) 넣기

 

여기서 말하는 문단이란 그냥 한줄로 쭉 이어지는 글을 말합니다. 즉, 엔터를 치지 않은 상태의 글을 의미합니다.

참고로 제목도 하나의 문단이라고 할 수 있습니다.

 

doc.add_paragraph('여기에 원하는 텍스트를 마음껏 입력하면 됩니다.')

 

 

3) 문단에 문자 추가하기

 

문단에 글자를 쭉 이어서 쓸 수도 있지만 특정한 문자를 강조하고 싶거나 다른 스타일을 주고 싶을 때는 add_run( ) 함수를 사용합니다.

 

우선 위에서와 같이 add_paragraph( ) 함수를 사용하되 변수에 담아줍니다.

p = doc.add_paragraph('두번째 문단: 여기에 원하는 텍스트를 마음껏 입력하면 됩니다.')

 

변수 p에 .add_run( ) 함수로 글자를 추가해줍니다. 스타일 적용 방법은 아래의 코드를 참고하세요.

# 굵은 글씨(Bold) 적용
p.add_run('문단에 굵은 글자 추가').bold = True

# 기울임꼴(Italic) 적용
p.add_run('문단에 기울인 글자 추가').italic = True

# 밑줄(Underline) 적용
p.add_run('문단에 밑줄 글자 추가').underline = True

 

여기서 강조하고 싶은 것은 add_run( )은 반드시 paragraph 객체를 기반으로 사용할 수 있다는 점입니다.
 
오늘 준비한 내용은 여기까지입니다. 다음 시간에는 문서에 그림과 표를 넣는 방법을 자세히 다루어보겠습니다.
 

 

<참고 문서>

 

1. python-docx 공식 문서

https://python-docx.readthedocs.io/en/latest/index.html

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 


 

오늘은 지난 시간에 배웠던 Pywin32 패키지의 win32com 모듈을 이용해서 word 파일을 다루어 보겠습니다.

 

참고로 오늘의 내용을 함께 따라하시기 위해서는 Pywin32 패키지가 설치되어 있어야 합니다.

 

 

 

1. 새로운 워드 파일 열기 

# 관련 패키지 import
import win32com.client

# Word 어플리케이션 열기
word = win32com.client.gencache.EnsureDispatch("Word.application")

# 자동으로 실행되는 것을 확인하고 싶을 때 코드 추가
word.Visible = True

 # 새로운 워드 문서 열기
doc = word.Documents.Add()

 

만약 새로운 문서가 아닌 기존의 문서를 다루고 싶으시면, 아래의 코드를 실행해주세요.

 

# 절대 경로를 이용하여 기존 워드 파일 열기
doc = word.Documents.Open(r'C:\Users\SANGWOO\Desktop\VSCODE\test.docx')

 

 

2. 문자 입력

 

# 커서 앞에 문자 삽입
word.Selection.InsertBefore("안녕하세요 ")

# 커서 뒤에 문자 삽입
word.Selection.InsertAfter("코딩유치원입니다.")

 

 

3. 커서 이동

 

커서를 이동하는 방법은 아래와 같이 왼쪽, 혹은 오른쪽으로 가능하며 다양한 단위로 이동 가능합니다.

(아직 상하 이동은 파악하지 못하여서, 추후에 알게되면 업데이트 하겠습니다.)

 

# 왼쪽으로 커서 이동
Selection.MoveLeft(Unit=문자/단어/문장/표의 셀 하나,Count=숫자)

# 오른쪽으로 커서 이동
Selection.MoveRight(Unit=문자/단어/문장/표의 셀 하나,Count=숫자)

 

자세한 예시는 아래와 같습니다. 하나씩 따라하시면서 어떻게 움직이는지 관찰해보세요.

 

# 글자 단위로 이동
word.Selection.MoveLeft(Unit=win32.constants.wdCharacter, Count=3)

# 단어 하나씩 이동 (특수기호는 단어 하나로 취급함 ex. ?, !, 쉼표 등등)
word.Selection.MoveLeft(Unit=win32.constants.wdWord, Count=1)

# 문장 하나를 이동 (문장은 .으로 구분함)
word.Selection.MoveRight(Unit=win32.constants.wdSentence, Count=1)

# 표에서 한 칸 이동 (표가 없으면 에러)
word.Selection.MoveLeft(Unit=win32.constants.wdCell, Count=1)

 

 

4. 글자 스타일 변경

 

스타일을 변경하는 방법은 아직 완전히 파악하지 못하여서, 글자의 크기 변경하는 법만 일단 알려드릴게요.

 

# 한번에 모든 글자를 변경하고 싶을 때
doc.Content.Font.Size = 20

# 커서의 위치를 기준으로 몇 개의 글자만 변경하고 싶을 때

word.Selection.Start = 2 # 커서가 있는 행에서 2번째 글자의 다음 글자부터
word.Selection.End = 4 # 커서가 있는 행에서 4번째 글자까지
word.Selection.Font.Size = 20 # 선택된 부분의 폰트 크기를 20으로 조정

 

 

5. 페이지 가로/세로 설정

 

페이지를 세로로 사용할지, 가로로 사용할지를 설정해 줄 수도 있습니다.

 

# 페이지 방향 세로
doc.PageSetup.Orientation = 0

# 페이지 방향 가로
doc.PageSetup.Orientation = 1

 

 

6. 페이지 상하좌우 여백 설정

# 페이지 상하좌우 여백 설정 

doc.PageSetup.TopMargin = 100
doc.PageSetup.BottomMargin = 100
doc.PageSetup.LeftMargin = 100
doc.PageSetup.RightMargin = 100

 

7. 문서 저장

 

파일을 닫기 전에 문서를 저장해주어야 합니다. 저장해주지 않으면 아래에서 문서를 닫거나 어플리케이션을 닫는 단계에서 저장 경로를 설정하는 창이 뜨게 됩니다.

 

# 내PC - 문서에 저장
# doc.SaveAs("test.docx")

# 지정된 절대 경로에 test라는 이름으로 워드 문서 저장
doc.SaveAs(r"C:\Users\SANGWOO\Desktop\VSCODE\test.docx")

 

8. 워드 문서 닫기 / 어플리케이션 닫기

 

문서를 닫는 것과 어플리케이션(워드 프로그램)을 닫는 것의 차이를 코드를 하나씩 실행하면서 관찰해 보세요.

 

# 워드 파일 닫기
doc.Close()

# 워드 프로그램 종료
word.Quit()

워드 문서만 닫은 상태

 

 

엑셀을 다룰 때 써보았던 win32com 모듈을 이용해서 Word 문서를 다루어 보려고 공부해보았으나, 자료가 부족하여서 원하는 기능을 모두 사용하기는 힘들어 보입니다.

 

그래서 다음 시간에는 python-docx 패키지를 이용해서 MS워드 문서를 다루는 방법을 공부해보겠습니다.

 

https://python-docx.readthedocs.io/en/latest/

 

python-docx — python-docx 0.8.11 documentation

from docx import Document from docx.shared import Inches document = Document() document.add_heading('Document Title', 0) p = document.add_paragraph('A plain paragraph having some ') p.add_run('bold').bold = True p.add_run(' and some ') p.add_run('italic.')

python-docx.readthedocs.io

 


<참고 자료>

 

1. 파이썬 win32com을 이용한 Word 자동화_네이버 블로그

https://m.blog.naver.com/anakt/221874907407

반응형

+ Recent posts