膨大なライブラリがPyPIで公開されている
多くの機能は後から別途インストールして使えるようになっています。
pythonのライブラリは、PyPI (The Python Package lndex)というWebサイトにまとめられています。
「openpyxl」ライブラリーを使って、Excelファイルのシートやセルからデータを取り出したり、また逆にセルにデータを書き出したりと、
さまざまな操作が可能になります。直接Excelファイル(拡張子が「.xlsx」)を操作するライブラリです。
pip install -U openpyxl==3.0.4
基本的な操作
モジュールのimport宣言
# ライブラリを取り込む
import openpyxl as excel
ワークブックを用意する
# 新規ワークブックを作る
book = excel.Workbook()
# 既存のExcelファイルの読み込み
book = excel.load_workbook("ファイル名.xlsx")
# 式があれば展開してワークブックを開く
book = excel.load_workbook("ファイル名.xlsx", data_only=True)
# ワークブックを明示的に閉じる
book.close()
ワークシートを操作するためのオブジェクトを取得する方法
# アクティブなワークシートを得る
sheet = book.active
# n番目のシートを得る
sheet = book.worksheets[n]
# シート名を指定して取得
sheet = book["シート名"]
# ブック内のシート名の一覧を取得
print(book.sheetnames)
# 新規シートを作成
sheet = book.create_sheet(title="シート名")
# 既存のシートをコピーして取得
sheet = book.copy_worksheet(book["シート名"])
# シート名を変更する
sheet.title = "新しい名前"
# シートを削除
book.remove(book["シート名"])
セル名を指定する方法
# A1のセルに値を設定
sheet["A1"] = "こんにちは"
# 行番号と列番号を指定して値を設定(rowとcolumnは1起点)
sheet.cell(row=行番号, column=列番号, value="こんにちは")
# 先に任意のセルを取得し、セルに値を設定する方法
cell = sheet.cell(row=行番号, column=列番号)
cell.value = "こんにちは"
# シートの値を読む
print(sheet["A1"].value)
# 行番号と列番号を指定して値を取得
v = sheet.cell(row=行番号, column=列番号).value
print(v)
ファイルを保存
# ファイルを保存
book.save("hello.xlsx")
iter_rowsで繰り返し指定範囲を取得
# 行番号と列番号を指定してイテレータを取得
it = sheet.iter_rows(
min_row=最小行, max_row=最大行,
min_col=最小列, max_col=最大列
)
# for文と組み合わせてセルの値を取得
for row in it:
for cell in row:
print(cell.value)
pythonのイテレータはfor文と組み合わせて使い要素を反復して値を取り出す機能です。
年齢生年対応表
import openpyxl as excel
import datetime
book = excel.Workbook()
sheet = book.active
thisyear = datetime.date.today().year
for i in range(80):
age = i
year = thisyear - i
age_cell = sheet.cell(i+1, 1)
age_cell.value = str(i) + "歳"
year_cell = sheet.cell(i+1, 2)
year_cell.value = str(year) + "年"
book.save("agelist.xlsx")
西暦和暦の対応表
import openpyxl as excel
# 西暦と和暦の対応テーブル
wareki_table = [
{"name": "明治", "start": 1868, "end": 1912},
{"name": "大正", "start": 1912, "end": 1926},
{"name": "昭和", "start": 1926, "end": 1989},
{"name": "平成", "start": 1989, "end": 2019},
{"name": "令和", "start": 2019, "end": 9999}
]
# 西暦から和暦へ変換する関数を定義
def seireki_wareki(year):
for w in wareki_table:
if w["start"] <= year < w["end"]:
y = str(year - w["start"] + 1) + "年"
if y == "1年":
y = "元年"
return w["name"] + y
return "不明"
# 新規ワークブックを作る
book = excel.Workbook()
sheet = book.active
# シートのヘッダ部分の説明を入れる
sheet["A1"] = "西暦"
sheet["B1"] = "和暦"
# 100年分の西暦和暦の対応表を作る
start_y = 1868
for i in range(180):
sei = start_y + i
wa = seireki_wareki(sei)
# シートに設定
sheet.cell(row=2+i, column=1, value=str(sei)+"年")
sheet.cell(row=2+i, column=2, value=wa)
print(sei, "=", wa)
book.save("wareki.xlsx")