PythonでExcel を自動化 Python + openpyxlでExcelファイルを作成する方法

title_openpyxl

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”が挿入位置の規則性はあるが、各自試して確認する方が早い)

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)
openpyxlで作成されるxlsxファイル
タイトルとURLをコピーしました