본문 바로가기
Developer/Python

[Python] 구글번역 API를 통해 파워포인트, 엑셀 번역하기

by Doony 2020. 9. 3.

이번 포스팅에서는 구글번역 API를 통해, 현재 열려있는 파워포인트와 엑셀파일을 번역하는 방법에 대해 알아보겠습니다.

구글 번역 API?

상세히 구글 번역기에 대해 다루지는 않겠습니다. 무료 버전과 유료 버전이 있고, 다소 제한이 있는 듯하나 이번 포스팅에서는 무료 버전에 대해 알아보겠습니다. 아래와 같이 구글 번역기를 설치합니다.

  • pip install googletrans

간단한 코드 사용법은 다음과 같습니다.

1
2
3
4
5
from googletrans import Translator
 
translator = Translator()
result = translator.translate("내 이름은 두니입니다.", dest="English")
print(result.text)
cs

dest가 번역할 언어이며, 영어는 English, 한글은 Korean, 일어는 ja 등 다양한 언어로 번역이 가능합니다. 이 때, 번역된 내용은 result.text로 활용하시면 됩니다.

현재 열려 있는 파워포인트 파일 번역하기

대체로 파이썬을 활용한 PPT 번역기들을 보면, 이미 저장된 ppt파일을 읽어들이는 경우가 많고, 또 그게 더 효율적인 것 같긴 합니다만.. 이번 포스팅에서는 현재 열려 있는 파워포인트 창을 읽어들여서 실시간(?)으로 번역하는 방법에 대해 서술하고자 합니다.

먼저 아래와 같이 win32com을 설치합니다.

  • pip install win32com

저는 파이참을 주로 사용하는데, 파이참에서는 win32compat으로 되어있던 것 같네요.
상세 코드는 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import win32com.client
from googletrans import Translator
 
translator = Translator()
 
Application = win32com.client.Dispatch("PowerPoint.Application")
Presentation = Application.Activepresentation
 
 
slidenum = Presentation.Slides.Count
 
# 특정 페이지에 해당하는 slide
for i in range(1, slidenum+1):
    slide = Presentation.slides(i)
    shape = slide.shapes
    for s in shape:
 
        if s.HasTextFrame:
         # TextFrame 번역하기
         result = translator.translate(s.TextFrame.TextRange.Text, dest="Korean")
         s.TextFrame.TextRange.Text = result.text
 
        if s.HasTable:
        # 표 번역하기
             cols = s.Table.Columns.Count
             rows = s.Table.Rows.Count
             for j in range(1, rows+1):
                 for k in range(1, cols+1):
                     result = translator.translate(s.Table.Cell(j, k).Shape.TextFrame.TextRange.Text, dest="Korean")
                     s.Table.Cell(j, k).Shape.TextFrame.TextRange.Text = result.text
cs

코드는 단순합니다.
현재 열려있는 파워포인트 창을 열고, MS OFFICE에서 제공하는 vba함수와 동일한(?) 객체들을 활용해서 제어합니다. 위 예제는 그 중에서도 텍스트 상자와 표만을 대상으로 번역하는 코드입니다.

  • s.HasTextFrame: 텍스트 프레임을 가지고 있다면, 그 안의 내용을 번역
  • s.HasTable: 표는 텍스트 프레임이 아니기 때문에 별도로 구분하여 인식 및 번역

테이블 같은 경우, row와 column을 통해 각각의 행과 열에 접근할 수 있습니다. 행, 열에 해당하는 텍스트를 불러와서 번역하는 방식입니다.



엑셀 파일 번역하기

엑셀도 파워포인트와 방식은 동일합니다. 다만, 파워포인트처럼 텍스트프레임, 테이블을 구분할 필요가 없습니다. 애초에 엑셀은 그냥 테이블이기 때문입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from googletrans import Translator
import win32com.client
#
translator = Translator()
excel = win32com.client.Dispatch('Excel.Application')
#
sheet = excel.activesheet
 
rowTarget = int(input("사용하고 있는 최대 행 개수를 입력하세요: "))
colTarget = int(input("사용하고 있는 최대 열 개수를 입력하세요: "))
 
for r in range(1, rowTarget+1):
     for h in range(1, colTarget+1):
         if sheet.Cells(r, h).Value is not None:
             result = translator.translate(sheet.Cells(r, h).Value, dest="Korean")
             sheet.Cells(r, h).Value = result.text
cs

코드는 역시 단순합니다.
코드를 보시면 유저가 각 행, 열의 개수를 입력하게 되어 있습니다. for문을 두번 돌려서 행과 열에 접근할 것이기 때문에, 얼마나 루프문을 돌릴지 제한을 두기 위해서입니다.
각 행, 열에 해당하는 항목을 불러와서 번역하게 되어있습니다.

중간에 if sheet.Cells(r, h).Value is not None 이라는 부분을 통해 엑셀에 입력된 부분만 번역되도록 의도했으나,
생각해보니 if문을 넣는다는 것 자체가 저 value를 계속 계산하라는 것이기 때문에... 큰 의미가 없는 부분입니다. 즉, 굳이 if문을 둘 필요는 없습니다.

오늘은 이렇게 간단하게 파이썬을 이용하여 파일에 접근, 번역하는 방법에 대해 알아보았습니다.

댓글