Python-data-persistence-data-persistence-openpyxl-module
データの永続性-Openpyxlモジュール
MicrosoftのExcelは、最も人気のあるスプレッドシートアプリケーションです。 25年以上前から使用されています。 新しいバージョンのExcelは Office Open XML (OOXML)ファイル形式を使用します。 したがって、他のプログラミング環境を介してスプレッドシートファイルにアクセスすることができました。
*OOXML* はECMA標準ファイル形式です。 Pythonの *openpyxl* パッケージは、拡張子が.xlsxのExcelファイルを読み書きする機能を提供します。
openpyxlパッケージは、Microsoft Excelの用語に似たクラス命名法を使用しています。 Excelドキュメントはワークブックと呼ばれ、ファイルシステムに.xlsx拡張子を付けて保存されます。 ワークブックには複数のワークシートがある場合があります。 ワークシートはセルの大きなグリッドを提示し、それらのそれぞれが値または数式のいずれかを保存できます。 グリッドを形成する行と列には番号が付けられています。 列は、アルファベット、A、B、C、…。、Z、AA、ABなどで識別されます。 行には1から番号が付けられます。
典型的なExcelワークシートは次のように表示されます-
pipユーティリティは、openpyxlパッケージをインストールするのに十分です。
pip install openpyxl
Workbookクラスは、1つの空白のワークシートを持つ空のブックを表します。 ワークシートにデータを追加できるように、それをアクティブにする必要があります。
from openpyxl import Workbook
wb=Workbook()
sheet1=wb.active
sheet1.title='StudentList'
ご存知のように、ワークシートのセルはColumnNameRownumber形式として名前が付けられます。 したがって、左上のセルはA1です。 このセルに文字列を割り当てる-
sheet1['A1']= 'Student List'
または、行と列の番号を使用してセルを識別するワークシートの* cell()*メソッドを使用します。 値を割り当てるには、セルオブジェクトに値プロパティを呼び出します。
cell1=sheet1.cell(row=1, column=1)
cell1.value='Student List'
ワークシートにデータを入力した後、ワークブックオブジェクトのsave()メソッドを呼び出してワークブックを保存します。
wb.save('Student.xlsx')
このワークブックファイルは、現在の作業ディレクトリに作成されます。
次のPythonスクリプトは、タプルのリストをワークブックドキュメントに書き込みます。 各タプルには、ロール番号、年齢、学生のマークが格納されます。
from openpyxl import Workbook
wb = Workbook()
sheet1 = wb.active
sheet1.title='Student List'
sheet1.cell(column=1, row=1).value='Student List'
studentlist=[('RollNo','Name', 'age', 'marks'),(1,'Juhi',20,100),
(2,'dilip',20, 110) , (3,'jeevan',24,145)]
for col in range(1,5):
for row in range(1,5):
sheet1.cell(column=col, row=1+row).value=studentlist[row-1][col-1]
wb.save('students.xlsx')
ワークブックstudent.xlsxは、現在の作業ディレクトリに保存されます。 Excelアプリケーションを使用して開くと、以下のように表示されます-
openpyxlモジュールは、ワークブックドキュメントのデータを読み戻すのに役立つ* load_workbook()*関数を提供します。
from openpyxl import load_workbook
wb=load_workbook('students.xlsx')
行番号と列番号で指定された任意のセルの値にアクセスできるようになりました。
cell1=sheet1.cell(row=1, column=1)
print (cell1.value)
Student List
例
次のコードは、ワークシートデータをリストに入力します。
from openpyxl import load_workbook
wb=load_workbook('students.xlsx')
sheet1 = wb['Student List']
studentlist=[]
for row in range(1,5):
stud=[]
for col in range(1,5):
val=sheet1.cell(column=col, row=1+row).value
stud.append(val)
studentlist.append(tuple(stud))
print (studentlist)
出力
[('RollNo', 'Name', 'age', 'marks'), (1, 'Juhi', 20, 100), (2, 'dilip', 20, 110), (3, 'jeevan', 24, 145)]
Excelアプリケーションの非常に重要な機能の1つは式です。 セルに数式を割り当てるには、Excelの数式構文を含む文字列に割り当てます。 年齢のあるc6セルにAVERAGE関数を割り当てます。
sheet1['C6']= 'AVERAGE(C3:C5)'
Openpyxlモジュールには* Translate_formula()*関数があり、範囲全体で数式をコピーします。 次のプログラムは、C6でAVERAGE関数を定義し、マークの平均を計算するC7にコピーします。
from openpyxl import load_workbook
wb=load_workbook('students.xlsx')
sheet1 = wb['Student List']
from openpyxl.formula.translate import Translator#copy formula
sheet1['B6']='Average'
sheet1['C6']='=AVERAGE(C3:C5)'
sheet1['D6'] = Translator('=AVERAGE(C3:C5)', origin="C6").translate_formula("D6")
wb.save('students.xlsx')
変更されたワークシートは次のように表示されます-