はじめに
こんにちは。エマです。
みなさまはエクセルにある英語を訳したいと思ったことはございますか?
私はあります。最近はエクセルでノートを取るようにしているのですが、英語のままエクセルにメモした文字を時間経ってから振り返って読むのにまあ疲れる疲れる。
やはり母国語じゃないと可視性が低いんですよ。パッと見た時に入ってくる文字数が圧倒的に違うんです。
そこで、DeepLで翻訳しようと思ったはいいものの、1000を超えるセルに書かれた英語を一つ一つコピペしていくのは流石に令和4年でやることとはとても思えない。
というわけで今回はそんなコピペを面倒くさがる人たち向けの、エクセルに書かれた英語をDeepLでポンポンと訳して別のセルに書き込んでくれる便利なコードを紹介したいと思います。
(既にそれを可能にするアプリはあったのだけれど、自分の環境だと動かなかったので泣く泣く作ったというのはナイショ)
自動化コードを動かすための下準備
今回紹介するPythonコードを動かすにあたって、次の下準備が必要です。
- DeepLの無料APIの登録、APIキーの取得
- ライブラリ(deepl,openpyxl)のインストール
この2つの下準備の具体的な方法は先駆者様が華麗に説明してくださっているので、こちらを参考にご準備ください。
自動化コードとその解説
コード本体
import deepl
import openpyxl
import os
#翻訳したいエクセルのパス、名前、シート名の設定
FilePass='Q:\download'
FileName='Book1'
SheetName='Sheet1'
#翻訳したい行と列の設定
StartRow=1
EndRow=4
StartColumn=3
EndColumn=3
#DeepLのAPIキーの設定
APIKey = 'APIキーを入れる'
#翻訳元の言語、翻訳後の言語の設定
source_lang = 'EN'
target_lang = 'JA'
os.chdir(f'{FilePass}')
wb = openpyxl.load_workbook(f'{FileName}.xlsx')
df_out = wb.active
ws = wb[SheetName]
EndRow += 1
EndColumn += 1
translator = deepl.Translator(APIKey)
cache=0
for i in range(StartRow, EndRow): # 必要な行数分
for j in range(StartColumn, EndColumn): # 必要な列数分
text = ws.cell(row=i, column=j).value
try:
if text is not None:
print(text)
result = translator.translate_text(text, source_lang=source_lang, target_lang=target_lang)
print(result)
# 翻訳後のテキストを入れるセルの設定
ws.cell(row=i, column=j-1, value=str(result))
except:
print("エラーが起きたのでファイルを保存して終了します。")
print(f'CurrentRow={i},CurrentColumn={j}')
cache = 1
break
if cache == 1:
break
#翻訳後ファイルの保存先設定
wb.save(f'{FilePass}\{FileName}_2.xlsx')コードの解説
これは、次のような使い方を意図しています。
- 翻訳したいエクセルファイル(xlsx)が置かれているファイルパス、エクセルファイルの名前、翻訳したい英語が書かれているエクセルのシート名を入力する。
- 翻訳したい行と列を入力する。例えばC1~C4を翻訳したい場合は、StartRowが1, EndRowが4,StartColumnが3,EndColumnが3を入力することになります。
- DeeLのAPIキーを入力する。これはDeepL APIに登録後に得られる「1234abcde-2222-aaaa-bbbb-123456789aaa:fx」みたいな値をシングルクォーテーションの中に入力です。
- 翻訳元の言語、翻訳後の言語を設定する。デフォルトでは英語→日本語の翻訳を意図しているので、翻訳元がENで翻訳語がJAとなっています。他の言語を翻訳したい方はこちらのsource_langあたりをご参照ください。
- 翻訳後のテキストを書き込むセルを設定する。デフォルトでは、翻訳元のセルの左のセルにテキスト翻訳後のテキストを書き込むことを想定して、row=i, column=j-1としています。
- 翻訳後ファイルの保存先を設定する。デフォルトでは、翻訳元のエクセルファイル名が置かれているパスに、「翻訳元のエクセルファイル名_2.xlsx」という形式で保存されます。
- コードを実行する!
動作イメージは下の画像みたいな感じです。(そこ矢印の向きキモっとか言わない!)

終わりに
このコードさえあれば、エクセルの翻訳なんてちょちょいのちょいです。
うぉおおおおおおおおおおおおおおおPython最強!Python最強!Python最強!とか言いながらこのツールを使ってたら1日で1ヶ月の翻訳文字数限界を超えました。。。

文字数が使用限界を超えたところで請求は特にされないのですが、APIを使った翻訳は1ヶ月後に復活するまでできなくなってしまうので、ご利用は計画的に。


コメント