LoginSignup
52
83

More than 5 years have passed since last update.

【Python】OpenPyXLでExcelを自動操作する

Last updated at Posted at 2018-04-13

Excel用のPythonライブラリのうち,
日本語記事が既にいくつか存在するOpenPyXLについて説明します。

インストール方法

pip install OpenPyXL

普通にpipするのみ
場合によってはMSのframeworkのインストールが必要になることもあり
また、OpenPyXLで画像ファイルを扱うためにはPillowという画像ファイル向けのライブラリが使える

OpenPyXLとXlsxWriterの比較

同様に日本語記事が多い、Excel用のPythonライブラリであるXlsxWriterと比較を行うと、
XlsxWriterは新規Excelファイルの作成が必要になるため、
既存Excelの編集時はOpenPyXLを使うことになる。
また、既存Excelファイルの読み込みを行う場合も必然的にOpenPyPlを使うことになる。
したがってXlsxWriterを使う必要性を感じなかったため、自分はOpenPyXLに一本化しました。

ExcelへのPython搭載のウワサの非公式NG回答(2018/12/26 追記)

Pythonのライブラリ使えとのことのようです。細かくはこちらのエントリーをご覧ください。
「ExcelにPythonが搭載?その後 - xlwings を使おう - Qiita」
https://qiita.com/yniji/items/b38bc312e860027108ac

OpenPyXL

公式サイト

「openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files — openpyxl 2.5.2 documentation」
https://openpyxl.readthedocs.io/en/stable/

ファイルの保存(絶対パス)

filesave.py
# 新規ファイル作成
wb = px.Workbook()
# 保存
wb.save('C:\myDev\myTest\sample.xlsx')

セルの値書き込み

writeCellValue.py
# 新規ファイル作成
wb = px.Workbook()
# 対象のシートを選択する
ws = wb.active
# セル操作
## A1形式
ws['A1'].value = 'Hello World'
## R1C1形式
ws.cell(row=2, column=3).value = "123"
# 保存(絶対パス)
wb.save('C:\myDev\myTest\sample.xlsx')

セルの値読み込み

readCellValue.py
# ファイル読み込み
wb = px.load_workbook('./example.xlsx')
ws = wb.active

# A1形式
a1 = ws['A1'].value
print(a1)
# R1C1形式
r1c1 = ws.cell(row=2, column=3).value
print(r1c1)

Excel関数の使用

useExcelMethods.py
# 新規ファイル作成
wb = px.Workbook()
# 対象のシートを選択する
ws = wb.active

# 値を入力
# 数字は文字型ではなく数値型として入力した方がベターなよう
ws['A1'].value = 1
ws['A2'].value = 2.50000003
ws['A3'].value = 3.5

# 関数を入力
ws['B1'].value = '=SUM(A1:A3)'
ws['B2'].value = '=AVERAGE(A:A)'

# 保存(絶対パス)
wb.save('C:\myDev\myTest\calc.xlsx')

画像ファイルの挿入

inserImages.py

import openpyxl as px
from openpyxl.drawing.image import Image


# 新規ファイル作成
wb = px.Workbook()
# 対象のシートを選択する
ws = wb.active

# 画像ファイル(相対パス)
img = Image('test.jpg')
# 画像ファイル(相対パス)
img2 = Image("C:\myDev\myTest\\test.jpg")

# A1形式で挿入
ws.add_image(img, 'A1')
# R1C1形式は不可...?
# ws.add_image(img2, 'R8C[8')

wb.save('logo.xlsx')

読み込み専用モード

大容量ファイルや変更を行いたくないファイル向けに読み込みモードが利用可能
「Read-only mode — openpyxl 2.5.2 documentation」
https://openpyxl.readthedocs.io/en/stable/optimized.html

雑記

仕事ではExcel地獄かってぐらいにExcel使うんですが、
仕事以外ではほとんど使わないんですよね。。

Happy Excel!

52
83
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
52
83