저의 19년식 쉐보레 더뉴트랙스 1.4 터보.. 한동안 잠잠하더니 점화계통에서 문제가 생겼습니다.

그림 1. 엔진 경고등ㅠ (출처:http://carfriends.tunetech.co.kr/bbs/board.php?bo_table=C_1_3&wr_id=112816&page=239)

죄송함니다 사진은 주워왔습니다..차가 덜덜덜하더니 이렇게 경고등이 뜨고 밟아도 안 나가더라고요...

전에도 이런 적이 있어서 점화플러그 교체하고, 또 문제 생겨서 서비스 센터를 갔는데 점화코일이 문제래서 무려 25만원이라는 거금을 들여 교체를 했는데... 왜 또 같은 문제가 일어나니!!

혹시나 다른 부분이 문제인지 싶어 서비스 센터를 갔는데 점화코일이 또 문제라네요... 

게다가 더 슬픈 소식은 1년 AS가 가능하다더라구요.

쉐보레 서비스 센터에서 하면 정보가 공유가 돼서 다른 곳에 가도 가능한데, 제가 교체한 지 1년 안됐다고 하는데 확인이 안된대서 열심히 차를 뒤져서 영수증을 찾아냈지만.........

거기가 정식 서비스센터가 아니었던 겁니다....

여러분 정식 서비스 센터를 꼭 확인하세요... 거기 망했는데... 돌아가지도 못하고......

그림 2. 점화코일 구조 (출처: 위키피디아)

점화코일은 원래 배터리 전압(12V)를 스파크가 일어날 수 있도록 높은 전압으로 바꿔주는 역할을 하는 거라 단순 코일 구조인데...

뭐 일단 보니까 옆면이 탄 자국이 있긴 하더라구요...슬퍼라.. 그래서 일단 또 교체를 했답니다.

하지만 역시 얘가 문제가 아니었습니다. 돌아오는 길에 바로 덜덜덜..

그림 3. 쉐보레 트랙스 정비 매뉴얼

바로 매뉴얼 확인 들어갔습니다. 확실히 밟을 때 잘 안 나가고 규칙적이지 않은 덜덜거림.. 달달달탁타다다닥달달달.. 이런 느낌 역시 실화는 맞는 것 같습니다.

그림 4. OBD2 스캐너 (출처:알리익스프레스)

알리에서 OBD2 스캐너라고 검색하시면 엄청 많이 나오는 차량 스캐너 모듈이 있습니다.

엄청 싸요.. 알리 최고..ㅋㅋㅋㅋ

얘로 바로 스캔 들어가겠슴니다.

그림 5. P0300 오류 코드

참고로 OBD스캐너는

그림 6. OBD 배선도(?) (출처:나무위키)

요런 구조로 되어 있고, 대부분 핸들 아래 왼쪽? 쯤 구석에 박혀 있답니다.

P0300코드는 엔진 실화라고 하네요. 확실히 연소 계통에 문제가 있는 건 맞는 것 같습니다.

슬프게도 점화코일은 교체를 해버렸으니..

그림 7. 빤딱빤딱 점화 플러그

새 점화 플러그를 준비했습니다.

정품으로 사버렸는데.. 다음 편엔 호환품을 구하는 법을 알아보겠습니다.

어쨋든 빤딱빤딱하죠? 흐뭇해집니다.

그림 8. 점화 플러그 구조 (출처:나무위키)

점화플러그는 이렇게 구성되어 있답니다. 그림이 잘 안보이네요.

위쪽의 허연 부분은 그냥 절연체라 큰 의미가 없고, 그림의 나사 부분의 기계적인 구조가 맞아야 물리적인 결합이 가능하고, 가장 왼쪽에 있는 ㄱ자로 꺾인 부분에서 성능이 결정된다고 하네요.

사실 나사 규격만 맞으면 나머지는 크게 신경 쓸 필요가 없지만 궁금하니 직접 측정해 보도록 하겠습니다.

그림 8. 플러그 간격 측정
그림 9. 두께 게이지 측정

보통 플러그 전극 간격은 1mm내외인데, 얘를 바로 측정하기가 쉽지 않으니 두께 게이지를 이용해서 딱 맞는 두께를 찾아 봅니다. 0.65mm짜리가 딱 맞더라구요.

얘를 마이크로미터로 측정해보니 0.66mm 정도로 거의 차이가 없네요. 신기하다..ㅋㅋㅋ

원래는 0.7mm규격으로 나오는데, 네 개 다 비슷한 걸 보니 이 정도는 오차 범위 내인 것 같습니다.

제 차는 4기통이라 4개짜리 세트로 준비했는데, 확실히 점화계통 문제라 그런지 기름이........만땅으로 채웠는데 순식간에 닳더라구요.

기름도 기름이지만 아무래도 불완전 연소가 자꾸 일어나면 찌꺼기가 많이 쌓이겠죠?(뇌피셜)

그래서 일단 급한대로(?) 정품으로 구했지만 다음 편에서는 호환품을 구하는 법을 알아보도록 하겠습니다.

제가 옛날에 토플 공부를 한 적이 있습니다. 이 때 글쓰기의 엄청난 꿀팁을 배웠는데 바로 '훅(hook)'인데요, 맨 처음부터 사람들의 관심을 사로잡아야 그 다음이 진행이 되든 말든 한다는 것이었습니다.

비록 9탄에 와서야 생각이 났지만,, 그래도 연재를 진행하며 고민을 많이 해서 좀 더 나은 결과를 얻지 않았나..(?)하는 마음을 위안으로 삼으며 후기 느낌으로 정리해 보도록 하겠습니다.

한글 공문 매크로 프로그램

좀 구미가 당기시나요? 간단한(?) 설명과 예시 파일은 압축해서 글 아래에 첨부하도록 하겠습니다...만 꼭 저의 제작기를 읽어주셨으면 하는 마음이 들기도 합니다.ㅋㅋㅋㅋ

해당 연재는 누구나 쉽게(?) 접할 수 있는 파이썬을 기반으로, 챗지피티를 적절히 활용하여 단순한 반복 작업을 대신 해주는 프로그램을 제작하는 과정을 담고 있습니다.

코딩을 할 때 챗지피티를 어떡하면 잘 활용해서 호다닥 프로그램을 만들 수 있는지!

최대한 응용하기 쉽게, 자세한 원리나 이론을 설명하기보다 기능적인 관점에서 접근하도록 했으니 차근차근 따라하지 말고(!) 가능한 훑어보기만 하면서 어떤 식으로 진행되나~ 정도만 파악해도 따라할 수 있도록 써보려 노력했습니다. 잘 되었는지는 모르겠지만,,,, 무엇보다 제가 그런 부분을 잘 모르기 때문이죠.(당당)ㅋㅋㅋ

 

첨부파일에는

1. 실행파일
2. 설명서 ppt
3. 예시 엑셀/한글 양식

이렇게 구성돼 있습니다.

그림 1. 첨부 파일 구성

output 폴더는 출력 파일이 저장되는 폴더로, 실행파일을 실행하면 자동으로 생기는 거라 뺐습니다.

 

꼭 인터넷을 뒤지다 보면 '내가 필요한' 작업에 바로 적용할 수 있는, 소위 '날로 먹을 수 있는' 프로그램은 바로 구하기가 참 어렵더라구요...ㅋㅋㅋㅋ 뭔가 애매하게 안 맞다거나..ㅋㅋㅋㅋ 그런 분들은 바꾸고 싶은 부분에 따라 해당되는 소제목을 찾아가면 금방 해결하실 수 있습니다!(광고)ㅋㅋㅋㅋㅋ

 1. 한글 양식 안에 바꾸는 내용 추가하기
 2. 엑셀에서 다른 정보 가져오기
 3. 파일 저장하는 이름 양식 바꾸기

크게 수정이 필요할 부분은 이렇게만 있을 것 같네요. 항상 강조하지만 들어가서 대충 훑어보고 필요한 부분만 적용하시면 아주 효율적으로 적용이 가능할 것 같습니다.ㅋㅋㅋㅋ

 

기반이 되는 코드는 전부 이전 게시글에 있는 코드 조합이라 보시면 되고, 현재 파일이 들어있는 위치를 인식하지 못하는 오류가 떠서 

그림 2. 실행 파일 위치 가져오기

우리 친구가 친절히 수정해줬답니다. 아니 왜 exe로 실행할 때랑 코드로 실행할 때랑 달라지는거야...

import os
import sys

if getattr(sys, 'frozen', False):  # .exe로 실행된 경우
    current_dir = os.path.dirname(sys.executable)
else:  # .py로 실행된 경우
    current_dir = os.path.dirname(os.path.abspath(__file__))

 

 

그림 3. 사용 방법 정리

첨부된 ppt에는 각각의 파일을 어떻게 준비해야 하는지, 어떻게 사용할 수 있는지 나름 구체적으로 정리했습니다. 제 게시글 중에서 유일하게 얘만 차근차근 읽어 보시면 금방 따라할 수 있을 것 같습니다.

 

우선 한글과 엑셀 양식 준비하는 방법이 있습니다.

그림 4. 한글 양식

 한글 양식에서는 '누름틀'이라는 것만 설정하시면 되는데, 얘는 대체 텍스트를 쉽게 넣어주는 기능이라고 하네요. 저는 이번에 처음 알았습니다.ㅋㅋㅋㅋ

 

그림 5. 엑셀 양식

 엑셀은 어떤 종류의 데이터가 어떤 순서로 정리돼야 하는지 정리를 했습니다.

 

그림 6. 한글 환경설정

양식과 별개로 한글 프로그램에서 어떤 설정을 해야 하는지, 파일 저장은 어떻게 해야 하는지 제가 문제를 겪은 부분을 정리했는데, 스트레스 받으면서 겨우 해결했는데 막상 해결하니 너무 단순한 것 같기도 하네요. 뭔가 억울한 느낌?ㅋㅋㅋㅋㅋㅋㅋ 뭐 우리 주변의 문제들도 마찬가지로 다 해결하고 보면 별 것 아니니까요~~

그림 7. 실행 환경설정

추가로 폴더 구성을 어떻게 해야 하는지, 윈도우 콘솔을 써본 적 없는 분이 겪을 수 있을 법한 문제와 해결 방안을 같이 첨부했습니다. 콘솔 사용에 익숙까진 아니더라도 한 번 쯤은 써보신 분께는 별 문제가 아니겠지만 아닌 사람들도 있으니까요~~~~...사실 저도 꽤 익숙하다고 생각했는데 왜 이런 별 거 아닌 부분이 맨날 헷갈리는지..ㅋㅋㅋㅋㅋ

 

만약 중간에 중단한 경우 파일/폴더 삭제가 안되면

코드 내부에서 한글 중단 작업이 실행되기 때문에 프로그램을 한번 더 실행해 보시고, 그래도 안되면

그림 8. 작업 관리자 실행

(컨트롤+쉬프트+esc) 혹은 (컨트롤+알트+delete -> 작업관리자)로 작업 관리자를 들어가서 앱 혹은 백그라운드 프로세스에서 한글을 찾아서 작업끝내기를 해주시면 됩니다.


 

첨부 파일은 용량 문제로 세 개로 나눴는데, 같은 폴더에 다운받으시고 vol1 파일 켜서 압축 풀기 하시면 됩니다!

한글 공문 양식 매크로.vol1.egg
10.00MB
한글 공문 양식 매크로.vol2.egg
10.00MB
한글 공문 양식 매크로.vol3.egg
7.98MB

 

혹시 실행 파일이라 불안하신 분은

코드를 실행 파일로 변환하기

요기를 따라서 아래 코드를 실행파일로 바꾼 다음 첨부된 실행 파일 (pdf변환.exe)을 대체해서 쓰셔도 됩니다~~

def getFiles():
    import os,sys
    
    if getattr(sys, 'frozen', False):  # .exe로 실행된 경우
        current_dir = os.path.dirname(sys.executable)
    else:  # .py로 실행된 경우
        current_dir = os.path.dirname(os.path.abspath(__file__))
    
    print('갈치의 신나는 일상 티스토리 블로그 많은 관심 부탁드립니다.')
    print('https://sunnysides.tistory.com/')
    
    file_list   = os.listdir(current_dir)
    
    for file in file_list:
        if '.xlsx' in file:
            xl_file = file
            
        elif '.hwp' in file:
            hwp_file = file
            pdf_file = file.replace('.hwp','.pdf')
            
    if 'output' not in file_list:
        os.mkdir(current_dir +'/output')
        
    pdf_path = current_dir +'/output/'
    
    return current_dir+'/', xl_file, hwp_file, pdf_file, pdf_path



def getCompanyNames(xl_path,xl_file):
    from openpyxl import load_workbook
    
    file_path  = xl_path + xl_file
    wb         = load_workbook(file_path) 
    ws         = wb.active 
    total_rows = sum(1 for row in ws["B"] if row.value is not None)
    
    company_list = []
    poc_list     = []
    adrsee_list  = []
    
    for i in range(total_rows-1):
        company_list += [ws['B%s'%(i+2)].value]
        poc_list     += [ws['C%s'%(i+2)].value]
        adrsee_list  += [ws['D%s'%(i+2)].value]
    
    wb.close()
    
    return company_list,poc_list,adrsee_list



def getPDFfromBodyChange(hwp_path,hwp_file,pdf_path,cname,pname,aname,event):
    import win32com.client as win32
    import re,os

    file_path  = hwp_path+hwp_file
    pdf_path1  = pdf_path+'%s-%s.pdf'%(event,cname)
    
    p=re.compile(r'(.+/)(.+.pdf)')
    m=p.search(pdf_path1).group(2)
    print(m)
    
    if m in os.listdir(pdf_path):
        return
        
    hwp = win32.Dispatch("HWPFrame.HwpObject")
    hwp.XHwpWindows.Item(0).Visible = True
    
    hwp.Open(file_path,'HWP','forceopen:true')
    hwp.PutFieldText("field1",r'%s%s'%(cname,aname))
    hwp.PutFieldText("field2",r'%s %s님'%(cname,pname))
    hwp.SetMessageBoxMode(0x1000)
    hwp.SaveAs(pdf_path+'%s.hwp'%(cname),'HWP','')
    
    action = hwp.CreateAction("Print")
    option = action.CreateSet()
    
    action.GetDefault(option)
    option.SetItem("Device", 3)
    option.SetItem("FileName", pdf_path1)
    action.Execute(option)
    hwp.Quit()

    return




current_folder,xl,hwp,pdf,pdf_folder = getFiles()

clist,plist,alist = getCompanyNames(current_folder,xl)

event = input(r'공문명을 입력하고 엔터를 누르세요: ')

if event=='admin-test':
    idxs = 2
else:
    idxs = len(clist)


for i in range(idxs):
    getPDFfromBodyChange(current_folder, hwp, pdf_folder, clist[i], plist[i], alist[i],event)

 

여기까지 첫 게시글 연재를 마무리하게 되었습니다. 벌써 기운을 다 쓴 느낌... 읽어주신 모든 분들 다 행복한 2025년 되시길 바랍니다~ 고맙습니다!!

2025.03.01 - [파이썬 업무 자동화/한글 문서 작업 자동화] - 파이썬 한글 매크로 프로그램 제작 (feat. ChatGPT) - 7. 현재 폴더 위치 적용

 

파이썬 한글 매크로 프로그램 제작 (feat. ChatGPT) - 7. 현재 폴더 위치 적용

2025.03.01 - [파이썬 업무 자동화/한글 문서 작업 자동화] - 파이썬 한글 매크로 프로그램 제작 (feat. ChatGPT) - 6. 실행 파일 변환 파이썬 한글 매크로 프로그램 제작 (feat. ChatGPT) - 6. 실행 파일 변환202

sunnysides.tistory.com

양식 파일은 내용이 바뀌어도 그냥 새로 저장하면 되는데, 피디에프 파일 제목은 (공문명)-(회사명).pdf 이렇게 저장되면 좋겠죠?

프로그램에서 알아서 회사명으로 저장은 해주는데, 앞에 공문명은 내가 임의로 입력하면 좋겠네요!

입력값 받아오기

파이썬에서 입력은 input이라는 함수로 받아올 수 있답니다.

간단하게

x = input('값을 입력하고 엔터를 눌러주세요 :')

이렇게 함수 안에 값이 화면에 나오게 되고, 이후에 받은 입력 값을 x에 저장한답니다.

 

그럼 이전 코드에 해당 코드를 추가하도록 바꿔 보겠습니다.

def getFiles():
    import os
    
    current_dir = os.path.dirname(__file__)
    file_list   = os.listdir(current_dir)
    
    for file in file_list:
        if '.xlsx' in file:
            xl_file = file
            
        elif '.hwp' in file:
            hwp_file = file
            pdf_file = file.replace('.hwp','.pdf')
            
    if 'output' not in file_list:
        os.mkdir(current_dir +'/output')
        
    pdf_path = current_dir +'/output/'
    
    return current_dir+'/', xl_file, hwp_file, pdf_file, pdf_path



def getCompanyNames(xl_path,xl_file):
    from openpyxl import load_workbook
    
    file_path  = xl_path + xl_file
    wb         = load_workbook(file_path) 
    ws         = wb.active 
    total_rows = sum(1 for row in ws["B"] if row.value is not None)
    
    
    company_list = []
    for i in range(total_rows-1):
        company_list += [ws['B%s'%(i+2)].value]
    
    return company_list



def getPDFfromBodyChange(hwp_path,hwp_file,pdf_path,company_name,event):
    import win32com.client as win32
    
    hwp = win32.Dispatch("HWPFrame.HwpObject")
    hwp.XHwpWindows.Item(0).Visible = True
    
    file_path  = hwp_path+hwp_file
    pdf_path1  = pdf_path+'%s-%s.pdf'%(event,company_name)
    
    hwp.Open(file_path,'HWP','forceopen:true')
    hwp.PutFieldText("field",r' 까꿍')
    hwp.SetMessageBoxMode(0x1000)
    hwp.SaveAs(pdf_path+'%s.hwp'%(company_name),'HWP','')
    
    action = hwp.CreateAction("Print")
    option = action.CreateSet()
    
    action.GetDefault(option)
    option.SetItem("Device", 3)
    option.SetItem("FileName", pdf_path1)
    action.Execute(option)
    hwp.Quit()
    
    return



current_folder,xl,hwp,pdf,pdf_folder = getFiles()

company_list = getCompanyNames(current_folder,xl)

event = input(r'공문명을 입력하고 엔터를 누르세요: ')

for company in company_list:
	getPDFfromBodyChange(current_folder,hwp,pdf_folder,company,event)

해당 코드를 실행하면

그림 1. 입력 값 받기

이렇게 입력값을 받을 수 있고,

그림 2. 출력 파일

이렇게 pdf 앞에 aa-라는 문구가 추가되게 된답니다!

event라는 변수가 중간중간 추가된 것 말고 바뀐 부분은 없습니다. 지금까지와 다르게 엄청나게 간단한 내용이었네요. 다행입니다...ㅋㅋㅋㅋㅋ 좀 허무한 것 같기도 하고...

 

다음 시간엔 이렇게 만든 코드를 실행파일로 바꿔서 주변 사람에게 공유할 수 있도록 변환해보도록 하겠습니다.

2025.03.01 - [파이썬 업무 자동화/한글 문서 작업 자동화] - 파이썬 한글 매크로 프로그램 제작 (feat. ChatGPT) - 6. 실행 파일 변환

 

파이썬 한글 매크로 프로그램 제작 (feat. ChatGPT) - 6. 실행 파일 변환

2025.03.01 - [파이썬 업무 자동화/한글 문서 작업 자동화] - 파이썬 한글 매크로 프로그램 제작 (feat. ChatGPT) - 5. 코드 합치기 파이썬 한글 매크로 프로그램 제작 (feat. ChatGPT) - 5. 코드 합치기2025.02.25

sunnysides.tistory.com

우리는 앞선 게시글들에서 파일이 저장된 위치를 고정값으로 입력하여 사용하는 법을 익혔습니다. 근데 우리는 배포를 생각해야하죠? 그렇다면 고정 위치를 코드에 넣어둔다면 얘가 정신을 못 차릴 수밖에 없습니다.

매번 새로 입력해줄 수도 있겠지만 그렇다면 실행파일 하나만 배포하는 의미가 없겠죠?

이번 글에서는 파일 위치가 바껴도 작업을 진행할 수 있게 바꿔보도록 하겠습니다.

현재 폴더 위치 적용

대신 프로그램과 데이터 파일이 같은 폴더에 있게 해야 합니다. 마냥 전체 컴퓨터를 뒤져서 찾기는 쉽지 않겠죠??

코딩으로 들어가기 전에 과정을 먼저 생각해보도록 하겠습니다.

1. 현재 프로그램이 있는 위치 받아오기

2. 현재 위치에서 데이터 파일 가져오기

3. 데이터 읽어오기

4. 출력 파일 저장하기

 

1, 2번 과정은 코드에서 알아서 진행하게 될 것 같고,

3번 과정에서는 한글 양식에 집어넣을 데이터가 몇 종류인지 받아오는 과정이 추가되면 좋을 것 같고,

4번 과정에서는 출력파일이 저장될 폴더가 하위 폴더로 생성되면 좋을 것 같죠?

위 내용들을 차근차근 추가해보도록 하겠습니다.

 

 

xl_path = r'D:/한글 양식 자동화/'
xl_file = r'회사이름.xlsx'
hwp_path = r'D:/한글 양식 자동화/'
hwp_file = r'양식.hwp'
pdf_path = r'D:/한글 양식 자동화/ddd/'
pdf_file = r'양식.pdf'

company_list = getCompanyNames(xl_path,xl_file)

for company in company_list:
	getPDFfromBodyChange(hwp_path,hwp_file,pdf_path,company)

지난 코드에서 xl_path, hwp_path는 우리 프로그램과 같은 위치에 있을 테니 프로그램이 위치한 현재 폴더를 가져오는 함수가 있으면 좋겠죠?

 

파이썬에서는 한 줄이면 됩니다!!!..정확히는 두 줄....ㅋㅋㅋㅋ

import os
current_dir = os.path.dirname(__file__)

# print(current_dir)

요렇게 하면 현재 위치가 저장된 current_dir이라는 변수가 생성됩니다!

직접 확인하고 싶으면 print함수를 쓰면 된다고 말씀드렸죠?!

 

다음으로,

현재 폴더에서 엑셀 파일과 한글 양식을 찾아보도록 하겠습니다.

우리 폴더에는 '프로그램, 한글, 엑셀' 총 세 개만 들어있습니다. 그렇다면 확장자가 xlsx면 엑셀 파일, hwp면 한글 파일이 되겠죠?

1. 현재 폴더 찾기
2. 현재 폴더에 들어있는 것들 목록 구하기
3. 한글 파일, 엑셀 파일 갖고오기

순서로 진행하면 될 것 같습니다.

2번에서 파일 목록을 쭈루룩 뒤져서 3번에서 각각 변수에 저장하면 될 것 같죠?

file_list = os.listdir()

listdir이라는 함수를 사용하면 하위 폴더나 파일 목록을 모두 갖고올 수 있습니다.

이제 이 목록에서 확장자에 따라 기존에 있던 hwp_file과 xl_file 변수에 저장해보도록 하겠습니다.

for file in file_list:
    if '.xlsx' in file:
        xl_file = file
    
    elif '.hwp' in file:
        hwp_file = file

전체 file_list에 들어있는 file에 대해 각각의 조건이 맞으면 xl_file, hwp_file이라는 변수에 해당되는 값을 집어 넣는 조건문이 추가된 구조입니다.

같은 확장자가 여러 개면 마지막 값으로 덮어씌기가 되겠죠? 그래서 해당되는 값이 하나씩만 있어야 하는 게 중요하답니다. 그렇게 구한 위치와 파일명을 기존에 만든 함수에 각각 넣어주면 데이터 읽어오기까지 끝낼 수 있답니다.

 

4번 저장하기는,

파일이 중구난방으로 저장되면 정신 사납겠죠? 일단 현재 폴더에서 'output'이라는 하위 폴더에 출력 파일을 저장하도록 해봅시다. 그러려면 일단 폴더가 있어야 겠죠?

if 'output' not in file_list:
    os.mkdir(current_dir+r'\output')
    # os.mkdir(current_dir+'\\output')

혹시나 같은 이름의 폴더가 있으면 문제가 생길 수 있으므로, output이라는 폴더가 없을 경우에만 새로 만들어주는 코드를 추가했습니다. current_dir 바로 뒤에 output이라는 위치를 붙이면 폴더가 구분이 되지 않고 이름이 이어 붙기 때문에 \ 문자로 구분을 꼭 해줘야 한답니다.

여기서 '\' 문자의 특성 때문에 여러가지 방법이 가능하답니다. 자세한 건 파이썬 '문자열'을 공부하시면 된답니다.

그런데 사실 '/' 문자를 써도 돼요. 저는 얘를 선호해요ㅋㅋㅋ

 

이제 마지막으로 pdf 파일 이름만 설정하면 끝입니다!

pdf_file 변수는 hwp_file 이름과 똑같은데 확장자만 다르죠??

여러 가지 방법이 있겠지만, 단순하게 생각하면 문자열에서 문자만 바꾸는 식으로 하겠습니다.

pdf_file = hwp_file.replace('.hwp','.pdf')

한 줄이면 끝난답니다!

 

종합해서 함수로 만들면 깔끔하겠죠?

def getFiles():
    import os
    
    current_dir = os.path.dirname(__file__)
    file_list   = os.listdir(current_dir)
    
    for file in file_list:
        if '.xlsx' in file:
            xl_file = file
            
        elif '.hwp' in file:
            hwp_file = file
            pdf_file = file.replace('.hwp','.pdf')
            
    if 'output' not in file_list:
        os.mkdir(current_dir +'/output')
        
    pdf_path = current_dir +'/output'
    
    return current_dir, xl_file, hwp_file, pdf_file, pdf_path

folder,xl,hwp,pdf,pdf_folder = getFiles()

생각해보니 current_dir을 구했으니 굳이 xl_path와 hwp_path를 만들지 말고 그대로 사용하면 되겠더라구요. 그래서 걔네는 패쓰!!

이렇게 원래 폴더로 들어가면 output이라는 폴더가 만들어진 것을 알 수 있습니다.

그렇게 그대로 넣기만 한다면.....

그림 1. 이럴 수가

이런 문제가 생기네요. 얘가 앞서 언급한 폴더 구분이 안된다는 예시입니다.ㅋㅋㅋㅋㅋㅋㅋ

코드를 잘 살펴보고 폴더 위치 값이 항상 '/'로 구분되게 해 놓으면 문제가 해결 될 거에요(아마도)ㅋㅋㅋㅋㅋ

그렇게 최종 코드는

def getFiles():
    import os
    
    current_dir = os.path.dirname(__file__)
    file_list   = os.listdir(current_dir)
    
    for file in file_list:
        if '.xlsx' in file:
            xl_file = file
            
        elif '.hwp' in file:
            hwp_file = file
            pdf_file = file.replace('.hwp','.pdf')
            
    if 'output' not in file_list:
        os.mkdir(current_dir +'/output')
        
    pdf_path = current_dir +'/output/'
    
    return current_dir+'/', xl_file, hwp_file, pdf_file, pdf_path



def getCompanyNames(xl_path,xl_file):
    from openpyxl import load_workbook
    
    file_path  = xl_path + xl_file
    wb         = load_workbook(file_path) 
    ws         = wb.active 
    total_rows = sum(1 for row in ws["B"] if row.value is not None)
    
    
    company_list = []
    for i in range(total_rows-1):
        company_list += [ws['B%s'%(i+2)].value]
    
    return company_list



def getPDFfromBodyChange(hwp_path,hwp_file,pdf_path,company_name):
    import win32com.client as win32
    
    hwp = win32.Dispatch("HWPFrame.HwpObject")
    hwp.XHwpWindows.Item(0).Visible = True
    
    file_path  = hwp_path+hwp_file
    pdf_path1  = pdf_path+'%s.pdf'%(company_name)
    
    hwp.Open(file_path,'HWP','forceopen:true')
    hwp.PutFieldText("field",r' 까꿍')
    hwp.SetMessageBoxMode(0x1000)
    hwp.SaveAs(pdf_path+'%s.hwp'%(company_name),'HWP','')
    
    action = hwp.CreateAction("Print")
    option = action.CreateSet()
    
    action.GetDefault(option)
    option.SetItem("Device", 3)
    option.SetItem("FileName", pdf_path1)
    action.Execute(option)
    hwp.Quit()
    
    return



current_folder,xl,hwp,pdf,pdf_folder = getFiles()

company_list = getCompanyNames(current_folder,xl)

for company in company_list:
	getPDFfromBodyChange(current_folder,hwp,pdf_folder,company)

이렇게 된답니다!

2025.03.01 - [파이썬 업무 자동화/한글 문서 작업 자동화] - 파이썬 한글 매크로 프로그램 제작 (feat. ChatGPT) - 5. 코드 합치기

 

파이썬 한글 매크로 프로그램 제작 (feat. ChatGPT) - 5. 코드 합치기

2025.02.25 - [파이썬 업무 자동화/한글 문서 작업 자동화] - 파이썬 한글 매크로 프로그램 제작 (feat.ChatGPT) - 4. 한글 문서 pdf로 추출하기 파이썬 한글 매크로 프로그램 제작 (feat.ChatGPT) - 4. 한글 문

sunnysides.tistory.com

하나를 끝내면 자꾸 추가로 해보고 싶은 것들이 생기네요. 처음 코딩을 시작할 때가 생각납니다.

컴퓨터로 코딩은 그냥 하는 거 아닌가? 왜 뭘 자꾸 설치하라고 하지? 이런...ㅋㅋㅋㅋ 그렇게 스트레스를 받으며 프로그래밍을 하려면 컴파일러라는 것이 필요하단 걸 알게 되고... 이렇게 생각하니 어느새 많이 성장한 것 같군요.ㅋㅋㅋ

이 프로젝트는 프로그래밍에 대해 그 때의 저처럼 아무 것도 모르는 친구에게 배포하는 것을 전제로 시작했기 때문에 프로그래밍을 위한 프로그램...을 설치하지 않고도 사용할 수 있도록 변환을 해보도록 하겠습니다.

그림 1. 어김 없는 챗지피티

우리 친구에게 물어보니 두 가지 방법이 있다고 합니다.

그림 2. 뭔가 복잡한 방법
그림 3. 단순한 게 최고야

우리는 얼른 일만 처리해줄 프로그램이 필요하죠? GUI는 신경 쓸 시간이 없습니다. 바로 클릭만 하면 되게 exe로 변환해서 끝내보도록 하겠습니다.

그림 4. 간단하구만

잘 보시면 .exe. 변환 명령어 코드란 왼쪽 위에 sh라고 적혀 있습니다. 얘는 우리가 평범하게(?) 사용하던 쉘이라는 건데, 간단하게 프롬프트에서 실행하는 코드라고 생각하시면 됩니다.(윈도우키+R -> cmd 후 엔터) 이걸 이제야 말씀드리네요.ㅋㅋㅋ

참고로, 저는 아나콘다에서 스파이더라는 파이썬 코딩 프로그램(인터프리터)을 쓰기 때문에 그냥 이유는 없지만 anaconda prompt를 썼답니다.

그림 5. 프롬프트 첫 화면

프롬프트를 처음 켜면 왼쪽에 요렇게 현재 위치가 뜨는데, 얘를 내 파이썬 코드가 있는 위치로 이동해줘야 합니다!

저는 'D:\한글 양식 자동화\'에 저장했기 때문에 이동을 해줘야해요

그림 6. 드라이버 이동

이렇게 D드라이브로 먼저 이동하고,

그림 7. 현재 폴더 이동

cd는 프롬프트에서 폴더 이동(change directory) 단축키입니다. cd D:\한글 까지만 치고 탭을 치면 요렇게 자동완성도 가능하답니다. 비슷한 이름이 여러 개 있으면 탭 키를 여러 번 누르면 돼용

그림 8. 설치

그렇게 이동한 후에 해당 코드를 실행하면 요렇게 진행되고, 

그림 9. 폴더 생성
그림 10. 파일 생성

dist라는 폴더가 생기고, automation이라는 파일이 생긴답니다!

그림 11. 프로그램 실행

드디어 프로그램 제작까지 완성입니다..! 프로그램을 실행하면 코드 돌린 것과 똑같이 돌아간답니다.

해당 팝업은 보안(?) 관련 문제라는데, 해결하려면 좀 복잡한 설정이 필요한 관계로 일단 '모두 허용' 버튼 누르기는 직접 해야 한다고 말하려고용. 추가 작업으로 남겨놓도록 하겠습니다.

 

그런데 문제가 생겼습니다. 중간에 중단이 안 되는데요... 그만두고 싶어도 끝까지 반복이 멈추지 않는다는....ㅋㅋㅋㅋ 요 문제까지 해결해보도록 하겠습니다.

그림 12. 도와줘요 챗지피티

우리는 콘솔 프로그램으로 제작을 했기 때문에 이 방법을 따르면 되는데.... 문제는 실행 후 콘솔 창이 안 뜬다는 겁니다... 그냥 실행만 우다다...

그림 13. 굳

프로그램 제작을 새로 해야하나 봅니다.. 삭제하고 다시 설치!

그림 14. 완성

오 이제 프로그램을 실행하면 요 까만 화면이 뜨는데, 여기서 컨트롤+C를 누르면 중간에 취소도 가능하게 됩니다!

그림 15. 최종 결과

원래 폴더를 보시면 이렇게 여러 폴더랑 파일이 생기는데, build와 automation.spec 파일은 삭제해도 된답니다! dist폴더 안에 exe파일이 생기는데, 얘만 배포하면 됩니다.

드디어 프로젝트가 일단 끝났습니다!!!

하지만 뭔가 아쉽죠? 얘는 코드가 고정이라, 데이터 파일 위치, 저장 위치 등을 바꿀 수 없기 때문에 마냥 배포한다면 문제가 생길 수밖에 없습니다(당당)

일단 소기의 목적은 달성했기 때문에 기분 좋게 마무리하고 다음 글에 이어서 진행하도록 하겠습니다.

읽어주셔서 고맙습니다~~

2025.02.25 - [파이썬 업무 자동화/한글 문서 작업 자동화] - 파이썬 한글 매크로 프로그램 제작 (feat.ChatGPT) - 4. 한글 문서 pdf로 추출하기

 

파이썬 한글 매크로 프로그램 제작 (feat.ChatGPT) - 4. 한글 문서 pdf로 추출하기

2025.02.25 - [파이썬 업무 자동화/한글 문서 작업 자동화] - 파이썬 한글 문서 매크로 제작기 (feat. ChatGPT) - 3. 회사명 갖고 오기 파이썬 한글 문서 매크로 제작기 (feat. ChatGPT) - 3. 회사명 갖고 오기202

sunnysides.tistory.com

드디어 끝이 다가오는 것 같습니다!! 사실 어떻게 결과물이 나올 지 저도 잘 모르겠슴니다... 진행하면서 이거 넣으면 좋겠다 저거 넣으면 좋겠다 하면서 추가하는 느낌이랄까...ㅋㅋㅋㅋㅋ

 

오늘은 그냥 지금까지 했던 작업을 통합하는 과정인데, 그냥 담백하게 적으면 본문이 너무 짧을 것 같아 사족을 좀 많이 붙여서 중간중간 굵은 글씨가 별로 없습니다. 별로 중요하지 않은 내용이란 뜻이죠.ㅋㅋㅋ 참고하시면 되겠습니다.ㅋㅋㅋ

 

하나의 파일에 통합 코드 작성하기

어떻게 표현을 해야할 지 모르겠네요.. 포스팅은 넘나 어려운 것..

이번 시간엔 지금까지 배운 코드를 하나로 통합하는 걸 해보도록 하겠습니다.

보통 코드를 짤 때는 바로 쓰는(?) 코드를 돌리는 실행 파일과 그 코드에 필요한 함수(?) 같은 것들이 포함된 파일을 따로 만들더라구요. 하지만 그렇게 하기엔 우리의 코드는 매우 단순하기 때문에(!) 하나의 파일에 통합해보도록 하겠습니다.

 

해당 연재의 2편에서 설명했듯, 우리의 프로젝트는

1. 엑셀 파일을 열어 회사 목록을 가져온다.  → 3. 회사명 갖고오기 

2. 한글 파일을 열어 앞서 구한 회사명을 입력한다. 2. 내용 바꾸기

3. 수정된 한글 파일을 pdf로 저장한다. 4. pdf로 추출하기

4. pdf 파일을 메일로 첨부해서 보낸다. ..?

 의 단계를 가지고 있습니다.

메일로 첨부해서 보내기는 약간 미래의 작업으로...ㅋㅋㅋㅋㅋㅋㅋ

 

보통 코드는 필요한 작업을 그때그때 본문에 추가하는 것이 아니라, 자주 쓰는, 혹은 쓰게 될 작업은 함수라는 것으로 만들어서 미리 가지고 있습니다. 그러면 같은 작업을 반복해서 작성할 필요 없이 필요할 때 불러서 쓸 수 있게 되는 것이죵.

위의 단계 목록에서 각 단계가 모두 함수로 표현된다고 생각하시면 됩니다.

 

파이썬에서 함수는

def 함수이름(입력값):
 
어쩌구 저쩌구

return 출력값

의 구조로 되어 있습니다. 입력값이나 출력값을 따로 안 쓰겠다 싶으면 빈 칸으로 둬도 괜찮습니다.

 

함수에 대해 자세히 공부하는 건 또 다음으로 미뤄두고(!) 바로 실전 응용으로 들어가 보겠습니다.

def getCompanyNames(xl_path,xl_file):

    from openpyxl import load_workbook
    
    file_path = xl_path + xl_file
    wb = load_workbook(file_path) 
    ws = wb.active 
    
    total_rows = sum(1 for row in ws["B"] if row.value is not None)
    
    company_list = []
    
    for i in range(total_rows-1):
        company_list += [ws['B%s'%(i+2)].value]
    
    return company_list

앞에서 했던 코드가 그대로 들어있는 뭔가가 생겼죠?

입력 값에는 왠지~~ 따로 설정하고 싶은 위치와 파일에 대한 변수를 넣는 걸로 했습니다.

위의 코드의 경우, getCompanyNames라는 함수를 불러올 때 path,file라는 변수를 두 개 입력하면 내부의 작업을 통해 저장된 company_list 값을 가지는 변수로 바뀐다고 생각하시면 됩니다.

근데 지금은 path와 file라는 입력 변수가 본문에서 안 쓰였죠? 하지만 우리가 getCompanyNames라는 함수는 저 둘의 변수를 써야한다고 약속했기 때문에 무슨 값이라도 넣어주긴 해야 합니다. 만약 이렇게 본문에서 쓰이지 않는다면 굳이 입력 값에 넣을 필요가 없이 빈 칸으로 두고 나중에 불러올 때 빈 괄호로 놔두시면 됩니다.

xl_path와 xl_file은 각각 엑셀 파일이 들어있는 위치와 엑셀 파일 이름으로 하고 싶네요. 사실 abc,def 이렇게 해도 되긴 합니다만...변수가 많아지면 어렵겠죠?

사실 코딩은 변수 이름 정하는 게 제일 어렵습니다.(저한테는)ㅋㅋㅋ

이제 1단계가 끝났습니다.

 

마찬가지 방식으로 2단계에 대해서는 왠~~~지 3단계랑 합치고 싶지 않나요?ㅋㅋㅋㅋ 뭔가 내용 바꾸고 추출하기가 한 단계로 이뤄져야 할 것 같은 느낌이랄까?ㅋㅋ

def getPDFfromBodyChange(hwp_path,hwp_file,pdf_path,company_name):

    import win32com.client as win32
    
    hwp = win32.Dispatch("HWPFrame.HwpObject")
    hwp.XHwpWindows.Item(0).Visible = True
    
    file_path = hwp_path+hwp_file
    pdf_path1  = pdf_path+'%s.pdf'%(company_name)
    hwp.Open(file_path,'HWP','forceopen:true')
    
    hwp.PutFieldText("field",r' %s')%(company_name)
    
    
    hwp.SetMessageBoxMode(0x1000)
    
    new_file_save = hwp.SaveAs(pdf_path+'%s.hwp'%(company_name),'HWP','')
    
    action = hwp.CreateAction("Print")
    option = action.CreateSet()
    
    action.GetDefault(option)
    option.SetItem("Device", 3)
    option.SetItem("FileName", pdf_path1)
    
    action.Execute(option)
    hwp.Quit()
    
    return

자! 여기선 앞서 말씀드렸다시피 저장하면 땡!인 상황이죠? 그래서 return 뒤에 출력값이 비어있도록 했습니다.ㅋㅋㅋㅋ

앞에서 배운 내용이 합쳐지고 함수 안에 들어가 있는 게 전부입니다. 어렵지 않아요~~

hwp.어쩌구 형식이 포함된 함수들은 우리가 임의로 결정하는 게 아니니 구조만 익히면 복붙하면 되고, path, '%s.pdf'%(company_name) 같은 기본 파이썬 문법만 보면 돼요!ㅋㅋㅋ

 

이제 각각의 작업을 한 묶음으로 만들었으니 본격적인 본문 작성을 시작해 봅시다.

파이썬에서 함수는 항상 먼저 선언되고, 본문에서 앞서 선언된 함수를 사용하는 순서로 진행됩니다.

함수1

함수2

본문

느낌 아시겠죠??

 

여기에 맞춰 본문을 어떻게 쓸 지 생각을 먼저 해보겠습니다.

(엑셀에서 회사 이름 갖고 오기) → (회사 이름마다 한글 파일 수정해서 저장하기)

어디서 반복문이 들어가야하는 지 아시겠나요? 맞습니다! 엑셀은 한 번만 불러오고, 그 이름에 맞게 한글을 요렇게 저렇게 반복하면 되겠죠?!ㅋㅋㅋ

def getCompanyNames(xl_path,xl_file):

    from openpyxl import load_workbook
    
    file_path = xl_path + xl_file
    wb = load_workbook(file_path) 
    ws = wb.active 
    
    total_rows = sum(1 for row in ws["B"] if row.value is not None)
    
    company_list = []
    
    for i in range(total_rows-1):
        company_list += [ws['B%s'%(i+2)].value]
    
    return company_list



def getPDFfromBodyChange(hwp_path,hwp_file,pdf_path,company_name):

    import win32com.client as win32
    
    hwp = win32.Dispatch("HWPFrame.HwpObject")
    hwp.XHwpWindows.Item(0).Visible = True
    
    file_path = hwp_path+hwp_file
    pdf_path1  = pdf_path+'%s.pdf'%(company_name)
    hwp.Open(file_path,'HWP','forceopen:true')
    
    hwp.PutFieldText("field",r' 까꿍')
    
    
    hwp.SetMessageBoxMode(0x1000)
    
    new_file_save = hwp.SaveAs(pdf_path+'%s.hwp'%(company_name),'HWP','')
    
    action = hwp.CreateAction("Print")
    option = action.CreateSet()
    
    action.GetDefault(option)
    option.SetItem("Device", 3)
    option.SetItem("FileName", pdf_path1)
    
    action.Execute(option)
    hwp.Quit()
    
    return
  
  
  
xl_path = r'D:/한글 양식 자동화/'
xl_file = r'회사이름.xlsx'
hwp_path = r'D:/한글 양식 자동화/'
hwp_file = r'양식.hwp'
pdf_path = r'D:/한글 양식 자동화/ddd/'
pdf_file = r'양식.pdf'

company_list = getCompanyNames(xl_path,xl_file)

for company in company_list:
	getPDFfromBodyChange(hwp_path,hwp_file,pdf_path,company)

앞서 계획한대로 company_list로 회사 목록을 먼저 만들고, 각 회사에 대한 내용을 for 구문으로 한글 문서 제작을 반복하게 만들었습니다!

2025.02.25 - [파이썬 업무 자동화/한글 문서 작업 자동화] - 파이썬 한글 문서 매크로 제작기 (feat. ChatGPT) - 3. 회사명 갖고 오기

 

파이썬 한글 문서 매크로 제작기 (feat. ChatGPT) - 3. 회사명 갖고 오기

2025.02.23 - [파이썬 업무 자동화/한글 문서 작업 자동화] - 파이썬 한글 문서 매크로 제작기 - 2. 내용 바꾸기 파이썬 한글 문서 매크로 제작기 - 2. 내용 바꾸기2025.02.23 - [파이썬 업무 자동화/한글

sunnysides.tistory.com

이번 글에서는

한글 문서 pdf로 뽑아내기

를 해 보도록 하겠습니다.

뭔가 시작은 어려웠는데 정리하다 보니 왜 이렇게 쉬운 내용을 어려워했지 싶네요. 세상 만사 마음 먹기 나름이라는 옛말은 어디든지 해당되는 것 같네요ㅋㅋㅋ

그림 1. 이젠 익숙해진 지피티
그림 2. 엥 형이 왜 떠?

하.. 다시 문제가 생겼습니다. 자꾸 물어봐도 똑같은 대답 밖에 안 나오네요..

이렇게 '세계적으로(?) 유명하지 않은' + '내가 지금 필요한' 작업은 꼭 에러가 뜨더라구요. 하지만 걱정 마세요. 우리에겐 구글신이 있으니까...ㅋㅋㅋ

야매로 코드 짜깁기를 하던 우리는 도저히 각 함수들이 뭘 의미하는지 알 수 없습니다. 찾아보고 싶지도 않고, 찾았다고 알아먹을 수 있지도 않아요. 그럴 때는 항상 처음 사용한 라이브러리를 '뒤져본다'고 생각하시면 된답니다~

열심히 'win32com' 'hwpframe' 같은 걸 검색해본 결과(막무가내로 검색해서 어떻게 찾았는지 기억도 안 나네요ㅋㅋㅋ) 천재 한컴 개발자분들이 우리가 쓰던 라이브러리를 만들었다는 사실을 알아냈습니다.

https://store.hancom.com/board/devmanualList.do?

 

글로벌 소프트웨어의 리더, 한글과컴퓨터

 

store.hancom.com

여기에 우리가 사용할 만한 내용이 다 정리가 되어 있습니다!!!!

하지만 쓸 줄 모르죠?ㅋㅋㅋㅋㅋㅋㅋ

그림 3. 찾았다 인쇄..

문서를 뒤져서 프린트를 해 줄 것 같은 놈을 찾았습니다.

그림 4. 왜 pdf로 저장은 따로 있어..

겨우겨우 Action ID 가 Print이고, Item ID에서 PIT_UT1 Type의 3번이 pdf 파일로 저장인 것을 알았습니다. 찾았죠? 이제 다 끝났다고 보시면 됩니다. 오평파(이썬).

그림 5. 그렇구나.

뭔가 사용할 수 있을 줄 알았는데, 너무 어려웡.. 그렇다면!!

그림 6. 주워들은 거 조합해서 물어보기

답은 있어보이게 물어보기 신공입니다. 휴 역시 해결.

이렇게 챗지피티를 쓸 때도 필요한 요소를 대략적으로라도 찾아서 물어보면 해결의 실마리가 보인답니다...였습니다만...

 

그림 7. 이 새..친구는 머야...

하..............................에러 문구는 안 뜨고 저장도 잘 되는데 pdf 출력이 안 됩니다..........스트레스 받네요...

그림 8. 아니 드라이버 설치라니 한글 pdf 추출에 드라이버를 설치한 적이 없는데..

우리 친구가 의미 없는 대답만 반복하는 와중에, 답을 겨우 찾았습니다.

 

그림 9. 기본 설정은 분명 Microsoft PDF로 돼 있는데...

ㅋㅋㅋㅋㅋㅋㅋㅋ하.. 기본 설정은 분명 돼 있는데,,

그림 10. PDF 저장이 기본 옵션이네?!

제가 코드를 볼 때 분명 'Microsoft PDF 어쩌구'가 들어간 코드가 있고, SetItem("Device","3")으로 돼 있는 코드가 있었거든요. 그래서 왠~~~~~~~~지 그림 4에 있던 3번이 기본 설정에 있는 "PDF 저장" 얘인가 싶어서 눌렀더니

그림 11. 떄앰~

얘가 인쇄 버튼이 비활성화 되길래 더블클릭했더니 이렇게 뜨더라구요.. 이런 건 처음 봤다....

그림 12. 신기한 설정창..
그림 13. 해결따리~~

그렇게 따라했더니 해결!!! 휴.. 매우 기분이 좋아졌습니다.

그렇게 최종 코드는

import win32com.client as win32


hwp = win32.Dispatch("HWPFrame.HwpObject")
hwp.XHwpWindows.Item(0).Visible = True  # 한글 창 보이기

file_path = "D:/한글 양식 자동화/양식.hwp"
pdf_path = "D:/한글 양식 자동화/tmp/양식.pdf"
hwp.Open(file_path, "","")

# 🔹 ③ 한글의 메시지 박스 모드 변경 (저장 시 창 뜨지 않도록)
hwp.SetMessageBoxMode(0x1000)

# 🔹 ② 인쇄 설정 값 가져오기
action = hwp.CreateAction("Print")
option = action.CreateSet()

# 🔹 ② PDF 저장을 위한 인쇄 설정
# hwp.HAction.Run("Print")  # 인쇄 창 직접 실행

action.GetDefault(option)  # 기본 인쇄 설정 불러오기

# 🔹 ③ 'Device'를 PDF로 변경 (3번 설정)
option.SetItem("Device", 3)

# 🔹 ④ PDF 파일명 설정
option.SetItem("FileName", pdf_path)

# 🔹 ⑤ 설정 적용 후 인쇄 실행
action.Execute(option)

# 한글 종료
hwp.Quit()

이렇게 나왔답니다^^

중간에 뜬금 없는 '메시지 박스 모드'가 생겼는데, 얘는 있든 없든 차이가 없던데, 뭔가 우리의 똑똑이 친구가 가르쳐 주기로는 같은 이름 파일이 있어도 자동으로 덮어쓰게 해주는 설정이라네요. 제 기준에서는 없어도 잘 덮어지긴 하던데 혹시나 싶어 놔뒀답니다.

 

드디어 끝이 보이는 것 같네요. 이제 지금까지 했던 코드를 조합해서 하나의 코드로 합체시키고, 하나의 프로그램으로 만든다면 좀 더 까리한(!) 프로젝트가 될 것 같습니다.ㅋㅋㅋ

2025.02.23 - [파이썬 업무 자동화/한글 문서 작업 자동화] - 파이썬 한글 문서 매크로 제작기 - 2. 내용 바꾸기

 

파이썬 한글 문서 매크로 제작기 - 2. 내용 바꾸기

2025.02.23 - [파이썬 업무 자동화/한글 문서 작업 자동화] - 파이썬 한글 문서 매크로 제작기 - 1. 개발 환경 설정(1) 파이썬 한글 문서 매크로 제작기 - 1. 개발 환경 설정(1)뭔가를 시작하는 일은 막

sunnysides.tistory.com

 

처음부터 차근차근 읽지 말고 쭉 훑어보고 필요한 부분만 찬찬히(?) 읽어 보시길 추천드립니다.

 

2편에 이어 3편은 엑셀로 갖고 있는 회사명을 코드로 갖고 오는 과정입니다.

회사 목록 엑셀 파일을 파이썬 코드로 갖고 오기

 

지난 번 말씀 드렸듯, 코딩은 언제나 알고리즘이 우선입니다. 항상 '어떻게 해야 멍청한 컴퓨터가 내가 하는 작업을 잘 알아들을까?'라는 고민을 먼저 한 후에 코딩을 시작해야 효율이 좋아지기 마련이죠.

 

 이번 프로젝트는 한글 문서 양식에서 회사명을 바꿔가며 서로 다른 이름의 pdf 파일로 저장하고, 메일로 보내는 작업까지 진행할 예정입니다.

 

일단 시작하기에 앞서 아주아주 기초적인 사용법은 익혔기 때문에, 약간의 마음의 여유를 갖고 알고리즘을 고민할 시기가 왔습니다.

 

우리는 한글 문서 양식과 엑셀 회사명 목록을 갖고 있고, 알고리즘을 생각하면

1. 엑셀 파일을 열어 회사 목록을 가져온다.

2. 한글 파일을 열어 앞서 구한 회사명을 입력한다.

3. 수정된 한글 파일을 pdf로 저장한다.

4. pdf 파일을 메일로 첨부해서 보낸다.

 

이런 순서가 될 것 같죠?

 

우리는 1편과 2편에서 위 목록의 2번 한글 파일을 다루는 방법을 익혔습니다. 왜냐하면 1번은 쉽기 때문이죠.(진지)

 

ㅋㅋㅋ1번이 쉬운 이유는 엑셀은 무려 세계적인 프로그램(!)이기 떄문이죠... 아래한글은 우리나라만 쓰는데.... 그러면서 범용성도 꾸진......쿨럭

 

아무튼 다시 본론으로 돌아가서, 회사명이 들어 있는 엑셀 파일을 먼저 살펴봅시다.

그림 1. 회사명.xlsx

 

엑셀은 다들 아시다시피 파일 안에 여러 시트가 들어있는 구조로 되어 있습니다. 파이썬은 화면을 바로 클릭할 수 없기 때문에 시트 정보를 이용해 내용을 처리해야 한답니다.

 

그 다음은 언제나처럼 우리의 구세주(제발)가 되어주던 챗지피티!

그림 2. 엑셀 지피티
그림 3. 엑셀 지피티 2

openpyxl 또는 pandas를 쓰라네요. 우리는 둘 다 모르니 뭔가 있어 보이는 openpyxl을 쓰도록 하겠습니다.

from openpyxl import load_workbook

# 🔹 ① 엑셀 파일 열기
file_path = r"D:/한글 양식 자동화/회사이름.xlsx"
wb = load_workbook(file_path)  # 엑셀 파일 로드
ws = wb.active  # 기본 활성화된 시트 선택

# 🔹 ② 특정 셀 값 읽기 (A1 셀)
print(ws["A1"].value)  # 첫 번째 셀 값 출력

# # 🔹 ③ 특정 셀 값 변경 후 저장
# ws["A1"] = "새로운 값"
# wb.save(r"C:\경로\새로운_파일.xlsx")

응용을 위해 한 줄 단위로 사용해 보겠습니다. 일단 값을 읽고, 다른 값으로 바꿔서 저장하는 코드를 준 것 같은데, 우리는 여러 개 값을 읽어오는 게 목표기 때문에 일단 저장하는 부분은 주석 처리 후 하나만 읽어 보겠습니다.

그림 4. 짜잔

ws["A1"].value를 하면 A1 값이 보이네요. 먼저 데이터가 총 몇 행인지 알아봅시다.

그림 6. 얘로 간다

사실 총 세 가지를 주던데, '회사명' 열에 있는 데이터만 확인하고 가져오면 되겠죠? 고로 두 번째 방식으로 가겠습니다.

from openpyxl import load_workbook

# 🔹 ① 엑셀 파일 열기
file_path = r"D:/한글 양식 자동화/회사이름.xlsx"
wb = load_workbook(file_path)  # 엑셀 파일 로드
ws = wb.active  # 기본 활성화된 시트 선택

# 🔹 ② 특정 셀 값 읽기 (A1 셀)
print(ws["A1"].value)  # 첫 번째 셀 값 출력
# len(ws)

total_rows = sum(1 for row in ws["B"] if row.value is not None)
print(f"A열의 데이터 개수: {total_rows}줄")

# # 🔹 ③ 특정 셀 값 변경 후 저장
# ws["A1"] = "새로운 값"
# wb.save(r"C:\경로\새로운_파일.xlsx")

저장을 하는 건 결국 마지막 단계일 테니 중간에 끼워 넣겠습니다.

그림 7. 오 된다

우린 데이터가 총 4개 여야 하는데, 5줄이라 나오죠? 첫 줄도 포함하는가 보네...하면서 야매로 -1을 해줍시다.

from openpyxl import load_workbook

# 🔹 ① 엑셀 파일 열기
file_path = r"D:/한글 양식 자동화/회사이름.xlsx"
wb = load_workbook(file_path)  # 엑셀 파일 로드
ws = wb.active  # 기본 활성화된 시트 선택

# 🔹 ② 특정 셀 값 읽기 (A1 셀)
print(ws["A1"].value)  # 첫 번째 셀 값 출력
# len(ws)

total_rows = sum(1 for row in ws["B"] if row.value is not None)
print(f"A열의 데이터 개수: {total_rows-1}줄")

# # 🔹 ③ 특정 셀 값 변경 후 저장
# ws["A1"] = "새로운 값"
# wb.save(r"C:\경로\새로운_파일.xlsx")

뭔가 바꼇습니다. 대충 total_rows에 1을 빼면 되니 그 자리에 일단 넣어봤더니 되는군요. 굳

그림 8. 야매로 갯수 맞추기

다음으로 넘어가기 전에 python의 기초적인 반복문을 알아보겠습니다. 파이썬에서 반복문은 for라는 놈을 쓴다고 생각하시면 됩니다. for 구문은

for (변수 이름) in (변수 범위):
(반복할 내용)

의 구조로 이뤄져 있습니다.

변수 이름은 보통 몇 번째인지를 index라고 해서 i 라 하고, 밑의 양식을 따른답니다.

company_list = []

for i in range(total_rows-1):
    company_list += [ws['B%s'%(i+2)].value]
    # company_list += [ws['B'+str(i+2)].value]

요기서 뜬금 없이 등장한 %는 파이썬에서 글자에 임의의 변수를 넣는 방식이랍니다. 바로 밑의 주석 처리 된 부분과 같은 의미에요. 요기는 파이썬 문법이기 때문에 이번 글에서는 넘어가도록 하겠습니다..만 간단하게 설명하자면,

1. 빈 리스트 만들기
2. 총 데이터 행 수만큼 반복하기
3. 앞서 만든 리스트에 B(숫자) 위치의 데이터 추가하기

순서로 이뤄진 코드랍니다. 자세한 사용법(?)이 궁금하신 분들은 파이썬 기본 문법을 익히시면 된답니다. 저는 위키독스를 스승님으로 모시고 있...ㅋㅋㅋ

https://wikidocs.net/book/1

 

점프 투 파이썬

이 책은 파이썬이란 언어를 처음 접해보는 독자들과 프로그래밍을 한 번도 해 본적이 없는 사람들을 대상으로 한다. 프로그래밍을 할 때 사용되는 전문적인 용어들을 알기 쉽게 풀어서 …

wikidocs.net

책 사세요 여러분. 제 책은 아닙니다... 제 마음 속 스승님께 커피 한 잔이라도...

사실 '파이썬 % 뜻' 이렇게 검색해도 나온답니다ㅋㅋㅋ

아무튼 위의 코드를 조합하면

그림 9. 변수 리스트가 만들어졌다!

이렇게 데이터를 쫘라락 뽑을 수 있습니다!!

from openpyxl import load_workbook

# 🔹 ① 엑셀 파일 열기
file_path = r"D:/한글 양식 자동화/회사이름.xlsx"
wb = load_workbook(file_path)  # 엑셀 파일 로드
ws = wb.active  # 기본 활성화된 시트 선택

# 🔹 ② 특정 셀 값 읽기 (A1 셀)
# print(ws["A1"].value)  # 첫 번째 셀 값 출력
# len(ws)

total_rows = sum(1 for row in ws["B"] if row.value is not None)
# print(f"A열의 데이터 개수: {total_rows-1}줄")

company_list = []

for i in range(total_rows-1):
    company_list += [ws['B%s'%(i+2)].value]
    
    # company_list += [ws['B'+str(i+2)].value]
    


# # 🔹 ③ 특정 셀 값 변경 후 저장
# ws["A1"] = "새로운 값"
# wb.save(r"C:\경로\새로운_파일.xlsx")

정리하자면 이렇게 간단한(?) 코드가 완성된답니다.

주석 처리된 부분은 전부 지워도 되기 때문에 사실은 엄청 간단한 코드가 된다는 것~

2025.02.23 - [파이썬 업무 자동화/한글 문서 작업 자동화] - 파이썬 한글 문서 매크로 제작기 - 1. 개발 환경 설정(1)

 

파이썬 한글 문서 매크로 제작기 - 1. 개발 환경 설정(1)

뭔가를 시작하는 일은 막연히 '~~~를 해야지!'라는 마음으로 첫 발이 떼지지 않네요. 구체적으로 어떤 걸 만들고 싶다는 주제가 있어야 시작할 수 있는 느낌이랄까..?  그런 의미에서! 노가다..!

sunnysides.tistory.com

 

 차근차근 따라하기보다 와랄라 읽어 보고 필요한 부분만 살펴보시는 걸 추천드립니다.ㅋㅋㅋ

 

 이전에 파이썬으로 한글 문서를 다루는 라이브러리 설치와 문서를 여는 법을 익혔습니다.

 다 우리의 똑똑한 친구 챗지피티와 구글신 덕분인데 염치가 없나 봅니다만 이왕 쓰는 거 끝까지 가보도록 하겠습니다..

 

import win32com.client as win32

# 한컴 한글 실행
hwp = win32.Dispatch("HWPFrame.HwpObject")
hwp.XHwpWindows.Item(0).Visible = True  # 한글 창 보이기

# 기존 문서 열기
file_path = r"파:/일/경/로/파일명.hwp"
hwp.Open(file_path,'HWP','forceopen:true')

 

 겨우 이거 하느라 시간이 한참 걸렸네요.

 

 제가 코딩을 잘하는 편은 아니지만, 코딩에서 코드를 짜는 것보다 중요한 건 어떤 작업을 할 지 고민하는 것입니다. 알고리즘을 짠다고 하죠.

 

 우리의 목적은 코딩을 공부한다기보다 프로젝트를 만드는 것이니까요. 우리는 똑똑한 사람들이 짜 놓은 코드를 베끼기만..(?) 하는 것입니다!(당당)

 

 그런 의미에서, 이번 포스팅의 목표는

 한글 문서 양식의 본문 수정

 

입니다.

 

사실 지난 번 우리의 친구 챗지피티한테 표 내용을 바꾸는 법을 물어봤죠.

그림 1. 챗지피티 재탕1
그림 2. 챗지피티 재탕2

 

지난 1탄에서 우리는 기존 문서 여는 방법은 익혔기 때문에, 추가 수정이 필요했습니다.

그림 3. 수정된 코드.

 

그런데, 표 수정은 커녕 커서가 이동하지도 않더라구요..

그림 4. 에러 코드.

 

도와줘 챗지피티!

그림 5. 똑똑한 건지 멍청한 건지..

 

수정된 코드를 써도 다시 문제가 생겼습니다. 지난 번의 악몽... 질문이 도돌이표가 돼 버리니 따로 해결해 봅시다.

 

이럴 땐 차근차근 문제가 어디서 생겼는 지 확인할 필요가 있습니다.

 

import win32com.client as win32

# 한컴 한글 실행
hwp = win32.Dispatch("HWPFrame.HwpObject")
hwp.XHwpWindows.Item(0).Visible = True  # 한글 창 보이기

# 기존 문서 열기
file_path = r"D:/한글 양식 자동화/양식.hwp"
hwp.Open(file_path,'HWP','forceopen:true')

 

일단 요까지는 잘 굴러가는 걸 확인했습니다.

 

그렇다면 표 안의 내용을 변경하기 앞서, 원하는 지시(커서를 이동하고 표를 선택하는 것)가 제대로 이행되는지 살펴봐야 합니다.

# 커서를 문서의 처음으로 이동 (표 찾기 전에 안전한 위치로 이동)
hwp.HAction.Run("MoveTopLevelBegin")

# 첫 번째 표 선택
hwp.HAction.Run("TableCellBlock")  # 표 내부 선택
hwp.HAction.Run("TableSelect")  # 표 전체 선택

# 커서를 첫 번째 셀로 이동
hwp.HAction.Run("TableCellBlock")  # 다시 표 내부 선택
hwp.HAction.Run("TableLeftCell")  # 왼쪽 상단 셀 선택

# 텍스트 입력
# hwp.InsertText(r"hihihi")

# # 새로운 파일 이름으로 저장
# new_file_path = r"C:\경로\새로운_파일명.hwp"
# hwp.SaveAs(new_file_path, "HWP")

# # 한컴 한글 종료
# hwp.Quit()

 

파이썬에서 #이 붙는 건 해당 줄을 없는 셈 치겠다(주석 처리)는 의미입니다.

 

시킨 대로 커서가 잘 이동하는지 보기 위해 뒷 부분을 전부 날렸습니다.

 

그림 6. 아니 커서가 왜 그대로야.

 

이럴 수가.. 커서가 이동하지 않습니다. 이렇다면 우리는 이렇게 어려운 방식을 버려야 합니다. 왜냐하면 우리는 HAction이라는 명령어를 어떻게 쓸 수 있는지, 문서를 어디서 찾아야 하는지 같은 고급 기술을 익히기엔 시간이 부족합니다. 빨리 놀러 나가야 합니다.

 

그림 7. 구관이 명관.

 

구글로 돌아왔습니다. 더 개꿀 빠는 방법을 가르쳐 달란 말이야!

 

라는 열망에 찾았습니다.

호다닥 프로젝트를 달성하고 싶은 분들이 아닌 진득하게 자세한 사용법을 익히고 싶은 분은 요기로 가시면 됩니다.

https://wikidocs.net/257896

 

01-3 텍스트 입력

이번 챕터에서는 본격적으로 문서에 텍스트입력을 해 보겠습니다. 먼저 터미널에서 `jupyter notebook` 명령어로 주피터노트북을 실행한 후, 아래 코드 두 줄을 실행…

wikidocs.net

와 갓일코.. 일갓... 일코님 고맙습니다. 

저보다 뛰어난 분이 계십니다. 여러분 여기로 보러 가세요. 제 글보다 좋습니다. 저도 여기서 배웠습니다.

 

한글에는 누름틀이라는 기능이 있군요. 처음 알았습니다.

 

각설하고, 이번 포스팅의 목표로 다시 돌아오겠습니다.

 한글 문서 양식의 본문 수정 (데자뷰 아님)

그림 8. 누름틀 필드 입력 창

 

한글 문서에서 원하는 곳에 커서를 두고 컨트롤+k+e를 누르면 요런 창이 뜹니다. 순서대로 눌러도 되네요.

 

적는 게 많아서 뭐가 뭔지 헷갈립니다. 그냥 순서대로 호잇,테스트,field라고 구분할 수 있게 다른 값으로 넣었어요. 필드 이름을 코드에서 입력하는데, 호옥시나 한글을 못 인식할까봐 영어로 적었습니다.

그림 9. 짜잔

 

예시로 적히는 글이 안내문이고, 필드 이름이 field로 설정이 되나 봅니다. 메모 내용은 뭐지.. 쓸 일 없으니 패쓰~

 

그림 10. 누름틀 내용란

생성된 누름틀을 클릭하면 빈 칸으로 변하고 한글 창 맨 밑에 보면 (B1): 필드 [field]라고 필드 이름이 나오네요.

다시 코드로 돌아가보겠습니다

그림 11. 오 바꾸기 성공

 

휴 이번엔 진짜 성공했습니다. 수신자를 바꾸고 싶은데, 성공적으로 까꿍으로 바꿨네요.

 

import win32com.client as win32

hwp = win32.Dispatch("HWPFrame.HwpObject")
hwp.XHwpWindows.Item(0).Visible = True  # 한글 창 보이기 (필요 시 False로 설정)


file_path = r"D:/한글 양식 자동화/양식.hwp"
hwp.Open(file_path,'HWP','forceopen:true')

hwp.PutFieldText("field",r' 까꿍')
# hwp.PutFieldText("field1",r' 까꿍')

 

 여러 영역의 글자를 바꾸고 싶으면 누름틀을 추가하시고, 필드 이름을 field1, field2 이런 식으로 추가해서 마지막 줄과 같이 수정하시면 됩니다.

 

 본문에서는 field라는 누름틀 하나만 만들었지만 원하시면 field1이라는 이름을 가진 누름틀을 새로 만들고, 맨 밑에 줄을 주석 해제 처리 하는 식으로~~~

 

 

 

다음엔 엑셀로 갖고 있는 회사명을 쭈루룩 집어넣는 방법을 적어보도록 하겠습니다.

 뭔가를 시작하는 일은 막연히 '~~~를 해야지!'라는 마음으로 첫 발이 떼지지 않네요. 구체적으로 어떤 걸 만들고 싶다는 주제가 있어야 시작할 수 있는 느낌이랄까..?

 

 그런 의미에서! 노가다..! 업무를 도와주는!!! 한글 파일 양식에 맞춰 파일명,내용을 바꿔가며 pdf로 저장하는 자동화 프로젝트를 첫 주제로 잡아보았습니다.

 

 제가 프로젝트를 진행하며 겪은 이런저런 시행착오를 같이 포함한 글이기 때문에, 차근차근 따라하기보다 후루룩 읽어보고 필요한 부분만 따라하시는 게 효율이 좋을 듯 합니다!

 

읽기 편하게 꾸며보고 싶은데, 능력이 부족한 관계로...

1. 최대한 사진만 보고 따라할 수 있도록 구성했습니다.
2. 다른 프로젝트 진행할 때도 응용할 수 있도록 (문제+해결방안)으로 구성했습니다.
3. 본문의 코드는 마지막에 첨부하도록 하겠습니다.

 

파이썬 라이브러리 설치 (feat. 똑똑한 우리의 친구 챗지피티)

 

 

 오.. 따옴표가 들어가니 좀 있어 보이네요.

 

 파이썬에는 여러 기능을 활용할 수 있는 라이브러리라는 것이 존재합니다. 파이썬이라는 언어를 통해 특정 내용을 담고 있는 책..이랄까요??ㅋㅋㅋ

 

 아무튼, 첫 번째 목표는 과연 파이썬에 한글 문서를 자동화해주는 라이브러리가 있는지 확인하는 것입니다!

 

 사실 이제는 챗지피티라는 똑똑한 친구가 있어서 매우 편하게 진행할 수 있다죠..ㅋㅋㅋㅋ

 

그림1. 똑똑한 친구.

참 쉽죠?

 

원하는 작업을 요청하면 어떻게 하는 지도 가르쳐 준답니다!

그림2. 똑똑한 친구2.
그림3. 똑똑한 친구3.

 

하지만 세상 일이 이렇게 쉽게 풀리기만 한다면 따분한 인생을 보낼 수밖에 없겠죠?

 

그림4. 똑똑한 친구 취소.

이 자식이 뭔지도 모르는 에러를 던지네요..

그림5. 기회를 한번 더 주겠다.

 

오..에러를 뭔가 있어 보이는 얘기를 하며 해결 해준다고 하네요.

그림6. 오..차이가 없어 보이지만 뭔가 바꼈다.

 

눈으로는 차이를 모르겠지만 일단 진행해 보도록....

그림 7. 복붙 아님 또 에러임.

했지만 통수네요.

 

하지만 괜찮습니다. 파이썬은 잘 몰라도 한글을 아니까요.

 

우선 코드로 돌아가야 합니다.

 

코드에 문제가 생겼기 때문이죠..(?)

그림 8. 반만 똑똑한 친구의 흔적.

 

에러 문구와 코드를 같이 보면, 그림 7에서 <어쩌구 HWPFrame.HwpObject>, 저쩌구 in Open 라는 문구가 있죠?

 

그림 8의 코드를 보면 HWPFrame.HwpObect는 hwp에 저장되어 있고, Open은 15줄에 있네요. 이러쿵저러쿵 조합하면 hwp.Open(file_path)에 문제가 생긴 걸 유추할 수 있습니다. 저도 찍었어요(진짜로)

 

여기서 우리는 훌륭한 교훈을 얻을 수 있습니다.

에러가 나면 에러 문구랑 코드랑 비교해서 어디가 문제가 생겼는지 찾아보기

 

모든 문제 해결의 근본은 눈치 챙기기 입니다.

 

휴, 일단 hwp.Open(file_path)에 문제가 있는 건 알았네요. 근데 해결책은 의외로 매우 쉬울 지도 몰라요

그림 9. 얘는 복붙입니다.

 

일단 매개변수의 개수가 잘못되었다고 했으니, 우리는 지금 hwp.Open에 file_path라는 변수 하나만 들어가 있는 것을 알 수 있습니다.

 

 그런데 앞에 숫자는..뭔지 모르지만 일단 들어있으니까 빼고, 두번째 문구는..마찬가지로 들어있으니까 빼고..None이 두 개 있네요. 뭔가 변수가 두 개 부족한가 봅니다. 값은 따로 안내 문구가 없으니 자리만 채우면 될 거 같은데, 빈 칸으로 한번...

그림 10. 눈치로 야매 해결

 

그림 11. 일단 해결

와 진짜 해결 됐습니다!! 저 창은 뭔지 모르지만 일단 '접근 허용'을 누르고 나중에 해결하도록 하죠. 갈 길이 멀다...ㅋㅋㅋㅋ

 

 

..죄송합니다.ㅋㅋㅋㅋ 근데 가~~끔 이렇게 때려 맞춰질 때도 있기 때문에, 한번 읽어보고 간단한 해결방향은 도전해볼만 합니다.ㅋㅋㅋㅋㅋ

그림 12. 야매 말고 정공법1.

 

이렇게 우리 친구가 정신을 못 차릴 땐 정공법이 답이겠죠? 일단 원인이었던 hwp.open()을 검색해보겠습니다. 많이 뜨긴 한데, 원하는 내용은 없더라구요.

 

이건 사실 hwp라는 변수를 우리 친구가 임의로 정했기 때문인데, 이런 경우에는 원래 라이브러리를 검색하시면 편할 수 있습니다.

그림 13. 정공법2.

검색에서 중요한 건, 본문에서 원하는 문구를 와랄라 훑어보고 동일한 코드가 있는지 확인하는 것입니다.

 

각 사이트에서 본문에 코드만 훑어보고 hwp.Open()이 있는지만 찾아보시면 됩니다.

 

그림 14. 구글신은 답을 알고 있다.

 

역시 구글링은 답을 다 알고 있습니다.

file_path는 파일 위치를, 'HWP'는 확장자인데, 어차피 한글 문서를 다루니 고정으로 보시면 됩니다. 마지막 forceopen:true는 저도 잘 모르겠지만..뭔가 강제로 여는 건가 보네요..데헷

 

import win32com.client as win32

# 한컴 한글 실행
hwp = win32.Dispatch("HWPFrame.HwpObject")
hwp.XHwpWindows.Item(0).Visible = True  # 한글 창 보이기

# 기존 문서 열기
file_path = r"파:/일/경/로/파일명.hwp"
hwp.Open(file_path,'HWP','forceopen:true')

 

파일 경로 앞의 r은 일단 그냥 붙이는 거라 생각하셔도 됩니다.(글자 인식 관련된 거 라는데, 잘 몰라용..)

 

파일 경로는 파일이 있는 위치를 입력하시면 되는데, 탐색기에서 위치 있는 부분을 클릭하시면 보이는 위치 뒤에 파일명까지 입력하시면 됩니다.

그림 15. 파일 위치는 주소칸을 클릭하시면 두두등장

 

'원'표시는(W) 슬래시(/)로 바꾸시면 되고, 뒤에 한글문서 파일명을 넣으시면 됩니다.

위의 경우에는 file_path = r'D:/한글 양식 자동화/한글문서.hwp'가 되겠죠.

 

 

 

별 내용도 없는데 엄청 오래 걸리네요.. 다른 분들은 얼마나 열심히 하시는 건지..

요까지 기본설정 1탄이었습니다.

 

 

2탄에서 계속..

+ Recent posts