OpenPyXLとは
OpenPyXLとはexcelをpythonで操作する為のモジュールで読み書き等が行えます。
データ解析や複雑な処理を行うのはpandasを使うのがベターですが、
スクレイピングしたデータを保存したり、アップロードするブログ記事等を読み込む等、簡単なexcelの操作を行うのはOpenPyXLを使用するほうがおススメです。
OpenPyXLをダウンロードしよう
OpenPyXLはpipでダウンロードを行えますので、下記コマンドよりダウンロードしましょう。
pip install openpyxl
OpenPyXLで新規ファイルの作成をしよう
まずはOpenPyXLを使用して、excelの新規ファイルを作成する方法をご紹介します。
また、筆者のPCはwindowsです。excelファイルは読み込みも書き込みもデスクトップ上から行う事としますので、ファイルの作成もデスクトップをディレクトリに指定しています。
import openpyxl wb = openpyxl.Workbook() wb.save(r'C:\Users\user\Desktop\sample.xlsx')
新しくsample.xlsxがデスクトップに新規作成できました。
※注意点、saveメソッドを使用する時は既存のファイルを上書きしてしまわないように細心の注意を払いましょう。
例として、新しく作成されたsample.xlsxに何か文字を打ち込んで保存した後に上記コマンドを再実行してください。
打ち込んだ文字は全てなくなり、新しく作成されたxlsxが保存されました。
セルを指定して入力してみよう
まずは基本的な入力方法を解説します。
今回もファイルの新規作成してsample.xlsxに保存します。
まずは、コードを見てみましょう。
import openpyxl wb = openpyxl.Workbook() wa = wb.active wa['A1'] = 10 wa['B1'] ='こんにちは' wb.save(r'C:\Users\user\Desktop\sample.xlsx')
上記のコードをざっと説明すると、wb.activeが変数waに収納されていますが、activeとはexcelのシートを選択している状態の事です。
excelでセルをクリックすると緑の線で囲まれますが、wa[‘A1’]と書かれている部分はAIのセルをactiveにしていると認識すれば大丈夫です。
上記のコードではA1形式でセルの指定を行いましたが、R1C1形式でも指定する事ができます。
R1C1形式とは
R1C1形式とはA1形式とは違い行、列ともに数字で表す形式の事です。
RはRowの略で行を意味し、Cはcolumnの略で列を意味します。
それでは、A1形式でいうところの「C5」に「こんばんは」とR1C1形式で入力してみましょう。
import openpyxl wb = openpyxl.Workbook() wa = wb.active wa.cell(row=5, column=3, value='こんばんは') wb.save(r'C:\Users\user\Desktop\sample.xlsx')
これでC5に「こんばんは」と入力できました。
また、第3引数にvalueを書きましたが、このように書いても同じ実行結果になりますので、覚えておきましょう。
import openpyxl wb = openpyxl.Workbook() wa = wb.active wa.cell(row=5, column=3).value = 'こんばんわ' wb.save(r'C:\Users\user\Desktop\sample.xlsx')
R1C1形式は慣れないうちは記述方法がめんどくさそうに感じますが、行、列ともに数字で記述できるのでfor文等の構文と相性がよく、連続してセルを取得したり、連続して入力する事をコントロールしやすくなります。
for文を利用して、繰り返し入力する例を見てみましょう。
今回は縦5列横5列に「こんばんわ」を入力しています。
import openpyxl wb = openpyxl.Workbook() wa = wb.active for i in range(3,8): for j in range(3,8): wa.cell(row=i, column=j).value = 'こんばんわ' wb.save(r'C:\Users\user\Desktop\sample.xlsx')
for文に関しておさらい等を行いたい方は関連ページを是非ご参照ください。
for文とは for文とはpythonの制御構造の一つで、処理を繰り返す時に使われる構文です。 制御構造に関しては前回の「if文」を参考にしてください。 当サイト(In-Output)におけるfor文の説明手順 for文はリストやタプル、辞[…]
OpenPyXLで既存のファイルを読み込もう
先ほど作成したsample.xlsxを用いてファイルの読み込みと別の作成のファイルへの保存を行ってみましょう。
ファイルを読み込んで別のファイルに保存する方法は大切なファイルの上書きの防止にもつながりますので。筆者は読み込みと保存のファイルは分けるようにしています。
ファイルの読み込みには
と書いて上げればOKです。ちなみに新規ファイルを作成したときは、Workbookと書きましたが、load_workbookを記述する時はwは小文字でなければいけないので注意しましょう。
import openpyxl wb = openpyxl.load_workbook(r'C:\Users\user\Desktop\sample.xlsx') wb.save(r'C:\Users\user\Desktop\sample2.xlsx')
これでsample.xlsxを読み込んでsample2.xlsxに保存できました。
シートを追加してみよう
お次はシートを追加するメソッドを解説致します。
引数を何も渡さなければ「Sheet1」と作成されます。名前を指定すると指定した名前で新しいシートが作成されます。それではコードを見てみましょう。
import openpyxl wb = openpyxl.load_workbook(r'C:\Users\user\Desktop\sample.xlsx') wa = wb.active wa = wb.create_sheet() wa = wb.create_sheet(title="新しいシート") wb.save(r'C:\Users\user\Desktop\sample2.xlsx')
これで現在シートは3つになっています。
元から存在した「Sheet」名前を付けなかった「Sheet1」名前を付けた「新しいシート」です。
シートの選択方法
新しく情報を別のページに入力したい時はシートを指定する必要があります。
先ほど作成した3つのシートがある状態のファイルを読み込んで別のシートに入力する方法の一例を記述しますが、OpenPyXLはpythonのライブラリの中でもかなり頻繁に更新されるライブラリです。
この書き方が一番美しい書き方って断言はできませんが、筆者はそもそも別シートへの記入はあまり行わないので、こういう書き方でも別シートへの記載ができる程度に覚えておいてください。
それでは先ほど作成した「新しいシート」のA1セルに「おはよう」と入力します。
import openpyxl wb = openpyxl.load_workbook(r'C:\Users\user\Desktop\sample.xlsx') wb['新しいシート']['A1'].value = 'おはよう' wb.save(r'C:\Users\user\Desktop\sample2.xlsx')
新しいシートを別の変数に代入して使いまわすことも勿論可能です。
import openpyxl wb = openpyxl.load_workbook(r'C:\Users\user\Desktop\sample.xlsx') wb2 = wb['新しいシート'] wb2['A1'].value = 'おはよう' wb.save(r'C:\Users\user\Desktop\sample2.xlsx')
最後に
この記事で書いているのはOpenPyXLの機能のほんの一部です。
excelをがっつり使っている方からすると物足りないボリュームかと思われますが、筆者がpythonでexcelを使用する用途は主にスクレイピングしたデータの保存とブログ用記事の抽出や便利なHTML構文の抽出目的ですので、上記のコードのみで事足ります。
本当にOpenPyXLのすべてを書ききるととんでもないボリュームになってしまいますので、今回は筆者が主に使用する機能をご紹介いたしました。