openpyxlはExcel 2010 xlsx/xlsm/xltx/xltmファイルを読み書きするためのライブラリです。ここでは、openpyxlを使用したExcelファイルの作成方法を紹介します。openpyxlはExcelファイル(xlsm/xlsx)の新規作成、既存ファイルの読み込み・編集ができます。チャートの作成、セルの書式設定、セルのセルマージ、Excel関数の埋め込み等も可能で、Excelファイルを作成する為の十分な機能を有しています。
openpyxlのインストール
openpyxlはAnacondaを使用していればはインストールされていると思います。インストールされていない場合は、pipかcondaでインストールします。
pipでインストール
pip install openpyxl
condaでインストール
conda install
または
conda install -c conda-forge openpyxl
または
conda install -c anaconda openpyxl
openpyxlでExcelファイルを新規作成
使い方
1. ワークブックの作成
workbook = openpyxl.Workbook()
- ワークブックが作成されるときは、必ずワークシートも1個作成される。ワークシートの名前は “Sheet”となる。
- “Sheet”が邪魔ならば、削除すればよい(方法はソースコード例を参照)
2. ワークシートの作成
worksheet = workbook.create_sheet(title=None, index=None)
- title(オプショナル) : string。デフォルト値 = None。
- シート名。 Noneの場合、シート名は”Sheet1″。(デフォルトで作られる”Sheet”はそのまま残る)。
- index(オプショナル) : int。デフォルト値 = None。
- シート挿入位置。位置は任意位置。数値が小さいほどシート挿入位置が前になる。基本的には0から連番で割り当てて行くとよい。適当な数字を割り当てていくと、意図しない場所にデフォルトの”Sheet”が挿入される為(“Sheet”が挿入位置の規則性はあるが、各自試して確認する方が早い)
- シート挿入位置。位置は任意位置。数値が小さいほどシート挿入位置が前になる。基本的には0から連番で割り当てて行くとよい。適当な数字を割り当てていくと、意図しない場所にデフォルトの”Sheet”が挿入される為(“Sheet”が挿入位置の規則性はあるが、各自試して確認する方が早い)
3. ワークシートへ書き込み
方法1 : 行と列を指定して書き込み
worksheet.cell(row, column, value=None) #キーワード引数で渡す
- row : int
- 行番号(書き込み行)。row = 1で1行目を選択。
- column: int
- 列番号(書き込み列)。row = 1A列を選択。
- value(オプショナル) : numeric, time, string, bool, none 。デフォルトはNone
- 値(書き込みたい値)。(numpy.init32やnumpy.float64等は受け付けない?)
- row, colum, valueはキーワード引数で渡す(e.g.
worksheet.cell(row=1, column=1, value=100)
)
方法2 : セルを指定して書き込み
worksheet[cell] = value
- cell : string。
- セル番地(A1″、”A2″、”B1″など、書き込みたい番地)
- value : numeric, time, string, bool, none 。デフォルトはNone。
- 値(書き込みたい値)。numpy.init32やnumpy.float64等は受け付けない?
4. ファイルの保存
workbook.save(filename)
- filename : string
- 保存ファイル名。絶対パスで指定したほうが良い。
ソースコード例
import openpyxl
import numpy as np
import os
X = np.arange(0, 100, 5)
Y = X **1.5
filename = "~/text3.xlsx"
#ファイル名は絶対パスで指定
filename = os.path.expanduser(filename)
workbook = openpyxl.Workbook()
#the first worksheet
worksheet = workbook.create_sheet(title="index=0", index=0)
worksheet.cell(row = 1, column = 1, value="this should be the first sheet")
'''
#workbookを作った時点で作成されるデフォルトのシート"Sheet"を削除
workbook.remove_sheet(workbook.get_sheet_by_name("Sheet"))
'''
#the second worksheet
worksheet = workbook.create_sheet(title="index=1", index=1)
row = 1
col = 1
#A1セルに書き込み
worksheet.cell(row = row, column = col)
#B1セルに書き込み
worksheet.cell(row = row, column = col + 1, value = "Y1")
#C1セルに書き込み
worksheet.cell(row = row, column = col + 2, value = "X2")
#D1セルに書き込み
worksheet.cell(row = row, column = col + 3, value = "Y2")
row += 1
for x, y in zip(X, Y):
print(x.__class__, y.__class__, x, y)
#行と列を指定して値を書き込み
worksheet.cell(row = row, column = col, value = int(x)) #numpy.init32のままだとValueErrorが出るのでキャスト
worksheet.cell(row = row, column = col + 1, value = float(y)) #numpy.float64のままだとValueErrorが出るのでキャスト
cell_c = "C" + str(row)
cell_d = "D" + str(row)
#セルを指定して書き込み
worksheet[cell_c] = int(x)
worksheet[cell_d] = float(y)
row += 1
workbook.save(filename)
