【Python】openpyxlのエクセル操作の使い方まとめ

Pythonの「openpyxl」ライブラリを使ったエクセルの操作をまとめました。
実際に使ってみてできたプログラムをまとめています。

「openpyxl」ライブラリを使用したエクセル操作の使い方まとめ

「openpyxl」を使ってエクセルの新規作成、データ出力、コピー&ペースト、罫線の作成をまとめています。
pythonでエクセル自動化をされる際は参考にしてください。

エクセル作成

以下は、新規でエクセルを作成するときのプログラムとなります。
※00_excel_create.py

import openpyxl as px
book = px.Workbook()
book.save('sample-test.xlsx')
print('> エクセル新規作成')
  • importで、「openpyxl」を定義
  • 2行目:新規エクセルを起動
  • 3行目:名前を付けてエクセルを保存

※実行結果

PS C:\Python> python .\00_excel_create.py
> エクセル新規作成
PS C:\Python>

以下で、新規に「sample-test.xlsx」というエクセルファイルが作成されたことを確認できます。

エクセル新規作成と「セル」の書き込み

以下はエクセルの新規作成とセルへの書き込みプログラムとなります。

import openpyxl as px
wb = px.Workbook()
ws = wb.active

ws['A1'].value = 'セル「A1」テスト'
ws['B2'].value = 'セル「B2」テスト'
ws['C3'].value = 'セル「C3」テスト'

print(ws['A1'].value)
print(ws['B2'].value)
print(ws['C3'].value)

wb.save('sample1.xlsx')
  • 2行目:新規エクセルを起動
  • 3行目:ワークシート指定
  • 5−7行目:セルへ書き込み
  • 9−11行目:書き込みデータを出力
  • 13行目:エクセルを保存

※実行結果

PS C:\Python> python .\04_excel_sheet_cel_write.py
セル「A1」テスト
セル「B2」テスト
セル「C3」テスト
PS C:\Python>

エクセルのシート情報取得

以下のエクセルシートの名前を出力させます。

※01_excel_sheet_get.py

import openpyxl as px

book = px.load_workbook('excel-data.xlsx')
name = book.get_sheet_names()

print(name)
  • 3行目:エクセルを読み込み
  • 4行目:シートの名前を取得
  • 6行目:シートの名前を出力

※実行結果

PS C:\Python> python .\01_excel_sheet_get.py
.\01_excel_sheet_get.py:4: DeprecationWarning: Call to deprecated function get_sheet_names (Use wb.sheetnames).
  name = book.get_sheet_names()
['Sheet1', 'test_sheet']
PS C:\Python>

4行目でシート名(’Sheet1′, ‘test_sheet’)が出力されていることが確認できました。

エクセルのセル情報取得

以下はエクセルの「セル」内のデータ情報を出力します。

※ 02_excel_cel_get.py

import openpyxl as px
wb = px.load_workbook('excel-data.xlsx')
ws = wb['Sheet1']

print(ws["D5"].value)
  • 2行目:エクセルを読み込む
  • 3行目:ワークブック「Sheet1」を読み込み、関数名「ws」とする
  • 5行目:ws(Sheet1)内の「D5」のセル情報「7.7M」のデータを出力

※実行結果

PS C:\Python> python .\02_excel_cel_get.py
7.7M
PS C:\Python> 

セル「D5」のデータ情報「7.7M」が出力されてことが確認できます。

エクセルのセル情報を列で複数行取得

以下では、セルの情報を「列」で取得するプログラムとなります。

※ 03_excel_cel_get.py

import openpyxl as px
wb = px.load_workbook('excel-data.xlsx')
ws = wb['Sheet1']

for i in range(5):
    some = "B" + str(i + 2)
    print(ws[some].value)
    i += 1
  • 2行目:エクセルを読み込み
  • 3行目:対象のシートを読み込み
  • 5行目:for文を定義し、レンジを5とする
  • 6行目:B列の2行目から5行のデータを読み込み
  • 7-8行目:1行づつデータを出力

※実行結果

PS C:\Python> python .\03_excel_cel_get.py
ファイルシス
devtmpfs
tmpfs
tmpfs
tmpfs
PS C:\Python> 

B列の2行目から5行分のデータを出力できました。

エクセルのシートコピーと別のワークブックへの書き込み

以下は、エクセルのシートのデータを、別のエクセルへコピーするプログラムとなります。

