目次
1.使用するライブラリ
2.今回作成したコードの全体
3.各コードの説明
4.実行結果
#1. 使用するライブラリ
今回使用したライブラリは,Excelファイルを扱うのが容易なopenpyxlと,ファイル取得ができるglobです。
openpyxlは本題となるExcelファイルの作成,読み取り,書き込みに使用しますが,globはディレクトリ内のファイル名を取得するために使用します。
#2. 今回作成したコードの全体
全体の流れは以下の通りです。
・Excelファイルが同じディレクトリ内に存在していなければ指定したExcelファイル名を作成します。
・既存のExcelファイルに作成したデータを書き込みます。
import openpyxl
import glob
# 書き込みたいデータ
Data = [[1,2,3],[4,5,6]]
# 使用するExcelファイルを選択
excel_file_name = 'Excel_test.xlsx'
# 同じディレクトリ内のファイル名(とディレクトリ名)を取得
files = glob.glob("*.xlsx")
# 存在する場合:存在しているファイルを使用、存在しない場合:ファイル作成
if excel_file_name in files:
pass
else:
create_file = openpyxl.Workbook()
create_file.save(excel_file_name)
# 使用するExcelファイルを選択
excel_file = openpyxl.load_workbook(excel_file_name)
# 選択したExcelファイルの中にあるシート名を取得
sheet_list = excel_file.sheetnames
# シート名を定義
sheet_name = 'Sheet' + str(ID_num)
# シート内に先ほどのシート名がなければ作成
if sheet_name in sheet_list:
pass
else:
excel_file.create_sheet(title=sheet_name)
# 書き込むExcelシートを選択
sheet = excel_file[sheet_name]
# 書き込み始める行と列を定義
start_row = 1
start_col = 1
# 書き込みたいデータをfor文で書き込み
for y, row in enumerate(Data):
for x, cell in enumerate(row):
sheet.cell(row=start_row + y,
column=start_col + x,
value=Data[y][x])
# 変更を保存
excel_file.save(excel_file_name)
#3. 部分的なコードの説明
基本的な内容をコードにしたものなので,かいつまんで説明します。
下のプログラムでは,同じディレクトリ内にあるExcelファイルを含んだ全てのファイル名をリストで取得します。これにより下に続くファイル作成において,ディレクトリ内にそのExcelファイルが存在するかどうかの条件文を作成することができるようになります。
条件文の中では,リストに指定したファイルが存在する場合には処理を行わず,存在しない場合にはExcelファイルを作成します。
# 同じディレクトリ内のファイル名(とディレクトリ名)を取得
files = glob.glob("*.xlsx")
# 存在する場合:存在しているファイルを使用、存在しない場合:ファイル作成
if excel_file_name in files:
pass
else:
create_file = openpyxl.Workbook()
create_file.save(excel_file_name)
下のコードでは作成(選択)したExcelファイルを選択し,そのExcelファイルにあるシート名を取得します。その次に今回書き込みたいシート名を定義します。
そして,先ほどのリストを用いた条件文を用いて,シート名が存在しない場合には新しくシートを作成します。このとき,条件文を用いないとシートが新しく生成されてしまい,既存のシートが初期化されてしまいます。
*新規作成したExcelファイルにあるシート名は"Sheet"なので,そのシートにそのまま書き込みをしたい場合は,シート名を"Sheet"にします。
# 使用するExcelファイルを選択
excel_file = openpyxl.load_workbook(excel_file_name)
# 選択したExcelファイルの中にあるシート名を取得
sheet_list = excel_file.sheetnames
# シート名を定義
sheet_name = 'Sheet_X'
# シート内に先ほどのシート名がなければ作成
if sheet_name in sheet_list:
pass
else:
excel_file.create_sheet(title=sheet_name)
#4. 実行結果
実行した場合のディレクトリ(ファイルの中)は下のようになります。
また,作成したExcelファイルの中身は下のようになります。