본문 바로가기

Programming/Python

[Python]직장인 업무 자동화 활용도 100% 엑셀파일 텍스트 파일로 변환 게임 스크립트(시나리오?) 만들기

게임 개발 + 인턴 생활에 허덕이는 요즘입니다...

인턴십에선 주로 웹개발을 해

게임개발과 관련이 크지 않은데요

 

두 작업의 공통점이 둘다 열심히 파이썬을 쓰고 있다는 것입니다!!!

1. 엑셀 데이터를 일괄 변환해 활용

2. 데이터 입력 받아 새로운 문자열로 뽑아내기

등등

일일이 했으면 우와 눈 뽑히겠다 싶은 작업들을 

파이썬이 대신 해주고 있습니다 ㅎㅎ

 

오늘은 같이 엑셀시트를 변환해보시죠!!


[ 상황 ]

이건 잉크라는 프로그램이고

유니티에서 대화 스크립트를 출력하기 위해 필요한 툴입니다.

(나중에 기회가 된다면 이 기능에 대해서도 작성해볼게요 ~_~)

 

여기서 문제는 스크립트를 맡은 기획팀에서 작성하게 되는데,

 

1. 기획팀에서 위 태그를 다 작성하면 효율 떨어짐

2. 기획팀은 엑셀이 더 익숙하고 편함

위와 같은 이유로 엑셀시트를 잉크 텍스트에 맞게 변환해보자!

라고 생각했습니다.

 

[ 원하는 결과 ]

이런 시트를 파이썬 프로그램으로 돌리면

 

이런 텍스트로 나오길 원함.

(나온 텍스트는 잉크 프로그램에 복붙!)

 

[ 해결 ]

 

0. 환경 설정

- 프로그램 : 엑셀, VSC

- 언어 : python

 

1. 라이브러리 설치

엑셀 변환을 위한 라이브러리 'openpyxl' 설치

pip install openpyxl

# pip 설치 X
python3 get-pip.py

pip 설치 오류 나는 경우는 여기로 >> 

 

vscode 빠르고 간단하게 pip 설치하기(openpyxl 임포트, 파이썬 세팅)

오랜만에 파이썬 좀 하려니 vscode 가 pip 를 모른 척 합니다... 그래서 간단히 할 수 있는 비주얼스튜디오코드 pip 적용하기!! 다들 직접 환경변수 path 수정하시던대... 1. 어디 깔려있는지 모름 2. path

hot-computer.tistory.com

 

2. 코드 작성

전 항상 라이브러리를 볼 때 공식 문서를 중요시 여깁니다..

(하지만 습관적으로 뻗어보는 구글의 손길)

 

Tutorial — openpyxl 3.1.0 documentation

There is no need to create a file on the filesystem to get started with openpyxl. Just import the Workbook class and start work: A workbook is always created with at least one worksheet. You can get it by using the Workbook.active property: Sheets are give

openpyxl.readthedocs.io

전 openpyxl 라이브러리를 생전 처음봐요!

여기서 튜토리얼을 확인하고 오십쇼. 저보다 낫습니다.

 

2-1. 라이브러리 임포트

공식문서의 튜토리얼 이미지

저의 경우엔 엑셀 시트 변경이 아닌

엑셀 시트 불러오기만 필요하기에 위와 같이 설정해줍니다.

!/usr/bin/python3
#ex command : python changer.py test.xlsx result.txt

from openpyxl import load_workbook
import sys

input_path = sys.argv[1]
output_path = sys.argv[2]

wb = load_workbook(filename = input_path)
# file name example = script.xlsx
sheet = wb['Sheet1']

sys.argv는 뭐예요?

터미널에서 파이썬코드를 실행시킨다고 가정했을 때

python [코드.py] [읽어올 엑셀.xlsx] [결과.txt]

와 같이 입력할 예정입니다.

 

argv는 저 명령어의 옵션들을 의미함으로 

sys.argv[1] == [읽어올 엑셀.xlsx] 가 됩니다.

 

그래서 읽어올 엑셀 파일을 등록해준 뒤,

읽어올 시트이름을 등록해줍니다.

엑셀의 요것!

 

2-2. 정의된 태그 읽어오기

이 부분을 변환시켜줄 것입니다.

# Read the Tag List (row==1)
tag_list = []
col_num = 2 # B열부터 태그이기에 2번째 열부터 읽어줌.
while True:
    col_tag = sheet.cell(1, column = col_num).value
    # 셀의 값 읽어오기: sheet.cell(row=row_index, column=column_index).value
    # 셀(행, 열)
    
    if col_tag == None: # 셀 값 없다면 반복문 종료
        break
    tag_list.append(col_tag) # 태그 리스트에 추가
    col_num += 1

print(tag_list)

 

2-3. 스크립트 읽어오기

이번엔 이 부분을 변환시켜줄 것입니다.

# Read Real Data & Make a Line
row_num = 2 # 엑셀에 따라 두 번째 행부터 읽어올 것임
line = "" 
while True:
    # Read Plain Text
    col_plain = sheet.cell(row = row_num, column = 1).value
    if col_plain == None:
        break
        
    line += col_plain + " " # '대사 ' <- 위와 같이 문자열 만들어주기
    
    #Read Tag Value
    col_num = 2 # 태그의 시작인 두 번째 열부터 읽어줌
    
    for tag in tag_list: # 태그key 리스트 value 반복
        col_tagval = sheet.cell(row = row_num, column = col_num).value  # 태그 값 읽어오기
       
        if col_tagval != None: # 태그 값이 있다면!
            line += "#" + tag + ":" # -> '대사 #태그키:'
            line += str(col_tagval) + " " # -> '대사 #태그키:태그값'
        col_num += 1 # 다음 태그값으로
    line += "\n" # 줄바꿈
    row_num += 1 # 다음 행으로

print(line)

 

2-4. line 문자열을 텍스트 파일로 저장

# Save the Script as Text
f = open(output_path, "wt")
f.write(line)
f.close()

 

3. 실행 결과

VSC 터미널에서 실행이 잘 안 된 관계로 폴더에서 바로 실행시켜주었습니다.

요렇게 완성!

텍스트 파일도 제대로 저장되었습니다 ~_~

 

도움이 되셨길 바랍니다 :)