【5分でわかる】PythonでWordをExcelに変換する方法3選

 

【悩み】
・PythonでWord文書をExcel(エクセル)ファイルへ変換したい。
・どのPythonライブラリを使うべきかを知りたい。
・データ分析の準備やWordで管理されたテーブルをExcelへ移行したい。



こういった「悩み」に答えます。
 

【本記事の内容】
① WordをExcelへ変換できるPythonライブラリ
➁ 事前準備:各種インストール
➂ Word文書をExcelへ変換!3種類のプログラムを紹介!
④ ご紹介したExcel変換プログラムの応用例2選



本記事に掲載した方法を実践したことで、Pythonを使ってWord文書(docxやdocファイル)をExcelファイル(xlsx,xls,xlsm)に変換できました(下の動画参照)。
 



記事の前半では「WordをExcelファイル変換に使えるPythonライブラリの一覧」と「Pythonやライブラリのインストール方法などの環境準備」について解説します。

記事の後半では「WordをExcelファイルに変換するPythonプログラム」と「作成したPythonプログラムの応用例」を説明します。
  

この記事を読み終えることで、「手元にある大量のWordファイルを開かずに短時間でExcelファイルに変換できる」状態になります。
 

ちなみに、「新規作成」「編集」「抽出」といった操作もPythonで実施できます。以下の記事にまとめているので興味がある方は是非ご覧ください。


 

WordをExcelへ変換できるPythonライブラリ


PythonでWordをExcelファイルに変換したい場合、いくつかのライブラリを使う方法があります。今回は、よく使われる6つのライブラリを紹介します。
 

【ご紹介事項】
・PythonでExcelファイルをWordファイルへ変換する流れ
・実現方法ごとに利用するライブラリの一覧


 

PythonでExcelファイルをWordファイルへ変換する流れ

残念ながら本記事執筆時点では、WordファイルをExcelファイルへ直接変換できるPythonライブラリは存在しません。

そのため、以下のいずれかの方法で実現しましょう。
 

【Pythonを使ってWordをExcelへ変換する方法3選】
・変換経由:例えば、WordをHTML変換し、そのHTMLをExcelに変換
・GUIを使う:WordとExcelを開き、コピーアンドペーストを実施
・特定箇所の転記:例えば、Wordからテーブルを抽出し、Excelへ書き込み



以降で、それぞれの方法で利用するPythonライブラリをご紹介します。
 

実現方法ごとに利用するライブラリの一覧

ご紹介したそれぞれの方法において利用するPythonライブラリを、以下の表にまとめます。
 

方法名利用ライブラリ用途備考
変換経由Aspose.Words・WordをHTML変換
・HTMLをExcel変換
Aspose.Wordsのライセンスなどの概要はこちらに記載
変換経由mammoth・WordをHTML変換・Aspose.Wordsを使わない場合
・mammothのライセンスなどの概要はこちらに記載
変換経由LibreOffice・HTMLをExcel変換・Aspose.Wordsを使わない場合
・LibreOfficeのライセンスなどの概要はこちらに記載
GUIを使うPyAutoGUIWordを開きExcelへコピーアンドペーストという一連の操作を自動化PyAutoGUIのライセンスなどの概要はこちらに記載
特定箇所の転記python-docxWordからテーブルなどの必要な情報を抽出python-docxのライセンスなどの概要はこちらに記載
特定箇所の転記openpyxl情報をExcelに書き込むopenpyxlのライセンスなどの概要はこちらに記載


 

以降で、環境準備を説明します。Pythonやライブラリのインストール手順を丁寧に解説しますね。


 

事前準備:各種インストール


「PythonでWordをExcelファイルに変換するための準備」に関してご紹介します。
 

【流れ】
・Pythonのインストール 
・Aspose.Wordsのインストール:HTML変換経由の場合
・mammothとLibreOfficeインストール:HTML変換経由の場合
・PyAutoGUIのインストール:GUIを使う場合
・python-docxとopenpyxlのインストール:特定箇所転記の場合



上記の流れで説明します。
 

Pythonのインストール

以下の記事を参考にし、お使いのパソコンやサーバーにPythonをインストールしましょう。

>> 【ubuntu向け】pyenvでPythonをインストールする手順【簡単】

>> 【コピペOK】pyenvでPythonをインストールする手順【Linux用】

