Pythonを使用することでExcel(エクセル)を簡単に読み書きすることができます。 実際にPythonを業務で使用するときに、効率化が最もわかりやすいのがExcelの操作になるので、その基本的な操作やライブラリをインストールする方法を紹介します。
Pythonを使ってエクセルを操作する
Pythonでエクセルを操作するには、ライブラリのインストールが必要だよ!
PythonでExcel(エクセル)を操作するには大きく分けると2つの方法があります。1つめの方法はExcelのファイルを直接操作してデータの読み書きを行う方法です。もう1つはPythonからWindowsを操作してExcelを起動させて、その上でPythonからの指令でデータを読み書きする方法で、イメージとしては、マウスやキーボードの操作を人間の代わりにPythonが自動操作する方法です。
前者の場合はパソコンにExcelがインストールされている必要はありません。後者の場合はパソコンにExcelがインストールされている必要があります。
どちらを使用するにしても、Pythonに新たにExcelを操作するためのライブラリのインストールが必要です。
エクセルライブラリ openpyxl のインストール方法
ライブラリは、通常は openpyxl を使用します。
まずはライブラリをインストールする必要があります。ライブラリは先述のように操作する方法に応じてインストールします。一般的にPythonでExcel(エクセル)操作する場合は、ファイルを直接操作する事を意味するので、「openpyxl」をインストールします。「opnepyxl」を使用するメリットとしては、表中にも記載のようにExcelがインストールされている必要がないことです。業務に使用しているPCには一般的にエクセルがインストールされている事が多いと思いますが、安価なPCやRaspberry Pi等のLinux系のエッジ端末(5000円程度)を使用したい場合は、「openpyxl」を使用します。デメリットとしては、Excelの動作を完全にカバーしているわけではないので、一部には実現できない機能があります。しかし、一般的な機能は十分カバーしているので、基本は「openpyxl」を使用して、どうしてもカバーできない部分は「pywin32」を使用します。
操作方法 | ライブラリ名 | Excel(エクセル)要否 |
---|---|---|
ファイルを直接読み書きする | openpyxl | 不要 |
Windowsのを操作してExcelを操作する | pywin32(win32com) | 必要 |
Windowsでライブラリをインストールするには、メニューからw欄で出てくる「Windows PowerShell」を起動します。
Windows PowerShellを起動したら、次のコマンドを入力してリターンキーで実行します。「pip install -U ライブラリ名」コマンドは、Pythonのライブラリの最新版をインストールするコマンドです。
pip install -U openpyxl
いろいろなメッセージが表示されますが、最後に「Successfully installed openpyxl-*.*.**」と表示されればインストール成功です。
正しくインストールされたか確認してみましょう。次のコマンドをWindows PowerShellで、入力と実行をするとインストールしたバージョンが表示されます。
pip show openpyxl
下図の場合は、バージョン3.0.10がインストールされているのが確認できます。
openpyxlでエクセルのファイル操作
Pythonで、エクセルファイルを新規作成したり、
既にある、エクセルファイルを読み込んだりする方法です。
エクセルファイルの新規作成
それではPythonでExcel(エクセル)ファイルを作成してみましょう。次のコードを入力して実行すると、フォルダ内にExcelファイルが作成され、ファイルを開いてみると B2 セルに「テスト書き込み」という文字が書き込まれています。
import openpyxl as xls
book = xls.Workbook()
sheet = book.active
sheet["B2"] = "テスト書き込み"
book.save("testbook.xlsx")
作成されたエクセルファイルを確認すると、左記のようになっていると思います。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.Workbook()」は「book」という名前で、エクセルの新規ブックを作成しています。
◆3行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆4行目の「sheet[“B2”] = “テスト書き込み”」は、取得したシートのB2セルに文字を書き込んでいます。
◆5行目の「book.save(“testbook.xlsx”)」は、作成したエクセルブックを「testbook.xlsx」という名前で保存しています。
エクセルファイルの読み込み
次にエクセルファイルを読み込んでみましょう。次のコードを入力して実行すると、「テスト書き込み」という文字列が表示されます。(読み込むファイルは、上で作成した testbook.xlsx です)
import openpyxl as xls
book = xls.load_workbook("testbook.xlsx")
sheet = book.worksheets[0]
cell = sheet["B2"]
print(cell.value)
テスト書き込み
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.load_workbook(“testbook.xlsx”)」は、「testbook.xlsx」という名前のエクセルファイルを読み込んでいます。
◆3行目の「sheet = book.worksheets[0]」は、これから操作するシートを指定しています。具体的には先頭のシートを指定しています。番号はシートを左から数えて何番目かを指定し、最も左の番号は「0」になります。
◆4行目の「cell = sheet[“B2”]」は、B2セルをオブジェクトとして取得しています。
◆5行目の「print(cell.value)」は、aという変数にB2セルの値を取得して入れています。
ファイル名やフォルダ名の取得
ファイル名やフォルダ名をまとめて取得する方法です。
ファイルやフォルダー名を取得する方法を紹介します。ファイル名とフォルダー名を全てを取得、ファイル名を取得、エクセルファイル名を取得、の3種類の方法を説明します。次のコードを入力して実行してみましょう。
import openpyxl as xls
import glob
book = xls.Workbook()
book.save("テスト13a実行結果.xlsx")
book = xls.Workbook()
book.save("テスト13b実行結果.xlsx")
book = xls.Workbook()
book.save("テスト13c実行結果.xlsx")
print(glob.glob("*"))
print(glob.glob("*.*"))
print(glob.glob("*.xlsx"))
['LOG_kaiseki8.py', 'test13.py', 'テスト13a実行結果.xlsx', 'テスト13b実行結果.xlsx', 'テスト13c実行結果.xlsx', 'データ']
['LOG_kaiseki8.py', 'test13.py', 'テスト13a実行結果.xlsx', 'テスト13b実行結果.xlsx', 'テスト13c実行結果.xlsx']
['テスト13a実行結果.xlsx', 'テスト13b実行結果.xlsx', 'テスト13c実行結果.xlsx']
実行後のフォルダ内のファイル
プログラムを実行すると3つのエクセルファイルが作成されて、その後に作成した3つのエクセルファイルも含めた、フォルダー内のファイルやフォルダー名のすべてをリストとして表示しています。(表示される名前は、実行時のPCのフォルダーに保存されている内容次第なので必ずしも、この内容にはなりません。)
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「import glob」は、ライブラリをインポートしてファイル名やフォルダ名を取得できるようにしています。ファイル名を取得するには「glob」を使用します。
◆4~8行目では、ファイル名取得のテスト用に「テスト13a実行結果.xlsx」「テスト13b実行結果.xlsx」「テスト13c実行結果.xlsx」の3つのエクセルファイルを新規に作成しています。
◆11行目の「print(glob.glob(“*”))」は、フォルダ内のファイル名やフォルダー名を取得して表示しています。「*」はワイルドカードで、これで指定する事でファイル名とフォルダー名の全てを取得しています。
◆12行目の「print(glob.glob(“*.*”))」は、フォルダ内のファイル名を取得して表示しています。「*」はワイルドカードで、これで拡張子を明示的に指定する事でファイル名のみを全てを取得しています。
◆13行目の「print(glob.glob(“*.xlsx”))」は、フォルダ内のエクセルファイル名を取得して表示しています。「*」はワイルドカードで、これで拡張子に「xlsx」を明示的に指定する事でエクセルファイル名のみを全てを取得しています。
特定の名称のファイル名の取得
特定のファイル名を取得する方法です。
多くのデータの処理をする場合は、特定の名称が付けられたファイルのデータのみを処理したい場合があります。ここでは、特定の名称のファイル名を取得する方法を紹介します。次のコードを入力して実行してみましょう。
import openpyxl as xls
import glob
book = xls.Workbook()
book.save("顧客情報1.xlsx")
book = xls.Workbook()
book.save("顧客情報2.xlsx")
book = xls.Workbook()
book.save("顧客情報3.xlsx")
book = xls.Workbook()
book.save("売上情報1.xlsx")
book = xls.Workbook()
book.save("売上情報2.xlsx")
book = xls.Workbook()
book.save("売上情報3.xlsx")
print(glob.glob("顧客*.*"))
print(glob.glob("売上*.*"))
print(glob.glob("*2*.*"))
['顧客情報1.xlsx', '顧客情報2.xlsx', '顧客情報3.xlsx']
['売上情報1.xlsx', '売上情報2.xlsx', '売上情報3.xlsx']
['売上情報2.xlsx', '顧客情報2.xlsx']
プログラムを実行すると、「顧客情報1.xlsx」「顧客情報2.xlsx」「顧客情報3.xlsx」「売上情報1.xlsx」「売上情報2.xlsx」「売上情報3.xlsx」の6つのエクセルファイルが作成されます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「import glob」は、ライブラリをインポートしてファイル名やフォルダ名を取得できるようにしています。ファイル名を取得するには「glob」を使用します。
◆4~15行目では、ファイル名取得のテスト用に「顧客情報1.xlsx」「顧客情報2.xlsx」「顧客情報3.xlsx」「売上情報1.xlsx」「売上情報2.xlsx」「売上情報3.xlsx」の6つのエクセルファイルを新規に作成しています。
◆17行目の「print(glob.glob(“顧客*.*”))」は、ファイル名に「顧客」を含むエクセルファイルを取得して表示しています。「*」はワイルドカードで、これで指定する事でファイル名とフォルダー名の全てを取得しています。
◆18行目の「print(glob.glob(“売上*.*”))」は、ファイル名に「売上」を含むエクセルファイルを取得して表示しています。「*」はワイルドカードで、これで指定する事でファイル名とフォルダー名の全てを取得しています。
◆19行目の「print(glob.glob(“*2*.*”))」は、ファイル名に「2」を含むエクセルファイルを取得して表示しています。「*」はワイルドカードで、これで指定する事でファイル名とフォルダー名の全てを取得しています。
取得したフィアル名から拡張子を削除
取得したフィアル名から拡張子を削除する方法です。
複数のファイルを一度に処理する時に、取得したファイル名の「拡張子」を削除したい場合があります。ここでは、取得したファイル名から拡張子を削除する方法を紹介します。次のコードを入力して実行してみましょう。
import openpyxl as xls
import glob
book = xls.Workbook()
book.save("顧客情報1.xlsx")
book = xls.Workbook()
book.save("顧客情報2.xlsx")
book = xls.Workbook()
book.save("顧客情報3.xlsx")
book = xls.Workbook()
book.save("売上情報1.xlsx")
book = xls.Workbook()
book.save("売上情報2.xlsx")
book = xls.Workbook()
book.save("売上情報3.xlsx")
#エクセルのファイル名を取得(拡張子がxlsxのファイル名を取得)
fnames0 = []
for name in glob.glob("*.xlsx"):
fnames0.append(name)
#ファイル名の拡張子を削除
fnames1 = []
for name in fnames0:
name1 = name[:len(name)-5]
fnames1.append(name1)
print(fnames0)
print(fnames1)
['売上情報1.xlsx', '売上情報2.xlsx', '売上情報3.xlsx', '顧客情報1.xlsx', '顧客情報2.xlsx', '顧客情報3.xlsx']
['売上情報1', '売上情報2', '売上情報3', '顧客情報1', '顧客情報2', '顧客情報3']
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「import glob」は、ライブラリをインポートしてファイル名やフォルダ名を取得できるようにしています。ファイル名を取得するには「glob」を使用します。
◆4~15行目では、ファイル名取得のテスト用に「顧客情報1.xlsx」「顧客情報2.xlsx」「顧客情報3.xlsx」「売上情報1.xlsx」「売上情報2.xlsx」「売上情報3.xlsx」の6つのエクセルファイルを新規に作成しています。
◆18~20行目のでは、エクセルファイルを取得しています。fnames0という名前の「リスト」を作って、その中に順番に取得したファイル名を格納しています。
◆23~26行目のでは、取得したファイル名のリストfnames1から、1つ1つファイル名のテキストを取り出して、拡張子の部分の末尾5文字を削除して、新たにfnames1という名前の「リスト」を作って、その中に順番に格納しています。
◆28行目の「print(fnames0)」は、拡張子を削除する前のファイル名を表示しています。
◆29行目の「print(fnames1)」は、拡張子を削除する後の名称を表示しています。
複数のファイルを一度に処理する。
複数のファイルを一度に処理してみます。
仕事では複数のファイルを一度に処理する必要があります。ここでは取得した複数のエクセルファイルを一度に処理する方法を説明します。次のコードを入力して実行してみましょう。
import openpyxl as xls
import glob
book = xls.Workbook()
book.save("顧客情報1.xlsx")
book = xls.Workbook()
book.save("顧客情報2.xlsx")
book = xls.Workbook()
book.save("顧客情報3.xlsx")
book = xls.Workbook()
book.save("売上情報1.xlsx")
book = xls.Workbook()
book.save("売上情報2.xlsx")
book = xls.Workbook()
book.save("売上情報3.xlsx")
#エクセルのファイル名を取得(拡張子がxlsxのファイル名を取得)
fnames0 = []
for name in glob.glob("*.xlsx"):
fnames0.append(name)
#関数を定義する
def mainSyori(str_filename):
book = xls.load_workbook(str_filename)
sheet = book.active
sheet.cell(row=3,column=2).value = "かきくけこ"
book.save(str_filename)
book.close
#メインループ
for str_filename in fnames0:
mainSyori(str_filename)
プログラムを実行すると、「顧客情報1.xlsx」「顧客情報2.xlsx」「顧客情報3.xlsx」「売上情報1.xlsx」「売上情報2.xlsx」「売上情報3.xlsx」の6つのエクセルファイルが作成されて、エクセルファイルを開いてみるとB3セルに ”かきくけこ” が記入されています。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「import glob」は、ライブラリをインポートしてファイル名やフォルダ名を取得できるようにしています。ファイル名を取得するには「glob」を使用します。
◆4~15行目では、ファイル名取得のテスト用に「顧客情報1.xlsx」「顧客情報2.xlsx」「顧客情報3.xlsx」「売上情報1.xlsx」「売上情報2.xlsx」「売上情報3.xlsx」の6つのエクセルファイルを新規に作成しています。
◆18~20行目のでは、エクセルファイルを取得しています。fnames0という名前の「リスト」を作って、その中に順番に取得したファイル名を格納しています。
◆23~28行目のでは、関数を定義してエクセルファイルに行う処理内容を記載しています。ファイル名を関数の引数として渡して、そのファイルを開いた後に3行目の2列目のセル(B3セル)に文字列の”かきくけこ”を記入して、最後にファイルをクローズしています。
◆31~22行目がメインプログラムになります。fnames0のファイル名を一つ一つ取り出して、関数を呼び出して全部のファイルに処理を実施しています。
openpyxlでエクセルのセル操作
セルに値を書込するときは、シートとセルを指定して書込を行います。セルの指定方法は、セル名称で指定する方法と、行番号と列番号を指定する方法、があります。
セルに値を書込・読込する方法、セル名を取得する方法です。
セルに値を書き込む
セルの指定方法は次の2つがある。
・セル名称で指定する方法
・行番号と列番号で指定する方法
次のコードを実行してみましょう。
import openpyxl as xls
book = xls.Workbook()
sheet = book.active
sheet["B2"] = "パソコン"
sheet.cell(row=3,column=2).value = "自動車"
book.save("テスト13実行結果.xlsx")
プログラムを実行すると「テスト13実行結果.xlsx」というエクセルファイルが新たに作成されて、ファイルを確認してみるとB2とB3セルに値が書き込まれています。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.Workbook()」は「book」という名前で、エクセルの新規ブックを作成しています。
◆3行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆4行目の「sheet[“B2”] = “パソコン”」は、シートを「sheet」、セルを「B2」に指定して、値=「パソコン」を書き込みしています。セルを指定するときはダブルクォーテーションを忘れないようにしましょう。
◆5行目の「sheet.cell(row=3,column=2).value = “自動車”」は、シートを「sheet」、セルの行番号=3、列番号=2を指定して、値=「自動車」を書き込みしています。列番号はA列を1として指定します。4行目とは別の方法で書き込みしています。
◆6行目の「book.save(“テスト13実行結果.xlsx”)」は、作成したエクセルブックを「テスト13実行結果.xlsx」という名前で保存しています。
セルの値を読み込む
セルの値を読込するときは、シートとセルを指定して書込を行います。セルの指定方法は、セル名称で指定する方法と、行番号と列番号を指定する方法、があります。
セルの指定方法は次の2つがある。
・セル名称で指定する方法
・行番号と列番号で指定する方法
次のコードを実行してみましょう。エクセルファイルは、先述の書き込みで作成したファイルを使用します。
import openpyxl as xls
book = xls.load_workbook("テスト13実行結果.xlsx")
sheet = book.active
print(sheet["B2"].value)
print(sheet.cell(row=3,column=2).value)
パソコン
自動車
プログラムを実行すると「テスト13実行結果.xlsx」というエクセルファイルを読み込みして、B2とB3セルの値をターミナルに表示します。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.load_workbook(“テスト13実行結果.xlsx”)」は、「テスト13実行結果.xlsx」という名前のエクセルファイルを読み込んでいます。
◆3行目の「sheet = book.worksheets[0]」は、これから操作するシートを指定しています。具体的には先頭のシートを指定しています。番号はシートを左から数えて何番目かを指定し、最も左の番号は「0」になります。
◆4行目の「print(sheet[“B2”].value)」は、シートを「sheet」、セルを「B2」に指定して、読み込んだ値をターミナルに表示しています。セルを指定するときはダブルクォーテーションを忘れないようにしましょう。
◆5行目の「print(sheet.cell(row=3,column=2).value)」は、シートを「sheet」、セルの行番号=3、列番号=2を指定して、値をターミナルに表示しています。列番号はA列を1として指定します。4行目とは別の方法で読み込みしています。
行番号と列番号からセル名を取得する coordinate
行番号と列番号を指定する事で、エクセルの「セル名」を取得する事ができます。セル名とは”A3”や”F5”といった、エクセル内のセルを指定する時に使用する名称です。絶対アドレスのセル名を取得する方法も記載します。次のコードを実行してみましょう。
import openpyxl as xls
from openpyxl.utils import absolute_coordinate
book = xls.Workbook()
sheet = book.active
print(sheet.cell(row=4,column=3).coordinate)
print(absolute_coordinate(sheet.cell(row=4,column=3).coordinate))
C4
$C$4
プログラムを実行すると「C4」「$C$4」がターミナルに表示します。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「from openpyxl.utils import absolute_coordinate」は、ライブラリをインポートしてabusolute_coordinateを使用できるようにしています。絶対アドレスのセル名称を取得したい場合に使用します。
◆3行目の「book = xls.Workbook()」は「book」という名前で、エクセルの新規ブックを作成しています。
◆4行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆5行目の「print(sheet.cell(row=4,column=3).coordinate)」は、シートを「sheet」、行番号=4、列番号=3を指定して、取得したセル名をターミナルに表示しています。
◆6行目の「print(absolute_coordinate(sheet.cell(row=4,column=3).coordinate))」は、シートを「sheet」、行番号=4、列番号=3を指定して、取得したセル名を、絶対アドレスのセル名に変換して、ターミナルに表示しています。
セルに罫線・対角線を引く border
セルに罫線や対角線を引くことが出来ます。
openpyxlを使用する事でセルに罫線や対角線を引く事ができます。セルの罫線は、位置、太さ、色をする事ができます。次のコードを実行してみましょう。
import openpyxl as xls
from openpyxl.styles.borders import Border,Side
book = xls.Workbook()
sheet = book.active
sheet.row_dimensions[2].height = 50
sheet.row_dimensions[5].height = 50
sheet.cell(row=2,column=2).border = Border(
top = Side(style='hair',color='FF0000'),
right = Side(style='thin',color='FF0000'),
bottom = Side(style='medium',color='FF0000'),
left = Side(style='thick',color='FF0000'),
)
sheet.cell(row=5,column=3).border = Border(
top = Side(style='double',color='0000FF'),
right = Side(style='dotted',color='0000FF'),
bottom = Side(style='dashed',color='0000FF'),
left = Side(style='dashDot',color='0000FF'),
)
sheet.cell(row=2,column=4).border = Border(
top = Side(style='dashDotDot',color='000000'),
right = Side(style='mediumDashed',color='000000'),
bottom = Side(style='mediumDashDot',color='000000'),
left = Side(style='mediumDashDotDot',color='000000'),
)
sheet.cell(row=5,column=5).border = Border(
top = Side(style='slantDashDot',color='FF0000'),
diagonal = Side(style='thin',color='00FF00'),
diagonalUp = True,
diagonalDown = True,
)
book.save("テスト14実行結果.xlsx")
プログラムを実行すると「テスト14実行結果.xlsx」というエクセルファイルが新たに作成されて、ファイルを確認してみるとB2,C5,D2,E5セルに罫線や対角線が引かれてています。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「from openpyxl.styles.borders import Border,Side」は、ライブラリをインポートして罫線を引く命令を使用できるようにしています。
◆3行目の「book = xls.Workbook()」は「book」という名前で、エクセルの新規ブックを作成しています。
◆4行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆5,6行目は、実行結果を分かりやすくするために、エクセルの行の高さを変更しています。
◆7~30行目でセルに罫線を引いています。罫線を引く場合は、セルの指定、場所の指定、線種の指定、色の指定、を行います。対角線を引く事も可能で27~29行目で対角線を引いています。
◆31行目の「book.save(“テスト14実行結果.xlsx”)」は、作成したエクセルブックを「テスト14実行結果.xlsx」という名前で保存しています。
罫線の場所は4種類が指定出来て、top(上)、right(右)、bottom(下)、left(左)で指定します。
場所の指定 | 説明 |
---|---|
‘top’ | セルの上 |
‘right’ | セルの右 |
‘bottom’ | セルの下 |
‘left’ | セルの左 |
‘diagonalUp’ = True | 右上がりの対角線 diagonal とペアで使用する |
‘diagonalDown’ = True | 右下がりの対角線 diagonal とペアで使用する |
線種は全部で13種類が指定できて、下表に一覧を記載します。
線種の指定 | 説明 | 線種の指定 | 説明 |
---|---|---|---|
‘none’ | なし | ‘mediumDashDotDot’ | 中線の二点鎖線 |
‘hair’ | 極細線 | ‘slantDashDot’ | 斜めに切れ目の入った一点鎖線 |
‘dotted’ | 点線 | ‘mediumDashDot’ | 中線の一点鎖線 |
‘dashDotDot’ | 二点鎖線 | ‘mediumDashed’ | 中線の破線 |
‘dashDot’ | 一点鎖線 | ‘medium’ | 中線 |
‘dashed’ | 破線 | ‘thick’ | 太線 |
‘thin’ | 細線 | ‘double’ | 二重線 |
色の指定はRGBの16進数で指定します。下表に最も基本的な色を記載します。
色指定 | 説明 | 色指定 | 説明 | 色指定 | 説明 |
---|---|---|---|---|---|
FF0000 | 赤 | 00FF00 | 緑 | 0000FF | 青 |
セルにパターン塗りつぶしを設定する PatternFill
セルにパターン塗りつぶしを設定できます。
openpyxlを使用する事でセルにパターン塗りつぶしを設定する事ができます。次のコードを実行してみましょう。
import openpyxl as xls
from openpyxl.styles import PatternFill
book = xls.Workbook()
sheet = book.active
sheet.column_dimensions["A"].width = 14
sheet.column_dimensions["D"].width = 14
for i in range(1,19):
sheet.row_dimensions[i].height = 25
sheet.cell(row=1,column=1).value = 'solid'
sheet.cell(row=2,column=1).value = 'darkDown'
sheet.cell(row=3,column=1).value = 'darkGray'
sheet.cell(row=4,column=1).value = 'darkGrid'
sheet.cell(row=5,column=1).value = 'darkHorizontal'
sheet.cell(row=6,column=1).value = 'darkTrellis'
sheet.cell(row=7,column=1).value = 'darkUp'
sheet.cell(row=8,column=1).value = 'darkVertical'
sheet.cell(row=9,column=1).value = 'gray0625'
sheet.cell(row=1,column=4).value = 'gray125'
sheet.cell(row=2,column=4).value = 'lightDown'
sheet.cell(row=3,column=4).value = 'lightGray'
sheet.cell(row=4,column=4).value = 'lightGrid'
sheet.cell(row=5,column=4).value = 'lightHorizontal'
sheet.cell(row=6,column=4).value = 'lightTrellis'
sheet.cell(row=7,column=4).value = 'lightUp'
sheet.cell(row=8,column=4).value = 'lightVertical'
sheet.cell(row=9,column=4).value = 'mediumGray'
sheet.cell(row=1,column=2).fill = PatternFill(fill_type='solid',fgColor='FF9955',bgColor='2255FF')
sheet.cell(row=2,column=2).fill = PatternFill(fill_type='darkDown',fgColor='FF9955',bgColor='2255FF')
sheet.cell(row=3,column=2).fill = PatternFill(fill_type='darkGray',fgColor='FF9955',bgColor='2255FF')
sheet.cell(row=4,column=2).fill = PatternFill(fill_type='darkGrid',fgColor='FF9955',bgColor='2255FF')
sheet.cell(row=5,column=2).fill = PatternFill(fill_type='darkHorizontal',fgColor='FF9955',bgColor='2255FF')
sheet.cell(row=6,column=2).fill = PatternFill(fill_type='darkTrellis',fgColor='FF9955',bgColor='2255FF')
sheet.cell(row=7,column=2).fill = PatternFill(fill_type='darkUp',fgColor='FF9955',bgColor='2255FF')
sheet.cell(row=8,column=2).fill = PatternFill(fill_type='darkVertical',fgColor='FF9955',bgColor='2255FF')
sheet.cell(row=9,column=2).fill = PatternFill(fill_type='gray0625',fgColor='FF9955',bgColor='2255FF')
sheet.cell(row=1,column=5).fill = PatternFill(fill_type='gray125',fgColor='FF9955',bgColor='2255FF')
sheet.cell(row=2,column=5).fill = PatternFill(fill_type='lightDown',fgColor='FF9955',bgColor='2255FF')
sheet.cell(row=3,column=5).fill = PatternFill(fill_type='lightGray',fgColor='FF9955',bgColor='2255FF')
sheet.cell(row=4,column=5).fill = PatternFill(fill_type='lightGrid',fgColor='FF9955',bgColor='2255FF')
sheet.cell(row=5,column=5).fill = PatternFill(fill_type='lightHorizontal',fgColor='FF9955',bgColor='2255FF')
sheet.cell(row=6,column=5).fill = PatternFill(fill_type='lightTrellis',fgColor='FF9955',bgColor='2255FF')
sheet.cell(row=7,column=5).fill = PatternFill(fill_type='lightUp',fgColor='FF9955',bgColor='2255FF')
sheet.cell(row=8,column=5).fill = PatternFill(fill_type='lightVertical',fgColor='FF9955',bgColor='2255FF')
sheet.cell(row=9,column=5).fill = PatternFill(fill_type='mediumGray',fgColor='FF9955',bgColor='2255FF')
book.save("テスト15実行結果.xlsx")
プログラムを実行すると「テスト15実行結果.xlsx」というエクセルファイルが新たに作成されて、ファイルを確認してみるとセルに着色やパターンが設定されています。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「from openpyxl.styles import PatternFill」は、ライブラリをインポートしてパターン塗りつぶし機能を使用できるようにしています。
◆3行目の「book = xls.Workbook()」は「book」という名前で、エクセルの新規ブックを作成しています。
◆4行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆5,6行目は、実行結果を分かりやすくするために、エクセルの列の幅を変更しています。
◆7,8行目は、実行結果を分かりやすくするために、エクセルの行の高さを変更しています。
◆10~27行目は、実行結果を分かりやすくするために、パターン名称をエクセルに記述しています。
◆29~46行目で、セルの着色やパターンの設定を実行しています。パターンタイプ、fgcolorで前景色、bgcolorで背景色を指定しています。
◆48行目の「book.save(“テスト15実行結果.xlsx”)」は、作成したエクセルブックを「テスト15実行結果.xlsx」という名前で保存しています。
パターンタイプは全部で18種類の指定が可能です。
パターンタイプ | 説明 | パターンタイプ | 説明 |
---|---|---|---|
‘solid’ | 塗りつぶし | ‘gray125’ | 12.5%灰色 |
‘darkDown’ | 右下がり斜線 縞 | ‘lightDown’ | 実線 右下がり斜線 縞 |
‘darkGray’ | 75%灰色 | ‘lightGray’ | 25%灰色 |
‘darkGrid’ | 右下がり斜線 格子 | ‘lightGrid’ | 実線 横 格子 |
‘darkHorizontal’ | 横縞 | ‘lightHorizontal’ | 実線 横 縞 |
‘darkTrellis’ | 極太線 左下がり斜線 格子 | ‘lightTrellis’ | 実線 左下がり斜線 格子 |
‘darkUp’ | 左下がり斜線 縞 | ‘lightUp’ | 実線 左下がり斜線 縞 |
‘darkVertical’ | 縦縞 | ‘lightVertical’ | 実線 縦 縞 |
‘gray0625’ | 6.25%灰色 | ‘mediumGray’ | 50%灰色 |
色の指定はRGBの16進数で指定します。下表に最も基本的な色を記載します。
色指定 | 説明 | 色指定 | 説明 | 色指定 | 説明 |
---|---|---|---|---|---|
FF0000 | 赤 | 00FF00 | 緑 | 0000FF | 青 |
セル内の配置位置を調整する Alignment
セル内での配置位置を調整する事ができます。
水平位置 horizontal
openpyxlを使用する事でセル内での水平位置の調整ができます。次のコードを実行してみましょう。
import openpyxl as xls
book = xls.Workbook()
sheet = book.active
for i in range(1,10):
sheet.row_dimensions[i].height = 25
rows = ["A","B","C","D","E","F","G","H","I"]
for row_str in rows:
sheet.column_dimensions[row_str].width = 14
sheet['A1'].value = "標準"
sheet['B1'].value = "左詰め"
sheet['C1'].value = "中央揃え"
sheet['D1'].value = "右詰め"
sheet['E1'].value = "繰り返し"
sheet['F1'].value = "両端揃え"
sheet['G1'].value = "選択範囲内で中央"
sheet['I1'].value = "均等割り付け"
for i in range(1,10):
sheet.cell(row=2,column=i).value = "横位置"
sheet['H2'].value = None
sheet['A2'].alignment = xls.styles.Alignment(horizontal='general')
sheet['B2'].alignment = xls.styles.Alignment(horizontal='left')
sheet['C2'].alignment = xls.styles.Alignment(horizontal='center')
sheet['D2'].alignment = xls.styles.Alignment(horizontal='right')
sheet['E2'].alignment = xls.styles.Alignment(horizontal='fill')
sheet['F2'].alignment = xls.styles.Alignment(horizontal='justify')
sheet['G2'].alignment = xls.styles.Alignment(horizontal='centerContinuous')
sheet['H2'].alignment = xls.styles.Alignment(horizontal='centerContinuous')
sheet['I2'].alignment = xls.styles.Alignment(horizontal='distributed')
book.save("テスト16実行結果.xlsx")
プログラムを実行すると「テスト16実行結果.xlsx」というエクセルファイルが新たに作成されて、ファイルを確認してみるとセル内の位置が調整されています。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.Workbook()」は「book」という名前で、エクセルの新規ブックを作成しています。
◆3行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆5~9行目は、実行結果を分かりやすくするために、エクセルの列の幅と行の高さを変更しています。
◆11~18行目は、実行結果を分かりやすくするために、調整の名称を記載しています。
◆20~22行目は、各調整結果を確認するために「横位置」という文字を各セルに記入しています。
◆24~32行目は、位置の調整を実施しています。
◆34行目の「book.save(“テスト16実行結果.xlsx”)」は、作成したエクセルブックを「テスト16実行結果.xlsx」という名前で保存しています。
水平位置の調整には、次の8種類を指定する事が出来ます。
水平位置の種類 | 説明 |
---|---|
‘general’ | 標準 |
‘left’ | 左詰め |
‘center’ | 中央揃え |
‘right’ | 右詰め |
‘fill’ | 繰り返し |
‘justify’ | 両端揃え |
‘centerContinuous’ | 選択範囲内で中央 |
‘distributed’ | 均等割り付け |
垂直位置 vertical
openpyxlを使用する事でセル内での垂直位置の調整ができます。次のコードを実行してみましょう。
import openpyxl as xls
book = xls.Workbook()
sheet = book.active
for i in range(1,4):
sheet.row_dimensions[i].height = 80
rows = ["A","B","C","D","E"]
for row_str in rows:
sheet.column_dimensions[row_str].width = 14
sheet['A1'].value = "上詰め"
sheet['B1'].value = "中央揃え"
sheet['C1'].value = "下詰め"
sheet['D1'].value = "両端揃え"
sheet['E1'].value = "均等割り付け"
for i in range(1,4):
sheet.cell(row=2,column=i).value = "縦位置"
sheet.cell(row=2,column=4).value = "あいうえおかきくけこさしすせそたちつてと"
sheet.cell(row=2,column=5).value = "あいうえお\nかきくけこ\nさしすせそ\nたちつてと"
sheet['A2'].alignment = xls.styles.Alignment(vertical='top')
sheet['B2'].alignment = xls.styles.Alignment(vertical='center')
sheet['C2'].alignment = xls.styles.Alignment(vertical='bottom')
sheet['D2'].alignment = xls.styles.Alignment(vertical='justify')
sheet['E2'].alignment = xls.styles.Alignment(vertical='distributed')
book.save("テスト17実行結果.xlsx")
プログラムを実行すると「テスト17実行結果.xlsx」というエクセルファイルが新たに作成されて、ファイルを確認してみるとセル内の位置が調整されています。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.Workbook()」は「book」という名前で、エクセルの新規ブックを作成しています。
◆3行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆5~9行目は、実行結果を分かりやすくするために、エクセルの列の幅と行の高さを変更しています。
◆11~15行目は、実行結果を分かりやすくするために、調整の名称を記載しています。
◆17~20行目は、各調整結果を確認するために文字を各セルに記入しています。
◆22~26行目は、位置の調整を実施しています。
◆34行目の「book.save(“テスト17実行結果.xlsx”)」は、作成したエクセルブックを「テスト17実行結果.xlsx」という名前で保存しています。
水平位置の調整には、次の5種類を指定する事が出来ます。
水平位置の種類 | 説明 |
---|---|
‘top’ | 上詰め |
‘center’ | 中央揃え |
‘bottom’ | 下詰め |
‘justify’ | 両端揃え |
‘distributed’ | 均等割り付け |
openpyxlでエクセルの列操作
エクセルの「列」を、いろいろ操作する方法です。
delete_cols(*) エクセルの列を削除する
openpyxlでエクセルの列を削除する事が出来ます。列の削除はdelete_colsで行います。
図のようにあいうえお、かきくけこ、・・・が記述されている「テスト01.xlsx」というエクセルファイルのB列を削除してみます。
次のコードを実行してみましょう。
import openpyxl as xls
book = xls.load_workbook("テスト01.xlsx",data_only=True)
sheet = book.active
sheet.delete_cols(2)
book.save("テスト03実行結果.xlsx")
プログラムを実行すると「テスト03実行結果.xlsx」というエクセルファイルが新たに作成されて、ファイルを確認してみるとB列が削除されています(正確にはB列が削除され、元のC列以降が左に詰められています)。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.load_workbook(“テスト01.xlsx”,data_only=True)」は、「テスト01.xlsx」という名前のエクセルファイルを読み込んでいます。
◆3行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆4行目の「sheet.delete_cols(2)」でエクセルの列を削除しています。カッコ( )の中に削除したい列を指定する事で列を削除します。エクセルでは列の名前がA,B,C,・・・というようにアルファベットの名前が付けられていますが、openpyxlで列を指定する場合は一番左のA列を1として、数字で指定します。B列は2番目になるのでカッコ( )の中に2を指定しています。
◆5行目の「book.save(“テスト03実行結果.xlsx”)」は、作成したエクセルブックを「テスト03実行結果.xlsx」という名前で保存しています。
delete_cols(*,*) エクセルの列をまとめて削除する
openpyxlでエクセルの列をまとめて削除する事が出来ます。 まとめて列を削除する場合でもdelete_colsで行います。
図のようにあいうえお、かきくけこ、・・・が記述されている「テスト01.xlsx」というエクセルファイルのB列~D列の幅をまとめて削除してみます。
次のコードを実行してみましょう。
import openpyxl as xls
book = xls.load_workbook("テスト01.xlsx",data_only=True)
sheet = book.active
sheet.delete_cols(2,3)
book.save("テスト04実行結果.xlsx")
プログラムを実行すると「テスト04実行結果.xlsx」というエクセルファイルが新たに作成されて、ファイルを確認してみるとB~D列が削除されています(正確にはB列~D列が削除され、元のE列以降が左に詰められています)。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.load_workbook(“テスト01.xlsx”,data_only=True)」は、「テスト01.xlsx」という名前のエクセルファイルを読み込んでいます。
◆3行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆4行目の「sheet.delete_cols(2,3)」でエクセルの列を削除しています。カッコ( )の中に削除したい列の開始列と何列分削除するかを指定する事で列をまとめて削除します。エクセルでは列の名前がA,B,C,・・・というようにアルファベットの名前が付けられていますが、openpyxlで列を指定する場合は一番左のA列を1として、数字で指定します。B列は2番目になるのでカッコ( )の中に2を指定しています。3列分削除するので続けて3を指定しています。
◆5行目の「book.save(“テスト04実行結果.xlsx”)」は、作成したエクセルブックを「テスト04実行結果.xlsx」という名前で保存しています。
insert_cols(*) エクセルの列を挿入する
openpyxlでエクセルの列を挿入する事が出来ます。列の挿入はinsert_colsで行います。
図のようにあいうえお、かきくけこ、・・・が記述されている「テスト01.xlsx」というエクセルファイルのC列の場所に列を挿入してみます。
次のコードを実行してみましょう。
import openpyxl as xls
book = xls.load_workbook("テスト01.xlsx",data_only=True)
sheet = book.active
sheet.insert_cols(3)
book.save("テスト05実行結果.xlsx")
プログラムを実行すると「テスト05実行結果.xlsx」というエクセルファイルが新たに作成されて、ファイルを確認してみるとC列の場所に列が挿入されています。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.load_workbook(“テスト01.xlsx”,data_only=True)」は、「テスト01.xlsx」という名前のエクセルファイルを読み込んでいます。
◆3行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆4行目の「sheet.insert_cols(3)」でエクセルの列を挿入しています。カッコ( )の中に挿入したい列の場所を指定する事で列を挿入します。エクセルでは列の名前がA,B,C,・・・というようにアルファベットの名前が付けられていますが、openpyxlで列を指定する場合は一番左のA列を1として、数字で指定します。C列は3番目になるのでカッコ( )の中に3を指定しています。
◆5行目の「book.save(“テスト05実行結果.xlsx”)」は、作成したエクセルブックを「テスト05実行結果.xlsx」という名前で保存しています。
insert_cols(*,*) エクセルの列をまとめて挿入する
openpyxlでエクセルの列をまとめて挿入する事が出来ます。 まとめて列を挿入する場合でもinsert_colsで行います。
図のようにあいうえお、かきくけこ、・・・が記述されている「テスト01.xlsx」というエクセルファイルのC列の場所に列を2列分まとめて挿入してみます。
次のコードを実行してみましょう。
import openpyxl as xls
book = xls.load_workbook("テスト01.xlsx",data_only=True)
sheet = book.active
sheet.insert_cols(3,2)
book.save("テスト06実行結果.xlsx")
プログラムを実行すると「テスト06実行結果.xlsx」というエクセルファイルが新たに作成されて、ファイルを確認してみるとC列の場所に列が2列分挿入されています。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.load_workbook(“テスト01.xlsx”,data_only=True)」は、「テスト01.xlsx」という名前のエクセルファイルを読み込んでいます。
◆3行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆4行目の「sheet.insert_cols(3,2)」でエクセルの列を挿入しています。カッコ( )の中に挿入場所と挿入列数を指定する事で列を挿入します。エクセルでは列の名前がA,B,C,・・・というようにアルファベットの名前が付けられていますが、openpyxlで列を指定する場合は一番左のA列を1として、数字で指定します。C列は3番目になるのでカッコ( )の中に3を指定しています。2列分挿入していので、続けて2を指定します。
◆5行目の「book.save(“テスト06実行結果.xlsx”)」は、作成したエクセルブックを「テスト06実行結果.xlsx」という名前で保存しています。
エクセルの列の幅を変更する column_dimensions[‘*’].width
openpyxlを使ってエクセルの列の幅を変更する事ができます。列の幅を変更は基本的に1列ずつ変更するコードを記述する必要がありますが、プログラムを工夫する事により簡単に複数列の幅を変更する事が出来ます。まずは1列ずつ変更する方法を説明します。column_dimensionsで列の幅を変更します。
図のようにあいうえお、かきくけこ、・・・が記述されている「テスト01.xlsx」というエクセルファイルのB列とC列の幅を変更してみます。
次のコードを実行してみましょう。
import openpyxl as xls
book = xls.load_workbook("テスト01.xlsx",data_only=True)
sheet = book.active
sheet.column_dimensions['B'].width = 20
sheet.column_dimensions['C'].width = 12
book.save("テスト01実行結果.xlsx")
プログラムを実行すると「テスト01実行結果.xlsx」というエクセルファイルが新たに作成されて、ファイルを確認してみるとB列とC列の幅が変更されています。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.load_workbook(“テスト01.xlsx”,data_only=True)」は、「テスト01.xlsx」という名前のエクセルファイルを読み込んでいます。後半のdata_only=Trueは読み込み時のオプション指定で、エクセルではセルに計算式が設定されている事があり、この指定が無い場合は計算式をセルの値として読み込みますが、この指定をする事により計算式の結果を読み込む事が出来ます。今回のサンプルプログラムには関係しませんが、参考として記述しました。
◆3行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆4行目の「sheet.column_dimensions[‘B’].width = 20」と5行目の「sheet.column_dimensions[‘C’].width = 12」で列の幅を変更しています。この場合はB列の幅を20に変更、C列の幅を12に変更しています。
◆6行目の「book.save(“テスト01実行結果.xlsx”)」は、作成したエクセルブックを「テスト01実行結果.xlsx」という名前で保存しています。
エクセルの列の幅をまとめて変更する
openpyxlでは列の幅をまとめて変更する命令はありませんが簡単なプログラムを記述することで、エクセルの列の幅をまとめて変更することが出来ます。まとめて変更する時はcolumn_dimensionsを繰り返し実行します。
図のようにあいうえお、かきくけこ、・・・が記述されている「テスト01.xlsx」というエクセルファイルのA列~E列の幅をまとめて変更してみます。
次のコードを実行してみましょう。
import openpyxl as xls
book = xls.load_workbook("テスト01.xlsx")
sheet = book.active
rows = ["A","B","C","D","E"]
for row_str in rows:
sheet.column_dimensions[row_str].width = 4
book.save("テスト02実行結果.xlsx")
プログラムを実行すると「テスト02実行結果.xlsx」というエクセルファイルが新たに作成されて、ファイルを確認してみるとA列~E列の幅が変更されています。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.load_workbook(“テスト01.xlsx”,data_only=True)」は、「テスト01.xlsx」という名前のエクセルファイルを読み込んでいます。
◆3行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆4行目からが、まとめて列の幅を変更する方法になります。「rows = [“A”,”B”,”C”,”D”,”E”]」の部分で変更したい列をリストとして定義しています。
◆5行目と6行目の「for row_str in rows: sheet.column_dimensions[row_str].width = 4」の部分は、繰り返しの構文であるfor文を使用して、4行目で定義した列の名前を1つずつ取り出して、列の幅の変更を繰り返し実行しています。
◆7行目の「book.save(“テスト02実行結果.xlsx”)」は、作成したエクセルブックを「テスト02実行結果.xlsx」という名前で保存しています。
openpyxlでエクセルの行操作
エクセルの「行」を、いろいろ操作する方法です。
delete_rows(*) エクセルの行を削除する
openpyxlでエクセルの行を削除する事が出来ます。行の削除はdelete_rowsで行います。
図のようにあいうえお、かきくけこ、・・・が記述されている「テスト01.xlsx」というエクセルファイルの2行目を削除してみます。
次のコードを実行してみましょう。
import openpyxl as xls
book = xls.load_workbook("テスト01.xlsx",data_only=True)
sheet = book.active
sheet.delete_rows(2)
book.save("テスト07実行結果.xlsx")
プログラムを実行すると「テスト07実行結果.xlsx」というエクセルファイルが新たに作成されて、ファイルを確認してみると2行目が削除されています。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.load_workbook(“テスト01.xlsx”,data_only=True)」は、「テスト01.xlsx」という名前のエクセルファイルを読み込んでいます。
◆3行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆4行目の「sheet.delete_rows(2)」でエクセルの2行目を削除しています。カッコ( )の中に削除する行を指定する事で行を削除します。
◆5行目の「book.save(“テスト07実行結果.xlsx”)」は、作成したエクセルブックを「テスト07実行結果.xlsx」という名前で保存しています。
delete_rows(*,*) エクセルの行をまとめて削除する
openpyxlでエクセルの行をまとめて削除する事が出来ます。行をまとめて削除する場合もdelete_rowsで行います。
図のようにあいうえお、かきくけこ、・・・が記述されている「テスト01.xlsx」というエクセルファイルの2行目と3行目をまとめて削除してみます。
次のコードを実行してみましょう。
import openpyxl as xls
book = xls.load_workbook("テスト01.xlsx",data_only=True)
sheet = book.active
sheet.delete_rows(2,2)
book.save("テスト08実行結果.xlsx")
プログラムを実行すると「テスト08実行結果.xlsx」というエクセルファイルが新たに作成されて、ファイルを確認してみると2行目と3行目が削除されています。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.load_workbook(“テスト01.xlsx”,data_only=True)」は、「テスト01.xlsx」という名前のエクセルファイルを読み込んでいます。
◆3行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆4行目の「sheet.delete_rows(2,2)」でエクセルの2行目と3行目を削除しています。カッコ( )の中に削除開始行と削除行数を指定する事で行をまとめて削除します。
◆5行目の「book.save(“テスト08実行結果.xlsx”)」は、作成したエクセルブックを「テスト08実行結果.xlsx」という名前で保存しています。
insert_rows(*) エクセルの行を挿入する
openpyxlでエクセルの行を挿入する事が出来ます。行の挿入はinsert_rowsで行います。
図のようにあいうえお、かきくけこ、・・・が記述されている「テスト01.xlsx」というエクセルファイルの3行目に行を挿入してみます。
次のコードを実行してみましょう。
import openpyxl as xls
book = xls.load_workbook("テスト01.xlsx",data_only=True)
sheet = book.active
sheet.insert_rows(3)
book.save("テスト09実行結果.xlsx")
プログラムを実行すると「テスト09実行結果.xlsx」というエクセルファイルが新たに作成されて、ファイルを確認してみると3行目に行が挿入されています。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.load_workbook(“テスト01.xlsx”,data_only=True)」は、「テスト01.xlsx」という名前のエクセルファイルを読み込んでいます。
◆3行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆4行目の「sheet.insert_rows(3)」でエクセルの2行目に行を挿入しています。カッコ( )の中に挿入する場所を指定する事で行を挿入します。
◆5行目の「book.save(“テスト09実行結果.xlsx”)」は、作成したエクセルブックを「テスト09実行結果.xlsx」という名前で保存しています。
insert_rows(*,*) エクセルの行をまとめて挿入する
openpyxlでエクセルの行をまとめて挿入する事が出来ます。まとめて行を挿入する場合もinsert_rowsで行います。
図のようにあいうえお、かきくけこ、・・・が記述されている「テスト01.xlsx」というエクセルファイルの4行目から行を2行挿入してみます。
次のコードを実行してみましょう。
import openpyxl as xls
book = xls.load_workbook("テスト01.xlsx",data_only=True)
sheet = book.active
sheet.insert_rows(4,2)
book.save("テスト10実行結果.xlsx")
プログラムを実行すると「テスト10実行結果.xlsx」というエクセルファイルが新たに作成されて、ファイルを確認してみると4行目から行が2行挿入されています。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.load_workbook(“テスト01.xlsx”,data_only=True)」は、「テスト01.xlsx」という名前のエクセルファイルを読み込んでいます。
◆3行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆4行目の「sheet.insert_rows(4,2)」でエクセルの4行目から行を2行挿入しています。カッコ( )の中に挿入開始行と挿入行数を指定する事でまとめて行を挿入します。
◆5行目の「book.save(“テスト10実行結果.xlsx”)」は、作成したエクセルブックを「テスト10実行結果.xlsx」という名前で保存しています。
エクセルの行の高さを変更する row_dimensions[*].height
openpyxlを使ってエクセルの行の高さを変更する事ができます。行の高さを変更は基本的に1行ずつ変更するコードを記述する必要がありますが、プログラムを工夫する事により簡単に複数行の高さを変更する事が出来ます。まずは1行ずつ変更する方法を説明します。row_dimensionsで列の幅を変更します。
図のようにあいうえお、かきくけこ、・・・が記述されている「テスト01.xlsx」というエクセルファイルの4行目の高さを変更してみます。
次のコードを実行してみましょう。
import openpyxl as xls
book = xls.load_workbook("テスト01.xlsx",data_only=True)
sheet = book.active
sheet.row_dimensions[4].height = 50
book.save("テスト11実行結果.xlsx")
プログラムを実行すると「テスト11実行結果.xlsx」というエクセルファイルが新たに作成されて、ファイルを確認してみると4行目の行の高さが変更されています。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.load_workbook(“テスト01.xlsx”,data_only=True)」は、「テスト01.xlsx」という名前のエクセルファイルを読み込んでいます。
◆3行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆4行目の「sheet.row_dimensions[4].height = 50」で行の高さを変更しています。この場合は4行目の高さを50に変更しています。
◆5行目の「book.save(“テスト11実行結果.xlsx”)」は、作成したエクセルブックを「テスト11実行結果.xlsx」という名前で保存しています。
エクセルの行の高さをまとめて変更する
図のようにあいうえお、かきくけこ、・・・が記述されている「テスト01.xlsx」というエクセルファイルの1~5行目の高さをまとめて変更してみます。
次のコードを実行してみましょう。
import openpyxl as xls
book = xls.load_workbook("テスト01.xlsx",data_only=True)
sheet = book.active
for i in range(1,6):
sheet.row_dimensions[i].height = 40
book.save("テスト12実行結果.xlsx")
プログラムを実行すると「テスト12実行結果.xlsx」というエクセルファイルが新たに作成されて、ファイルを確認してみると1~5行目の高さが変更されています。この内容について一つずつ説明していきます。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「book = xls.load_workbook(“テスト01.xlsx”,data_only=True)」は、「テスト01.xlsx」という名前のエクセルファイルを読み込んでいます。
◆3行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆4行目と6行目の「for i in range(1,6): sheet.row_dimensions[i].height = 40」の部分は、繰り返しの構文であるfor文を使用して、行の高さの変更を繰り返し実行しています。
◆5行目の「book.save(“テスト12実行結果.xlsx”)」は、作成したエクセルブックを「テスト12実行結果.xlsx」という名前で保存しています。
openpyxlでセルの結合と解除
セルの結合と解除の方法です。
ファイル中の全てのセルの結合の解除
openpyxlを使うとセルの結合や解除が個別に出来ますが、まずはエクセルファイルの全てのセルの結合を解除する方法を説明します。エクセルファイルを自動で処理する時に邪魔になるのがセルの結合で、セルの結合がファイル中にあると、セルの指定や計算結果が予想外の数値になることがあります。自動で処理したい場合は、セルの結合は、なるべく使用しないようにしましょう。
次のコードを入力して実行してましょう。実行する前には事前に「結合解除前のファイル.xlsx」というエクセルファイルを準備して、幾つかのセルを結合しておいてください。
この説明で準備したエクセルファイルは、ファイル中に2つのシートを用意して、セルを下図のように結合しました。
import openpyxl as xls
import os
class excel_operate:
def __init__(self, excel_dir):
self.excel_dir = excel_dir
self.workbook = xls.load_workbook(self.excel_dir)
self.sheet_number = len(self.workbook.sheetnames)
self.sheet_contains = [self.workbook.worksheets[i] for i in range(self.sheet_number)]
self.merged_cells_list = [self.sheet_contains[i].merged_cells.ranges for i in range(self.sheet_number)]
def get_merged_cells_location(self):
self.merged_cells_location_list = [""]*self.sheet_number
for i in range(self.sheet_number):
self.merged_cells_location_list[i] = [format(self.merged_cells_list[i][j]) for j in range(len(self.merged_cells_list[i]))]
def break_merged_cells(self):
for i in range(self.sheet_number):
for j in range(len(self.merged_cells_list[i])):
self.sheet_contains[i].unmerge_cells(self.merged_cells_location_list[i][j])
path = os.getcwd() + "\\"
Excel = excel_operate(path + "結合解除前のファイル.xlsx")
Excel.get_merged_cells_location()
Excel.break_merged_cells()
Excel.workbook.save("解除済みのファイル.xlsx")
Excel.workbook.close
プログラムを実行すると「解除済みのファイル.xlsx」が作成されて、ファイルの中を確認すると、全てのシートの全てのセルの結合が解除されています。
このファイル全体の結合の解除は、呪文の様なものとして、とりあえずこのサンプルプログラムを実行すれば良いとしてコピペして使用するのが効率的です。
merge_cells(*) セルを結合する
セルの結合方法です。
openpyxlでセルを結合する事ができます。次のコードを入力して実行してみましょう。
import openpyxl as xls
from openpyxl.styles import PatternFill
book = xls.Workbook()
sheet = book.active
sheet["A1"] = "あいうえお"
sheet["C5"] = "かきくけこ"
sheet.cell(row=1,column=1).fill = PatternFill(fill_type='solid',fgColor='F06060')
sheet.cell(row=5,column=3).fill = PatternFill(fill_type='solid',fgColor='60F060')
sheet.merge_cells(start_row=1,start_column=1,end_row=2, end_column=2)
sheet.merge_cells('C5:D6')
book.save("test18実行結果.xlsx")
プログラムを実行すると「test18実行結果.xlsx」が作成されて、ファイルの中を確認すると、次のようにセルが結合されています。セルは結合が分かりやすくするために着色しています。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆2行目の「from openpyxl.styles import PatternFill」は、ライブラリをインポートして、セルに着色が出来るようにしています。
◆4行目の「book = xls.Workbook()」は新規のエクセルブックを作成しています。
◆5行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆6,7行目の「sheet[“A1”] = “あいうえお”」「sheet[“C5”] = “かきくけこ”」は、A1セルとC5セルに、”あいうえお”と、”かきくけこ”という文字列を記入しています。
◆8,9行目は、実行結果を分かりやすくするためにセルに赤色と緑色の着色を行っています。
◆11,12行目でセルを結合しています。結合するセルの指定方法として、行番号および列番号を指定する方法と、セル名称を指定する方法、の2種類を使用しています。
◆14行目の「book.save(“test18実行結果.xlsx”)」は、作成したエクセルブックを「test18実行結果.xlsx」という名前で保存しています。
unmerge_cells(*) セルの結合を解除する
セルの結合を解除する方法です。
openpyxlでセルの結合を解除する事ができます。
次のコードを入力して実行してみましょう。セルの結合を解除するプログラムをテストするには、既にセルが結合されたエクセルファイルが必要です。ここでは1つ前に実行した、セルの結合で作成された「test18実行結果.xlsx」のファイルを事前に準備しておいてください。プログラムを実行する前は図のようにセルが結合されています。
import openpyxl as xls
book = xls.load_workbook("test18実行結果.xlsx")
sheet = book.active
sheet.unmerge_cells(start_row=1,start_column=1,end_row=2, end_column=2)
sheet.unmerge_cells('C5:D6')
book.save("test19実行結果.xlsx")
プログラムを実行すると「test19実行結果.xlsx」が作成されて、ファイルの中を確認すると、次のようにセルの結合が解除されています。
◆1行目の「import openpyxl as xls」は、ライブラリをインポートして「xls」という名称で使用できるようにしています。
◆3行目の「book = xls.load_workbook(“test18実行結果.xlsx”)」は、「test18実行結果.xlsx」という名前のエクセルファイルを読み込んでいます。
◆3行目の「sheet = book.active」は、これから操作しようとしているシートを取得します。具体的にはファイルを開いてすぐに表示されるシート=アクティブなシートを取得しています。
◆5,6行目でセルの結合を解除しています。解除するセルの指定方法として、行番号および列番号を指定する方法と、セル名称を指定する方法、の2種類を使用しています。
◆8行目の「book.save(“test19実行結果.xlsx”)」は、作成したエクセルブックを「test19実行結果.xlsx」という名前で保存しています。