※ 05_excel_sheet_cel_copy_write.py

from openpyxl import load_workbook
 
wb = load_workbook('sample1.xlsx')
ws = wb.active
 
wb.save('sample2.xlsx')

print('sample2へのコピー完了')
  • 3行目:「sample1.xlsx」のエクセルファイルを読み込み
  • 4行目:シート読み込み
  • 6行目:「sample2.xlsx」へデータをコピー

※実行結果

PS C:\Python> python .\05_excel_sheet_cel_copy_write.py
sample2へのコピー完了
PS C:\Python> 

別のエクセルファイル「sample2.xlsx」へデータがコピーされたことが確認できました。

エクセルのセルを範囲指定で別シートにコピー

以下では、指定のセルのデータを、別シートに範囲指定で貼り付けるプログラムとなります。
「Sheet1」のセル「B3」のデータ「devtmpfs」を別シートの「B3」へ貼り付けます。

※ 06_excel_sheet_cel_copy_write_02.py

import openpyxl as px

#Excelファイルを読み込む
wb = px.load_workbook('excel-data.xlsx')

#「Sheet2」作成
wb.create_sheet('Sheet2')

ws = wb['Sheet1']
ws2 = wb['Sheet2']

#Sheet1のB3セルの値をSheet2のB3セルにコピーする
ws2["B3"] = ws["B3"].value

wb.save('excel-data.xlsx')

print('Sheet2へのコピー完了')
  • 4行目:対象のエクセルを読み込む
  • 7行目:新規シート「Sheet2」を作成
  • 9−10行目:それぞれのシートを読み込む
  • 13行目:Sheet1の「B3」のデータをSheet2の「B3」へコピーする
  • 15行目:エクセルファイルを保存する

※実行結果

PS C:\Python> python 06_excel_sheet_cel_copy_write_02.py
Sheet2へのコピー完了
PS C:\Python> 

対象のデータが、別シートにコピーされたことが確認できました。

セルの範囲を別ブックのシートに貼り付ける

以下は、エクセルファイルのデータを別のエクセルファイルへデータコピーするプログラムとなります。

※ 07_excel_sheet_cel_copy_write_03.py

import openpyxl as px

#Excelファイルを読み込む
wb1 = px.load_workbook('excel-data.xlsx')
wb2 = px.load_workbook('sample-test.xlsx')
ws1 = wb1['Sheet1']
ws2 = wb2['Sheet']

#「sample-test.xlsx」のSheetのセルに「excel-data.xlsx」Sheet1のB3セルの値をコピーする
ws2["A1"] = ws1["B3"].value

wb1.save('excel-data.xlsx')
wb2.save('sample-test.xlsx')

print('sample-test_sheetへのコピー完了')
  • 4行目:「excel-data.xlsx」を読み込む
  • 5行目:「sample-test.xlsx」を読み込む
  • 6行目:excel-data.xlsxのシート「Sheet1」を読み込む
  • 7行目:sample-test.xlsxのシート「Sheet」を読み込む
  • 10行目:「excel-data.xlsx」の「Sheet1」の「B3」のデータを、「sample-test.xlsx」の「Sheet」の「A1」へコピーする
  • 12−13行目:エクセルファイルを保存する

※実行結果

PS C:\Python> python .\07_excel_sheet_cel_copy_write_03.py
sample-test_sheetへのコピー完了
PS C:\Python> 

別のエクセルへ該当のデータが書き込まれたことを確認できました。

セルを範囲指定で出力

以下は、エクセルファイルのB列の1行目から10行目までのデータを出力するプログラムとなります。

※ 08_excel_sitei.py

import openpyxl

# ブックを取得
book = openpyxl.load_workbook('excel-data.xlsx')
# シートを取得
sheet = book['Sheet1']

# セルを取得
for rows in sheet.iter_rows(min_row=1, min_col=2, max_row=10, max_col=2):
    for cell in rows:
        print(cell.value)
  • 4行目:該当のエクセルを読み込む
  • 6行目:対象のシートを読み込む
  • 9-11行目:B列の1行目から10行目までのデータを出力

※ 実行結果

PS C:\Python> python 08_excel_sitei.py
c00
ファイルシス
devtmpfs
tmpfs
tmpfs
tmpfs
/dev/mapper/centos-root
/dev/sda1
tmpfs
None
PS C:\Python> 

セル範囲指定で出力と別シートへのコピー