>> 【最短5分】PyAutoGUIをWindowsにインストールする手順の「手順1:Pythonのインストール」を参照

>> 【環境構築】インストーラーでMacOSにPythonをインストール

 

Aspose.Wordsのインストール:HTML変換経由の場合

WordをHTML変換し、そのHTMLをExcelに変換する方法を使う場合、Aspose.WordsのPythonライブラリを使えます。

Aspose.Wordsライブラリのインストール手順に関しては、以下の記事の「Aspose.Wordsのインストール」箇所をご覧ください。

>> 【5分でわかる】PythonでWordからテキストを抽出:3事例解説
 

mammothとhtml2excelのインストール:HTML変換経由の場合

商用のAspose.Wordsライブラリを採用したくない場合、「mammoth」と「html2excel」のPythonライブラリを使いましょう。

mammothライブラリのインストール手順に関しては、以下の記事の「mammothのインストール」箇所をご覧ください。

>> 【5分でわかる】PythonでWordをHTMLに変換:応用例も2つ解説
 

また、LibreOfficeのインストール手順に関しては、以下の記事の「LibreOfficeのインストール」箇所をご覧ください。

>> 【5分でわかる】PythonでWordをPDF変換:Linux含む全OS対象
 

PyAutoGUIのインストール:GUIを使う場合

WordとExcelを開きコピーアンドペースという一連の操作を使う場合、PyAutoGUIのPythonライブラリを使えます。

PyAutoGUIのインストール方法に関しては、以下の記事をご覧ください。

>> 【最短5分】PyAutoGUIをWindowsにインストールする手順

>> 【最短5分】UbuntuにPyAutoGUIをインストールする手順

>> 【最短5分】MacにPyAutoGUIをインストールする手順
 

python-docxとopenpyxlのインストール:特定箇所転記の場合

Wordに記載された特定箇所のみ(例えばテーブル)をExcelに転記したい場合、「python-docx」と「openpyxl」のPythonライブラリを使えます。

python-docxライブラリのインストール手順に関しては、以下の記事の「python-docxとbayoo-docxのインストール」箇所をご覧ください。

>>【5分でわかる】PythonでWordを新規作成する方法
 

また、openpyxlライブラリのインストール手順に関しては、以下の記事の「OpenPyXLライブラリをインストール」箇所をご覧ください。

>> Excelからデータ抽出!Python(OpenPyXL)の読み込み方法まとめ

 

以降で、Pythonを使ってWordをExcelに変換するプログラムとその実行結果を解説します。


 

Word文書をExcelへ変換!3種類のプログラムを紹介!


「PythonでWord文書をExcelファイルへ変換する方法」に関してご紹介します。
 

【ご紹介事項】
・HTML変換を経由しWordをExcelへ変換する例
・GUIを使ってWordをExcelへ変換する例 
・Wordの特定箇所をExcelへ転記する例



以降で、以下「sample-for-image.docx」のWordファイルを用いて、上記の各項目に関して説明します。


 

HTML変換を経由しWordをExcelへ変換する例

Aspose.Wordsライブラリを使った変換例に関しては、以下の公式サイトをご覧ください。

>> Aspose.WordsでWord文書をExcelへ変換する(Aspose.Wordsの公式サイト)
 

また、「mammothとLibreOfficeを使ってWordをExcelに変換する」Pythonプログラムは、以下となります。

プログラム内の「適宜変更」に関しては、必要であれば書き換えてください。

import mammoth
import subprocess


# 変換したいWordのPATH(適宜変更)
word_file_path = './sample-for-image.docx'

# HTMLファイルの出力先(適宜変更)
html_file_path = './output/sample.html'

# Excelファイルの出力先(適宜変更)
excel_file_path = './output/'

# LibreOffice内にあるsoffice.comのPATH
soffice_cmd = "C:\Program Files\LibreOffice\program\soffice.com"

# 1. WordをHTMLに変換
html = None # 変換されたHTMLを格納用
with open(word_file_path, "rb") as docx_file:
    # HTMLに変換
    result = mammoth.convert_to_html(docx_file)

    # HTMLを格納
    html = result.value
    
    # 変換時のエラーなど
    messages = result.messages
    
    # HTMLを出力
    print(html)
    
    # エラーや警告などを出力
    print(messages)

with open(html_file_path, mode="w", encoding="utf-8") as f:
	f.write(html)

