Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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!

HirotakaKikushima
こんにちは、菊島 浩貴と申します。 プロジェクトマネージメントやITコンサルティングからクライアント・サーバーサイドのコーディング、DevOps、アジャイル開発までフルスタック志望のエンジニアです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした