143
197

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.

pythonのopenpyxlの使い方メモ

Last updated at Posted at 2017-12-18

pythonでExcel(xlsx)を作成・編集・読み込みができるモジュールである openpyxl の使い方メモです。

OpenPyXLドキュメント

http://openpyxl.readthedocs.io/en/stable/

Excelファイル作成

Excelファイルを作成する

空のExcelファイルを作成します。

#!/usr/bin/env python3
import openpyxl

if __name__ == '__main__':
    """
    Excelファイル(xlsx)を作るだけ
    `example.xlsx` が実行したカレントにできる
    """
    wb = openpyxl.Workbook()

    # 保存
    wb.save('example.xlsx')

標準WS名を変更

#!/usr/bin/env python3
import openpyxl

if __name__ == '__main__':
    """
    `example.xlsx` に作成するWS名を設定
    """
    wb = openpyxl.Workbook()
    ws = wb.active

    # 標準だと `Sheet` だが変更する場合は `title` で変更する
    ws.title = "WorkSheetTitle"

    # 保存
    wb.save('example.xlsx')

複数WSを作成

#!/usr/bin/env python3
import openpyxl

if __name__ == '__main__':
    """
    WorkSheetを複数作成する
    """
    wb = openpyxl.Workbook()
    ws = wb.active

    # 標準だと `Sheet` だが変更する場合は `title` で変更する
    ws.title = "WorkSheetTitle"

    # 2つめのWSを定義
    ws2 = wb.create_sheet("NewWorkSheet2")

    # 3つめのWSを定義してポジションを設定する
    # `0` だと一番先頭
    ws3 = wb.create_sheet("NewWorkSheet3", 0)

    # 保存
    wb.save('example.xlsx')

WSタブのカラーを変更

#!/usr/bin/env python3
import openpyxl

if __name__ == '__main__':
    """
    WSタブのカラーを変更
    """
    wb = openpyxl.Workbook()
    ws = wb.active

    # 標準だと `Sheet` だが変更する場合は `title` で変更する
    ws.title = "WorkSheetTitle"

    # WSのtabカラーを設定する
    ws.sheet_properties.tabColor = "1072BA"

    # 保存
    wb.save('example.xlsx')

セルに値を入れる

座標を指定

#!/usr/bin/env python3
import openpyxl

if __name__ == '__main__':
    """
    セルに値を入れる
    """
    wb = openpyxl.Workbook()
    ws = wb.active

    # 標準だと `Sheet` だが変更する場合は `title` で変更する
    ws.title = "WorkSheetTitle"

    # セルに値を入れる
    ws["A1"] = "HOGE"
    ws["B1"] = "FUGA"

    # 保存
    wb.save('example.xlsx')

行列表記

#!/usr/bin/env python3
import openpyxl

if __name__ == '__main__':
    """
    セルに値を入れる
    """
    wb = openpyxl.Workbook()
    ws = wb.active

    # 標準だと `Sheet` だが変更する場合は `title` で変更する
    ws.title = "WorkSheetTitle"

    # 行列表記でセルに値を入れる
    ws.cell(row=4, column=2, value=10)

    # 保存
    wb.save('example.xlsx')

行列表記2

#!/usr/bin/env python3
import openpyxl

if __name__ == '__main__':
    """
    セルに値を入れる
    """
    wb = openpyxl.Workbook()
    ws = wb.active

    # 標準だと `sheet` だが変更する場合は `title` で変更する
    ws.title = "worksheettitle"

    # 行列表記でセルに値を入れる
    v = 0
    for i in range(1,10):
        for n in range(1,10):
            ws.cell(row=i, column=n, value=v)
            v += 1

    # 保存
    wb.save('example.xlsx')

範囲指定

#!/usr/bin/env python3
import openpyxl

if __name__ == '__main__':
    """
    セルに値を入れる
    """
    wb = openpyxl.Workbook()
    ws = wb.active

    # 標準だと `sheet` だが変更する場合は `title` で変更する
    ws.title = "worksheettitle"

    # 行列表記でセルに値を入れる
    v = 0
    for i in range(1,10):
        for n in range(1,10):
            ws.cell(row=i, column=n, value=v)
            v += 1

    # 保存
    wb.save('example.xlsx')

行を一度に出力

#!/usr/bin/env python3
import openpyxl

# カラム名
column_title = ["FirstName", "LastName"]