# 2. HTMLをWordに変換
command = f'"{soffice_cmd}" --headless --calc --convert-to xlsx:"MS Excel 97" --outdir {excel_file_path}  {html_file_path}'
print(command)

try:
    subprocess.run(command, shell=True, check=True)
    print("変換が完了しました。")
except subprocess.CalledProcessError as e:
    print("コマンドの実行中にエラーが発生しました:", e)	



上記のプログラムを「convert-word-html-excel.py」というファイル名で保存しましょう。
 

【subprocess関数とsofficeコマンドについて】
書き方と処理に関しては、以下の記事に掲載していますのでご覧ください。
参照:【5分でわかる】PythonでWordをPDF変換:Linux含む全OS対象



以下のコマンドで、上記プログラムを実行できます。

python convert-word-html-excel.py


その結果、以下のようにWordをExcelに変換できます(下の動画参照)。


 

GUIを使ってWordをExcelへ変換する例 

GUIを使ってWordをExcel変換する場合、PyAutoGUIライブラリを使います。「PyAutoGUIを使ってWordをExcelに変換する」Pythonプログラムは、以下となります。

プログラム内の「適宜変更」に関しては、必要であれば書き換えてください。

import pyautogui as pag
from time import sleep
import subprocess
import pyperclip

# 出力先のフォルダ(適宜変更)
output_dir = './output/'

# 変換したいWordのPATH(適宜変更)
word_file_path = './sample-for-image.docx'

# Excelファイル名(適宜変更)
excel_name = 'sample.xlsm'

# Excelファイルの出力先
excel_file_path = output_dir + excel_name

# 変換したいWord文書を開くコマンド
open_word_cmd= f'start {word_file_path}'

# 空のExcelファイルを開くコマンド
open_excel_cmd= f'start {excel_file_path}'


# 1. 変換対象のWord文書を開く
subprocess.run(open_word_cmd, shell=True, check=True)
sleep(5)

# 2. Word内の情報をコピー
pag.hotkey("ctrl", "a")
sleep(5)
pag.hotkey("ctrl", "c")
sleep(5)

# 3. 開いたWord文書を閉じる
pag.hotkey("alt", "f4")
sleep(2)


# 4. 空のエクセルファイルを作る
subprocess.run(f'echo. > {output_dir}newfile.txt & cd {output_dir} & ren newfile.txt {excel_name}', shell=True, check=True)
sleep(5)


# 5. エクセルを開く
subprocess.run(open_excel_cmd, shell=True, check=True)
sleep(5)


# 6. コピーしたWord内の情報をExcelにペースト
pag.hotkey("ctrl", "v")
sleep(5)


# 7. Excelファイルを保存
pag.hotkey("ctrl", "s")
sleep(2)

pag.press("tab")
sleep(2)

pag.press("enter")
sleep(2)

pag.press("tab")
sleep(2)

pag.press("down")
sleep(2)

for i in range(6):
  pag.press("up")
  sleep(2)

pag.press("enter")
sleep(2)

pag.press("tab")
sleep(2)

pag.press("enter")
sleep(2)

pag.press("tab")
sleep(2)

pag.press("enter")
sleep(2)


# 8. 開いたExcelを閉じる
pag.hotkey("alt", "f4")
sleep(2)



上記のプログラムを「convert-word-excel.py」というファイル名で保存しましょう。
 

【PyAutoGUIの関数について】
PyAutoGUIを使うことでマウスやキーボード操作を自動化できます。各関数の詳細に関しては、以下の記事に掲載していますのでご覧ください。
参照:【チートシート掲載】PyAutoGUIの使い方をサンプルを交え解説
備考:プログラム内でpagが付いた部分がPyAutoGUIの関数となります



以下のコマンドで、上記プログラムを実行できます。

python convert-word-excel.py


その結果、以下のようにWordをExcelに変換できます(下の動画参照)。


 

Wordの特定箇所をExcelへ転記する例

Wordの特定箇所をExcelへ転記したい場合、「python-docx」と「openpyxl」を使います。

今回は、「Word内にあるテーブルをExcelへ転記する」Pythonプログラムをご紹介します。プログラム内の「適宜変更」に関しては、必要であれば書き換えてください。

import docx
from openpyxl import Workbook

# 変換したいWordのPATH
word_file_path = './sample-for-image.docx'

