0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

英語が詰まったExcelシートを一括翻訳

Last updated at Posted at 2023-04-26

背景

この前、英語で書かれたExcelファイルを渡されました。。。
Excelって、Wordと違って、一括変換できないんですよね。2016以下だと、一セルずつ
翻訳ボタン押さないといけなくて、英語ヨワヨワ人間の私からするとかなり辛いです。
そこで、Excelシートを一括翻訳してしまおうと思います。

環境

言語: python 3.10
モジュール:

  • xlwings
  • googletrans

実装

まず、Excelファイル「English.xlsx」を用意します。
今回は、以下から英語の記事のタイトルと要約部分を抜粋しました。

.pyファイルと同じ階層に保存してください。
このシートは"English"シートとします。
image.png

また、翻訳を挿入するための"Japanese"シートを作成しておきます。

次に、翻訳するためのpythonファイルを実装します。

englishTojapanese.py
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"シートに翻訳を一括で翻訳できます。
image.png

まとめ

とはいえ、本当にめんどくさい場合です。
英語の勉強するほうがいいですね。。。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?