if __name__ == '__main__':
    """
    セルに値を入れる
    """
    wb = openpyxl.Workbook()
    ws = wb.active

    # 標準だと `sheet` だが変更する場合は `title` で変更する
    ws.title = "worksheettitle"

    # カラム名と値をセットして順番にセルへ値を入れる
    rows = [
        column_title,
        ["Tarou", "Tanaka"],
        ["Tarou", "Suzuki"],
        ["Tarou", "Uchiayama"],
    ]
    for row in rows:
        ws.append(row)

    # 保存
    wb.save('example.xlsx')

セル内改行

#!/usr/bin/env python3
import openpyxl

if __name__ == '__main__':
    """
    セル内の改行
    """
    wb = openpyxl.Workbook()
    ws = wb.active

    # 標準だと `Sheet` だが変更する場合は `title` で変更する
    ws.title = "WorkSheetTitle"

    # セル内改行
    ws['A1'] = "A\nB\nC"
    ws['A1'].alignment = openpyxl.styles.Alignment(wrapText=True)

    # 保存
    wb.save('example.xlsx')

セルのスタイル設定

スタイルドキュメント

https://openpyxl.readthedocs.io/en/default/styles.html#cell-styles-and-named-styles

フォント設定

#!/usr/bin/env python3
import openpyxl

if __name__ == '__main__':
    """
    セルのスタイル変更
    """
    wb = openpyxl.Workbook()
    ws = wb.active

    # 標準だと `sheet` だが変更する場合は `title` で変更する
    ws.title = "worksheettitle"

    # フォントの設定
    font = openpyxl.styles.Font(
        name = "HGPゴシックE",
        size = 15,
    )
    a1 = ws["A1"]
    a1.font = font
    a1.value = "TEST"

    # 保存
    wb.save('example.xlsx')

セルの枠線

#!/usr/bin/env python3
import openpyxl
from openpyxl.styles import Border, Side

if __name__ == '__main__':
    """
    セルのスタイル変更
    """
    wb = openpyxl.Workbook()
    ws = wb.active

    # 標準だと `sheet` だが変更する場合は `title` で変更する
    ws.title = "worksheettitle"

    # セルの枠線
    border = Border(
        left=Side(
            border_style="thin",
            color="FF0000"
        ),
        right=Side(
            border_style="thin",
            color="FF0000"
        ),
        top=Side(
            border_style="thin",
            color="FF0000"
        ),
        bottom=Side(
            border_style="thin",
            color="FF0000"

        )
    )
    b2 = ws["B2"]
    b2.border = border
    b2.value = "TEST"

    # 保存
    wb.save('example.xlsx')

セルの結合

#!/usr/bin/env python3
import openpyxl

if __name__ == '__main__':
    """
    セルのスタイル変更
    """
    wb = openpyxl.Workbook()
    ws = wb.active

    # 標準だと `sheet` だが変更する場合は `title` で変更する
    ws.title = "worksheettitle"

    # セルの結合
    ws.merge_cells("A1:E1")
    ws["A1"] = "HOGE"

    # 保存
    wb.save('example.xlsx')

セルの塗りつぶし

#!/usr/bin/env python3
import openpyxl
from openpyxl.styles import PatternFill

if __name__ == '__main__':
    """
    セルのスタイル変更
    """
    wb = openpyxl.Workbook()
    ws = wb.active

    # 標準だと `sheet` だが変更する場合は `title` で変更する
    ws.title = "worksheettitle"

    # セルの塗りつぶし
    fill = PatternFill(fill_type='solid',
                       fgColor='FFFF0000')
    b2 = ws["B2"]
    b2.fill = fill
    b2.value = "TEST"

    # 保存
    wb.save('example.xlsx')

ハイパーリンク

#!/usr/bin/env python3
import openpyxl

if __name__ == '__main__':
    """
    セルのスタイル変更
    """
    wb = openpyxl.Workbook()
    ws = wb.active

    # 標準だと `sheet` だが変更する場合は `title` で変更する
    ws.title = "worksheettitle"

    # 2つ目のWSを作成
    ws2 = wb.create_sheet("example")

    # ハイパーリンク設定
    ws["A1"] = "Link"
    ws["A1"].hyperlink = "example.xlsx#example!A1"

    # 保存
    wb.save('example.xlsx')

Excelファイル読込

Excelファイルを読込む


#!/usr/bin/env python3
from openpyxl import Workbook, load_workbook

wb = load_workbook('./example.xlsx')
ws = wb.active

for row in ws:
    for cell in row:
        print(cell)
143
197
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
143
197

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?