# Excelファイルの出力先
excel_file_path = './output/sample.xlsx'

# ワードファイルの読み込み
doc = docx.Document(word_file_path)

# エクセルのオブジェクト作成
wb = Workbook()
ws = wb.active

# テーブル情報を取得しエクセルは転記
now_count = 1
for table in doc.tables:
    for row in table.rows:
      tmp_data = []
      for cell in row.cells:
        print(cell.text)
        tmp_data.append(cell.text)
      # セル値を書き込む
      ws.append(tmp_data)

# Excelファイルを保存
wb.save(excel_file_path)



上記のプログラムを「convert-word-table-excel.py」というファイル名で保存しましょう。
 

【python-docxの関数について】
python-docxを使うことで、Wordからテーブルなどの情報を抽出できます。各関数の詳細に関しては、以下の記事に掲載していますのでご覧ください。
参照:【5分でわかる】PythonでWordからテーブルを抽出:応用例も解説
備考:プログラム内でdocが付いた部分がpython-docxの関数となります

 

【openpyxlの関数について】
openpyxlを使うことで、Excelを新規作成し、セルにデータを追記できます。各関数の詳細に関しては、以下の記事に掲載していますのでご覧ください。
参照:Excel書き込みを自動化!Python(OpenPyXL)の書き込み方法まとめ
備考:プログラム内でwsやwbが付いた部分がopenpyxlの関数となります



以下のコマンドで、上記プログラムを実行できます。

python convert-word-table-excel.py


その結果、以下のようにWordをExcelに変換できます(下の動画参照)。


 

上記のようにAspose.Words、mammoth、LibreOffice、PyAutoGUI、python-docx、openpyxlを使うことでExcelファイルに変換できます。


 

ご紹介したExcel変換プログラムの応用例2選


先ほど作成したPythonプログラムを使うことで様々な作業を効率化できます。例えば、以下のような応用例が考えられます。
 

【ご紹介事項】
・データ分析ツールの制約でExcelファイル変換が必要!
・大量のWordに記載されたテーブルをExcelで管理したい



以降で、上記項目に関して図を用いて簡単に説明しますね。
 

データ分析ツールの制約でExcelファイル変換が必要!

データ分析ツールの制約でExcelファイル変換が必要な場合、上記のプログラムを改造し適用することで、大量にあるWordファイルをExcelファイルへ変換する作業の時間短縮を実現できます。
 


 

大量のWordに記載されたテーブルをExcelで管理したい

Wordにテーブルデータが記載されていることが多々あります。そのデータをエクセルの関数を使って集計しなおしたい場面が頻繁にあるかと思います。

そういった場面において、先ほどご紹介したプログラムの応用により、作業にかかる時間を短縮できます。
 


 

上記のようにご紹介したライブラリとPythonをうまく使うことで、様々な作業を自動化し時短を実現できます。



Pythonを使うことで、Word文書をExcelに変換できることを説明しました。このPythonを使うことで、あらゆる業務や作業を自動化できます。
その事例やヒントを知りたい方には、以下の本がオススメです。

 



ちなみに、上記教材の詳細なレビューに関しては、以下のサイトにまとめています。

>> 「退屈なことはPythonにやらせよう」のレビューの一覧


 

【まとめ】3つの方法でExcelファイル変換を実現!


いかがでしたでしょうか?

上記で紹介したAspose.Words、mammoth、LibreOffice、PyAutoGUI、python-docx、openpyxlライブラリを使うことで、PythonでWord文書をExcelに変換できます。

最後にもう一度内容を確認しましょう。
 

【おさらい】
・PythonでWordをExcelに変換したい場合、Aspose.Words、mammoth、
 LibreOffice、PyAutoGUI、python-docx、openpyxlを使う
・変換方法は3つ!「変換経由」「GUIを使う」「特定箇所の転記」
・Pythonとご紹介したライブラリを使うことでデータ分析業務の時短が可能



ちなみに、「新規作成」「編集」「抽出」といった操作もPythonで実施できます。以下の記事にまとめているので興味がある方は是非ご覧ください。



本ブログでは、「業務の時短化に繋がるIT技術」や「クラウドやOSSの学び方」などを発信しています。定期的に更新していますので、ぜひブックマークをよろしくお願いいたします。

>> IT技術やその学び方を発信しているサイト「駆け出し物語」(本ブログ)
 

コメント