20
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OpenpyxlでExcel操作入門&TIPS

Posted at

pythonでExcelを操作できるライブラリはいくつかありますが、
私が調べた中で唯一「.xlsm」の拡張子を扱うことのできたライブラリOpenpyxlについて記事にします。

Openpyxl概要

公式ドキュメント:https://openpyxl.readthedocs.io/en/stable/index.html

最新バージョン:2.6.2(2019/9/27現在)

ライセンス:MITライセンス

対応officeバージョン:office2010~

xlsx、xlsm等には対応できるが、xlsは非対応

インストール

以下のように、pipコマンドでインストールするだけ。

cmd
pip install openpyxl

Excelを開いてみる

from openpyxl import Workbook, load_workbook

# xlsm形式ファイルを開く場合
wb = load_workbook(filename="Excelファイルのパス", read_only=False, keep_vba=True)
ws = self.wb['シート名']

最低限、Excelファイルのパスを指定してload_workbookの引数に渡せば、pythonでExcelファイルを開くことはできる。

read_only = False

読み取り専用(True)か書き込み可能(False)かを指定する。

keep_vba = True

開いたExcelのVBマクロを読み込むかどうかを指定する。
読み込む → True、読み込まない → False
※ここで、Falseを指定すると、保存時にVBマクロが動かなくなるので、保存後もマクロを有効にしたい場合は、Trueを指定する。

Excelを編集してみる


# 書き込み
ws['A1'] = 'A1'

# R1C1形式でも指定可能
# 列数、行数は1から開始
ws.cell(row=2, column=3).value = 'C2'

# 読み取り
data1 = ws['A1']
data2 = ws.cell(row=2, column=3).value

# Bookの保存
wb.save("保存先Excelファイルのパス")

簡単な読み書きだけであれば、以上のことを覚えておくだけで完結する。

より複雑な編集をしてみる

以下にただの読み書きよりも少し高度なExcel編集をTIPSとして羅列する。
まず、importしなければならないライブラリ

from openpyxl.workbook.protection import WorkbookProtection
from openpyxl.styles.borders import Border, Side
from openpyxl.styles import Alignment
from openpyxl.styles.fonts import Font
from openpyxl.worksheet.datavalidation import DataValidation
from openpyxl.styles.fills import PatternFill

以下、ソースコード抜粋


# 罫線の適用
# 罫線を定義
thinside = Side(style='thin', color='000000')
thisborder = Border(top=thinside, bottom=thinside, left=thinside, right=thinside)
ws['A1'].border = thisborder

# セルの塗りつぶし
# 塗りつぶしルールを定義
fill = PatternFill(patternType='solid', start_color='ffff0000', end_color='ffff0000')
ws['A1'].fill = fill

# ズームの変更
ws.sheet_view.zoomScale = 75 # 75%に変更

# データの入力規則の適用
# 選択肢A~Dで空白を許可する
data_valid = DataValidation(type='list', formula1='"選択肢A,選択肢B,選択肢C,選択肢D"', allow_blank=True)
data_valid.add(ws['A1'])

# シートの保護
ws.protection.enable()

# ブックの保護
wb.security = WorkbookProtection()
wb.security.lockStructure = True

さいごに

今回は、xlsmのファイルを扱うためにOpenpyxlを使用したが、
他のExcel操作のpythonライブラリも試して、
各ライブラリの比較とかできたらよいなと心の片隅に思った…(思っただけ)

20
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?