以下は、範囲指定でデータを出力と別シートにデータをコピーするプログラムとなります。
※別シートにコピーされたデータは最後に出力されたデータが書き込まれます。

※ 09_excel_sitei_02.py

import openpyxl as px
 
#Excelファイルを読み込む
wb = px.load_workbook('excel-data.xlsx')

#「Sheet3」作成
wb.create_sheet('Sheet3')

ws = wb['Sheet1']
ws2 = wb['Sheet3']

for i in ws.iter_rows(min_row=2,min_col=2,max_row=6,max_col=2):
    for c in i:
        ws2["A1"] = c.value
        print(c.value)

wb.save('excel-data.xlsx')

print('Sheet3へのコピー完了')
  • 4行目:該当のエクセルを読み込む
  • 7行目:Sheet3を新規作成
  • 9−10行目:それぞれのシートを読み込み
  • 12-15行目:範囲指定でデータを出力。それぞれのデータを「Sheet3」の「A1」へコピー

※ 実行結果

PS C:\Python\04_openpyxl使い方> python .\09_excel_sitei_02.py
ファイルシス
devtmpfs
tmpfs
tmpfs
tmpfs
Sheet3へのコピー完了
PS C:\Python\04_openpyxl使い方> 

指定範囲のデータが出力され、別シートの「A1」へ最後に出力されたデータが書き込まれたことを確認できました。

セル範囲指定で出力と別シートへのコピー その2

以下は、セルの範囲指定で読み込んだ全てのデータを別シートに書き込むプログラムとなります。

※ 09_excel_sitei_03.py

import openpyxl as px
 
#Excelファイルを読み込む
wb = px.load_workbook('excel-data.xlsx')

#「Sheet3」作成
wb.create_sheet('Sheet3')

ws = wb['Sheet1']
ws2 = wb['Sheet3']
 
for i in range(1,10):
#コピー元の列を定義
    copy = ws.cell(row = i, column = 2).value
#Valueに指定した値を指定先の列に貼り付ける
    ws2.cell(row = i, column = 5, value = copy)
    i += 1

wb.save('excel-data.xlsx')
print('Sheet3へのコピー完了')
  • 4行目:エクセルファイルを読み込む
  • 7行目:新規にシートを作成
  • 9−10行目:それぞれのシートを読み込み
  • 12行目:レンジで範囲指定
  • 14行目:B行の1行目-9行目までをコピー
  • 16−17行目:別シートのE列の1行目-9行目にデータを貼り付け
  • 19行目:エクセルファイルを保存

※ 実行結果

PS C:\Python> python .\09_excel_sitei_03.py
Sheet3へのコピー完了
PS C:\Python> 

範囲指定でコピーしたデータが別ファイルに書き込まれたことを確認できました。

セルに罫線を記載

以下はエクセルに罫線を書き込むプログラムとなります。

※ 10_excel_style_01.py

import openpyxl as px
from openpyxl.styles import Border, Side

wb = px.load_workbook('sample1.xlsx')
ws = wb['Sheet']

side1 = Side(style = 'thick', color='00FF00')
side2 = Side(style = 'dashDot', color='0000FF')
side3 = Side(style = 'slantDashDot', color='FF0000')

for rows in ws['A1':'B1']:
    for cell in rows:
        cell.border = Border(left = side1, right = side1, top = side1, bottom = side1)
for rows in ws['B2':'B5']:
    for cell in rows:
        cell.border = Border(left = side2, right = side2, top = side2, bottom = side2)
for rows in ws['C1':'D7']:
    for cell in rows:
        cell.border = Border(left = side3, right = side3, top = side3, bottom = side3)

wb.save('sample1.xlsx')
print('罫線の記載完了')
  • 1−2行目:openpyxlをインポート
  • 4行目:対象のエクセルファイルを読み込み
  • 5行目:対象シートの読み込み
  • 7−9行目:罫線のスタイルを定義
  • 11−19:それぞれの罫線を指定範囲で書き込み
  • 21行目:エクセルファイルを保存

※ 実行結果

PS C:\Python> python .\10_excel_style_01.py
罫線の記載完了
PS C:\Python> 

罫線が、指定の範囲で書き込まれていることが確認できます。

openpyxlの使い方まとめでした。




エンジニアのオンライン学習

ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。

おすすめオンライン教材
自宅で学習ができるオンラインスクール

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUT US
げんき☆ひろき
インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!