본문 바로가기

programming/python

[python 활용하기 #7] 파이썬 워드파일(docx) 업무 자동화

[python 활용하기 #7] 파이썬 워드파일(docx) 업무 자동화

 

안녕하세요. 심심한 코딩쟁이입니다.

 

오늘은 파이썬으로 워드파일에 내용을 작성해보는 과정을 살펴보려합니다.

 

직장인들에게 MSword는 익숙한 프로그램일 겁니다. 업무에 많이들 쓰시죠?

 

오늘은 미리 준비되어있는 템플릿 워드 파일에 간단한 내용만 입력하는 작업을 다량으로 진행하시는

 

분들에게 아주 적합한 방법을 소개해 드리도록 하겠습니다.

 

살펴보시죠.

 

python-msword
파이썬으로 msword 작업 자동화


python-docx 라이브러리 설치

 

파이썬으로 워드파일을 다뤄보지 않으셨다면 docx 라이브러리도 설치되어있지 않으실 겁니다.

 

설치하기전에 pip 업데이트부터 진행하도록 합시다.

 

윈도우 사용자

python -m pip install --upgrade pip

리눅스 사용자

pip --upgrade pip

 

pip-update
pip 업데이트

 

파이썬 3.x 버전을 사용하시는 분들은 python-docx를 설치하셔야합니다.

 

pip install python-docx

 

install-python-docx
python-docx 설치

 

만약 실수로 docx를 설치하셨다면 아래 명령어로 삭제하시기바랍니다.

 

pip uninstall docx

 

python-docx 설치를 확인하기 위해 아래 그림처럼 시도해보시기 바랍니다.

 

check-install
설치 확인

 

설치가 제대로 안되었다면 import 자체가 안되기 때문에 import를 못하는 경우 다시 설치를 진행해주세요.


작업 시나리오

 

워드파일에 양식을 만들어두고 엑셀파일에서 내용을 읽어서 워드파일에 알맞은 정보를 채워넣는 방식으로 작업

 


워드 파일(템플릿)의 내용

 

word-file-template
워드 파일 템플릿의 내용


엑셀 파일의 내용

 

excel-file-data
엑셀 파일의 내용


 

요즘 핫한 슬램덩크 주인공들의 정보를 엑셀 파일에 담아보았습니다.

 

이제부터 파이썬 코드를 이용해서 템플릿에 엑셀 파일의 정보를 작성해보도록 하겠습니다.


엑셀 파일 정보 읽어오기

 

워드 파일에 내용을 작성하기에 앞서서 엑셀 파일에서 정보를 읽어와야하는데 자세한 설명은 아래 글을 참고해주세요.

 

[ python 활용하기 #5 ] 파이썬 엑셀 파일 읽기 쓰기 지우기

 

 

[ python 활용하기 #5 ] 파이썬 엑셀 파일 읽기 쓰기 지우기

[ python 활용하기 #5 ] 파이썬 엑셀 파일 읽기 쓰기 지우기 안녕하세요. 심심한 코딩쟁이입니다. 오늘은 파이썬으로 엑셀 파일을 다뤄보는 시간을 가져보겠습니다. 직장인들에게 엑셀은 아주 친밀

symxsym.tistory.com

 

엑셀에서 정보를 읽어오는 코드를 살펴보겠습니다.

 

from openpyxl import load_workbook
import os

path = os.getcwd() + "\\" # 현재 작업 디렉터리의 경로를 반환하고 뒤에 \를 붙여줌

wb = load_workbook(path + "template.xlsx", data_only=True)
# data_only=Ture 수식이 아닌 값으로 읽음

# 첫번째 시트 오픈
# ws = wb[wb.sheetnames[0]]

# 활성화된 시트 오픈
ws = wb.active

# 데이터를 담을 리스트
data_list = []

for x in range(2, ws.max_row + 1): # 맨 윗줄은 제외시키기 위해 2부터 시작
    list = [] # 한 줄마다 존재하는 정보를 담을 리스트
    for y in range(2, 5): # 맨 앞칸을 제외시키기 위해 2부터 시작
        if ws.cell(row=x, column=y).value == None: # 빈칸이 존재하면 다음 줄 작업
            break
        else:
            list.append(ws.cell(row=x, column=y).value)
    if len(list) != 0: # 리스트에 요소가 존재하면 데이터 리스트에 추가
        data_list.append(list)

# 엑셀에서 받아온 데이터 확인
print(data_list)

워드 파일 작성하기

 

위에서 엑셀 파일의 정보를 읽어 왔으니 이제 워드 파일에 작성해보는 코드를 살펴보겠습니다.

 

본 포스팅의 과정이 전부 담겨있는 코드입니다. 설명은 주석으로 달아두었습니다.

 

from openpyxl import load_workbook
import os
import docx
import datetime

rightnow = datetime.datetime.now() # 현재 날짜와 시간을 불러옴

# 확인용
# print(rightnow) 

path = os.getcwd() + "\\" # 현재 작업 디렉터리의 경로를 반환하고 뒤에 \를 붙여줌

wb = load_workbook(path + "template.xlsx", data_only=True) # data_only=Ture 수식이 아닌 값으로 읽음

# 첫번째 시트 오픈
# ws = wb[wb.sheetnames[0]]

# 활성화된 시트 오픈
ws = wb.active

# 데이터를 담을 리스트
data_list = []

for x in range(2, ws.max_row + 1): # 맨 윗줄은 제외시키기 위해 2부터 시작
    list = [] # 한 줄마다 존재하는 정보를 담을 리스트
    for y in range(2, 5): # 맨 앞칸을 제외시키기 위해 2부터 시작
        if ws.cell(row=x, column=y).value == None: # 빈칸이 존재하면 다음 줄 작업
            break
        else:
            list.append(ws.cell(row=x, column=y).value)
    if len(list) != 0: # 리스트에 요소가 존재하면 데이터 리스트에 추가
        data_list.append(list)

# 엑셀에서 받아온 데이터 확인
# print(*data_list)

for list in data_list:
        
    doc = docx.Document(path + "template.docx") # 템플릿 워드 파일 오픈
    
    # 폰트 설정
    fonfs = doc.styles["Normal"].font
    fonfs.size = docx.shared.Pt(12)
    
    para = doc.paragraphs
    para[5].add_run(list[0]) # 이름 : 여기에 입력됨
    para[6].add_run(list[1]) # 포지션 : 여기에 입력됨
    para[7].add_run(str(list[2])) # 등번호 : 여기에 입력됨
    
    for par in para:
        if 'yyyy' in par.text: # 해당 줄에 yyyy가 존재하면 줄 전체를 현재 날짜로 바꿔버림
            par.text = par.text.replace(par.text, rightnow.strftime("%Y. %m. %d."))
    
    doc.save(path + list[0] + "_정보.docx") # 각 데이터 별로 파일명을 바꿔서 저장

 

위 코드에서 부가적인 설명이 필요한 부분은 아래에 정리해두겠습니다.

 

import docx 워드파일을 다루기 위해 사용됨

import datetime 날짜와 시간을 다루기 위해 사용됨

para[5].add_run(list[0]) 워드 파일의 6번째 줄에 내용(list[0])을 작성하겠다는 의미

doc.save(path + list[0] + "_정보.docx") 엑셀에서 받아온 정보의 이름별로 파일명을 지정해서 저장

 

주석과 부가 설명으로도 이해가 안되시는 부분이 있으실 경우 댓글에 남겨주세요.


코드 실행 결과

 

코드 실행 전 디렉터리의 모습

 

before-running
코드 실행 전

 

코드 실행 후 디렉터리의 모습

 

after-running
코드 실행 후

 

생성된 워드 파일의 내용

 

word-file
생성된 워드 파일 내용

 

템플릿으로 사용된 워드 파일과 비교해보면 이름, 포지션, 등번호 뒤에 제대로 된 정보가 입력되어있고

 

아랫줄은 코드를 실행한 날의 날짜로 변경된 모습을 볼 수 있습니다.


여기까지 파이썬 워드파일 업무 자동화의 내용이었습니다.

 

파이썬으로 워드파일을 다루는 방법에 대해서 좀더 자세한 설명이 필요하므로

 

추후에 따로 포스팅 주제로 다루어 설명을 진행하도록 하겠습니다.

 

오늘 살펴본 내용에서 궁금하신 점이나 어려움이 있으시면 댓글로 부담없이 남겨주시기 바랍니다.

 

감사합니다.

반응형