背景
この前、英語で書かれたExcelファイルを渡されました。。。
Excelって、Wordと違って、一括変換できないんですよね。2016以下だと、一セルずつ
翻訳ボタン押さないといけなくて、英語ヨワヨワ人間の私からするとかなり辛いです。
そこで、Excelシートを一括翻訳してしまおうと思います。
環境
言語: python 3.10
モジュール:
- xlwings
- googletrans
実装
まず、Excelファイル「English.xlsx」を用意します。
今回は、以下から英語の記事のタイトルと要約部分を抜粋しました。
.pyファイルと同じ階層に保存してください。
このシートは"English"シートとします。
また、翻訳を挿入するための"Japanese"シートを作成しておきます。
次に、翻訳するためのpythonファイルを実装します。
import xlwings as xb
from googletrans import Translator
def main():
translated = Translator()
#エクセルシートを開く
book = xb.Book(".\English.xlsx")
sheet = book.sheets['English']
ja_sheet = book.sheets['Japanese']
#エクセルB列の最終行を求める
end_row_title = sheet.range("B2").end("down").row
#エクセルC列の最終行を求める
end_row_content = sheet.range("C2").end("down").row
Num = 1
#B行のタイトルを翻訳して、Japaneseシートに翻訳を書き出し、A行に項番を書き出す
for i in range(end_row_title -1):
ja_sheet.range("A"+str(i+2)).value = Num
Num = Num + 1
text = sheet.range("B"+str(i+2)).value
result = translated.translate(text,dest="ja")
ja_sheet.range("B"+str(i+2)).value = result.text
ja_sheet.range("B"+str(i+2)).wrap_text = True
#C行の要約を翻訳して、Japaneseシートに書き出す
for i in range(end_row_content -1):
text = sheet.range("C"+str(i+2)).value
result = translated.translate(text,dest="ja")
ja_sheet.range("C"+str(i+2)).value = result.text
ja_sheet.range("C"+str(i+2)).wrap_text = True
#開いたエクセルシートを保存する
book.save()
#エクセルシートを閉じる
book.close()
if __name__ == "__main__":
main()
xlwingがpythonでExcelを操作するモジュールとなります。
以下、基本的なExcelの開き方からセルの値を取得・書き込み・保存する方法になります。
import xlwings as xb
book = xb.Book("エクセルファイルパス") # エクセルを開く
sheet = book.sheets['シート名'] # シートを開く
cell_value = sheet.range("セル番号").value
sheet.range("セル番号").value = "任意の値" #セルに値を代入
book.save() #エクセルファイルを保存する
book.close() #エクセルファイルを閉じる
あとは今回、各特定の列の使用中の最終行を取得します。
end_row = sheet.range("セル番号").end("down").row #指定のセル番号から下向きに最終行を求める
翻訳ですが、googletransを使っていきます。
from googletrans import Translator
translated = Translator() #インスタンス作成
result = translated.translate("翻訳する文字列",dest="ja") #日本語に翻訳
実行
では実行してみます。
こんな感じで、"Japanese"シートに翻訳を一括で翻訳できます。
まとめ
とはいえ、本当にめんどくさい場合です。
英語の勉強するほうがいいですね。。。