Pythonを使用してMicrosoft ExcelとWordを自動連係(1/3)

調査研究

1.Pythonを使用してMicrosoft ExcelとWordを自動連係(1/3)まとめ

・Pythonを使ってWindowsもExcelもない環境でExcelファイルを新規に作成/編集可能
・openpyxlを使うとExcel内のセルの値を取得して計算やグラフの作成なども可能
・openpyxlの最新版は.xls形式は対応していないのでxlrdを使う必要がある

2.ExcelファイルをPythonを使って作成する

以下、www.kdnuggets.comより「Automate Microsoft Excel and Word Using Python」の意訳です。元記事の投稿は2021年8月、Mohammad Khorasaniさんによる投稿です。

Microsoft ExcelとWordは使わない環境の人だと一切使わないと思うのですが、元記事が8月の人気記事になっていた事からも、使う人はかなり使うのだと思います。

私自身もGoogle Spreadsheetよりサイズが大きなファイルを扱いやすいので、何十万件規模のファイルをさっと確認する際には便利に感じる事はあります。

ちなみに
・Excel 2003まで最大65,536行(ファイル形式は.xls)
・Excel 2007以降は1,048,576行(ファイル形式は.xlsx)
・Google Spreadsheetは行の制限はない(ただし、スプレッドシート全体で最大500万セルまでの制限あり。数年前まで200万だった)

また、本稿で紹介しているコードは3つのパートから構成されています。
1)Excelファイルを新規に作成してグラフを作成する
動かす際にExcelもWindowsも不要です。Google Colab上で動かせる事を確認済です。

2)WindowsAPIを使ってExcelを起動してグラフを画像として保存する
Microsoft Excel 2007以降がインストールされているWindows上でないと動かせません。WindowsのAnaconda環境で動かせる事を確認済です。

3)保存した画像とデータをWordファイル内に反映する
Google Colab上でも動かせる事を確認済です。ひな形として使うwordファイル(.docx)を別途Colab内に設置する必要はあります。

また、コード部分は日本語対応を確認するために元記事と少し変えてます。

更にですが、Openpyxlは現在進行形で開発されているためか、まだ安定していない感触を受けました。本格的に色々と変更したくなった場合は、OfficeやVBAのドキュメント、xlsxファイルをテキストエディターで開いてライブラリが何をやっているのか確認する必要なども出て来そうなので「簡単に実現できる事だけやる。細かい操作の実現有無はあまり深入りしないでパッケージ側の進化を待つ」のスタンスの方がベターかもしれません。

アイキャッチ画像のクレジットはPhoto by Mohammad Rezaie on Unsplash

Microsoft ExcelとWordは、間違いなく、企業や組織の世界で最も頻繁に使用されている2つのソフトウェアです。

それらは実質的に「仕事」という用語自体と同義です。多くの場合、私たちが2つのソフトと何かを組み合わせる事をしなければ、1週間も無事に過ごす事はできないでしょう。

平均的な日常生活では自動化は求められませんが、自動化が必要になる場合があります。つまり、生成するグラフ、図、表、およびレポートが多数ある場合、手動で実行する事を選択すると、非常に面倒になる可能性があります。

はい、手動で作成する必要はありません。実際、Pythonで処理全体を自動化する方法があります。例えば、ExcelとWordを統合して、Excelでスプレッドシートを作成し、その結果をWordに転送して、事実上瞬時にレポートを生成する事ができます。

Openpyxlを使ってみましょう!

Openpyxlは、おそらくPythonで最も用途の広いExcel操作用ライブラリの1つであり、公園を散歩するかのようにExcel操作を行う事ができます。

Openpyxlを使用すると、現在および従来のすべてのExcel形式(.xlsx形式および.xls形式)を読み書きできます。行と列の入力、数式の実行、2Dおよび3Dグラフの作成、軸とタイトルのラベル付け、およびその他の便利な機能を多数使用できます。

訳注:私が試した限り、.xls形式のファイルを読み込もうとするとエラーになり、以下の警告がでました。「openpyxlは.xls形式のファイルは対応していないので、読み込みたい場合はxlrdというライブラリを使ってください」公式サイトにも.xlsx形式および.xlsm形式に対応と書いてあるのでもしかしたら元記事は使っているVersionが異なるかもしれません。

ただし、最も重要なのは、このパッケージを使用すると、Excelの行と列を無限に反復処理できるため、以前に実行しなければならなかった厄介な数の計算やグラフ作成から解放されます。

Python-docx

そして、Python-docxもあります。このパッケージは、Word操作を行うライブラリであり、OpenpyxlがExcel操作を行うライブラリです。これらのドキュメントをまだ確認していない場合、おそらく読んでみる必要があるでしょう。

Python-docxは、Python自体を使い始めて以来、私が使ってきた中で最もシンプルでわかりやすいツールキットの1つです。テキストの挿入、テーブルへの入力、レポートへの画像のレンダリングをオーバーヘッドなしで自動的に行うことで、ドキュメントの生成を自動化できます。

さらに面倒なことをせずに、独自の自動操作処理を作りましょう。先に進み、Anaconda(または任意の他のIDE)を起動して、次のパッケージをインストールします。

pip install openpyxl
pip install python-docx
訳注:私がAnacondaのwindows環境でインストールが必要になったパッケージは以下です。(channelにconda-forgeを追加しないと見つからないパッケージが幾つかあります)
Openpyxl 3.0.7
python-docx 0.8.9
pywin32 301
docxtpl 0.9.2
pillow 8.3.1
また、以下のコードで元Excelファイルを作成できます。

import pandas as pd

# 元Excelファイルを作成
df = pd.DataFrame([
  ["", "0.5", "0.6"],
  ["", "0.5", "1.2"],
  ["", "0.5", "2.4"],
  ["", "0.5", "4.8"],
  ["", "1", "4.8"],
  ["", "1", "0.6"],
  ["", "1", "0.6"]],
columns=['電力', '電流', '電圧'])

df.to_excel(f"テストエクセルワークブック.xlsx", index = False, sheet_name='シート1')

続いて、Excelシートのすべての行を繰り返し処理して、電流に電圧を掛けて電力の値を計算して挿入します。


import openpyxl as xl

from openpyxl.chart import LineChart, Reference
workbook = xl.load_workbook('テストエクセルワークブック.xlsx')
sheet_1 = workbook['シート1']

for row in range(2, sheet_1.max_row + 1):
  current = sheet_1.cell(row, 2)
  voltage = sheet_1.cell(row, 3)
  power = float(current.value) * float(voltage.value)
  power_cell = sheet_1.cell(row, 1)
  power_cell.value = power

values = Reference(sheet_1, min_row = 2, max_row = sheet_1.max_row, min_col = 1, max_col = 1)
chart = LineChart()

chart.y_axis.title = '電流'
chart.x_axis.title = 'インデックス'
chart.add_data(values)
sheet_1.add_chart(chart, 'e2')
workbook.save('テストエクセルワークブック2.xlsx')

計算が完了したら、電力として計算した値を使用して、以下に示すように、指定されたセルに折れ線グラフを生成して挿入できます。

 

3.Pythonを使用してMicrosoft ExcelとWordを自動化(1/3)まとめ

1)www.kdnuggets.com
Automate Microsoft Excel and Word Using Python

2)openpyxl.readthedocs.io
openpyxl – A Python library to read/write Excel 2010 xlsx/xlsm files

3)github.com
pywin32

4)python-docx.readthedocs.io
python-docx — python-docx 0.8.11 documentation

5)docxtpl.readthedocs.io
Welcome to python-docx-template’s documentation!

タイトルとURLをコピーしました