【Python】Excelを操作方法をまとめました

PythonからExcelを操作する方法について。

この記事の内容はコチラです

  • PythonからExcelのセルを読み込み・書き込みする
  • セル範囲をまとめて読み込む
  • セルの背景色・文字色・幅・高さ・結合・罫線を設定する

今回は、Excelを操作する方法を解説します。

Excelのセルを操作する

事前準備

PythonからExcelを操作をするには、「openPyXl」パッケージが便利です。「openPyXl」を事前にダウンロード・インストールしておく必要があります。

PythonでExcelのセルに書き込むには、「A1」のような記号と「row=1,column=1」のような数値形式の2種類の方法で書き込むことができます。

セルに書き込みする

Excelのセルに書き込み(セル記号)

import openpyxl

# ブックを取得
book = openpyxl.load_workbook('C:\\pg\\data.xlsx')
# シートを取得
sheet = book['Sheet1']
# セルへ書き込む
sheet['A1'] = 'ナンバー'
sheet['B1'] = 100
# 保存する
book.save('C:\\pg\\data.xlsx')

Excelファイル「data.xlsx」を開き、「Sheet1」シートのセル「A1」「B1」にデータを書き込みました。

  • ファイル名:data.xlsx
  • シート名:Sheet1
  • セル:A1セル=’ナンバー’、B1セル=100

Excelのセルに書き込み(セル数値)

import openpyxl

# ブックを取得
book = openpyxl.load_workbook('C:\\pg\\data.xlsx')
# シートを取得
sheet = book['Sheet1']
# セルへ書き込む
sheet.cell(row=1,column=1).value = 'ナンバー'
sheet.cell(row=1,column=2).value = 100
# 保存する
book.save('C:\\pg\\data.xlsx')

Excelファイル「data.xlsx」を開き、「Sheet1」シートのセル「A1」「B1」にデータを書き込みました。セルの指定を記号ではなく数値で指定しました。

  • ファイル名:data.xlsx
  • シート名:Sheet1
  • セル:A1セル(row=1,column=1)=’ナンバー’、B1セル(row=1,column=2)=100

数式を書き込む

import openpyxl

# ブックを取得
book = openpyxl.load_workbook('C:\\pg\\data.xlsx')
# シートを取得
sheet = book['Sheet1']
# シートを取得
sheet['A11'] = '=SUM(A1:A10)'
# 保存する
book.save('C:\\pg\\data.xlsx')

Excelファイル「data.xlsx」を開き、シート「Sheet1」のセル「A11」に「A1」~「A10」を合計する数式「=SUM(A1:A10)」を書き込みました。

  • ファイル名:data.xlsx
  • シート名:Sheet1
  • セル:A11
  • 書き込んだデータ: ‘=SUM(A1:A10)’

「A11」を確認すると、数式が埋め込まれ、データが合計されました。

セルを読み込みする

セル範囲を取得する(セル記号)

import openpyxl

# ブックを取得
book = openpyxl.load_workbook('C:\\pg\\人口一覧.xlsx')
# シートを取得 
sheet = book['Sheet1']

# セルを取得 
for rows in sheet['B6':'C8']:
    for cell in rows:
        print(cell.value)
#[結果] 北海道
#[結果] 2522526
#[結果] 青森県
#[結果] 619836
#[結果] 岩手県
#[結果] 607653

この例では、「Sheet1」の「B6」~「C8」セルのデータをすべて取得しました。

「for rows in sheet[‘B6′:’C8’]:」で1行ごとに取得し、「for cell in rows」で1行をさらに列毎に取得して、セルの値を取得しました。

セル範囲を取得する(セル数値)

import openpyxl

# ブックを取得
book = openpyxl.load_workbook('C:\\pg\\人口一覧.xlsx')
# シートを取得 
sheet = book['Sheet1']

# セルを取得 
for rows in sheet.iter_rows(min_row=6, min_col=2, max_row=8, max_col=3):
    for cell in rows:
        print(cell.value)
#[結果] 北海道
#[結果] 2522526
#[結果] 青森県
#[結果] 619836
#[結果] 岩手県
#[結果] 607653

この例では、例1と同じデータを取得しました。例1がセル記号「B6:C8」だったのに対し、こちらはセルを数値で指定しました。

セルを数値で扱うには「iter_rows」を使います。開始行列・終了行列(min_row・min_col・max_row・max_col)をパラメータにセットします。こちらの方が扱いやすいですね。

これでEXCELの指定した範囲のセルデータを取得することができました。

すべてのデータを取得する(行が基準)

import openpyxl

# ブックを取得
book = openpyxl.load_workbook('C:\\pg\\人口一覧.xlsx')
# シートを取得 
sheet = book['Sheet1']

# セル番地を取得 
for cells in tuple(sheet.rows):
    for cell in cells:
        print(cell.value)
#[結果] 年齢
#[結果] 男女計
#[結果] 男
#[結果] 女
#[結果] 1
#[結果] 1000
#[結果] 514
#[結果] 486
#[結果] 2  ※以下省略

この例では、「Sheet1」に含まれるデータをすべて取得しました。

「tuple(sheet.rows)」で1行ごとに取得し、その1行をさらに列毎に取得して、セルの値を取得しました。

すべてのデータを取得する(列が基準)

import openpyxl

# ブックを取得
book = openpyxl.load_workbook('C:\\pg\\人口一覧.xlsx')
# シートを取得 
sheet = book['Sheet1']

# セル番地を取得 
for cells in tuple(sheet.columns):
    for cell in cells:
        print(cell.value)
#[結果] 年齢
#[結果] 1
#[結果] 2
#[結果] 3
#[結果] 男女計
#[結果] 1000
#[結果] 960
#[結果] 975  ※以下省略

例1と同じくセルを1つずつ取得しました。取得するデータは同じですが、順番が違います。例2は列を基準に取得しました。例1との違いに注意してください。

「tuple(sheet.columns)」で1列ごとに分解し、その1列をさらに行毎に分解して、セルの値を取得しました。これでEXCELのセルデータをすべて取得することができました。

シートをすべて取得する

import openpyxl

# ブックを取得
book = openpyxl.load_workbook('C:\\pg\\人口一覧.xlsx')
# シートを取得 
sheets = book.sheetnames

print(sheets)
#[結果] ['第1表', '第2表']

この例では、まずExcel「C:\pg\人口一覧.xlsx」のブックを取得しました。そして「sheetnames」でシートの一覧を取得しました。

結果を見ると2つのシート「第1表」「第2表」が取得できました。実際のEXCELファイルを確認すると正しいことがわかります。

これでExcelのシート名をすべて取得することができました。

セルの操作(色・罫線・高さ・幅・結合)

Excelの背景色を変更する

import openpyxl

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

# 背景色を変更
fill = openpyxl.styles.PatternFill(patternType='solid',
                                   fgColor='FF0000', bgColor='FF0000')
# シートに設定
sheet['A1'].fill = fill

# 保存する
book.save('C:\\pg\\data.xlsx')

Excelファイル「data.xlsx」のシート「Sheet1」のセル「A1」の背景色を赤色「FF0000」に設定しました。

「PatternFill」の「patternType」は「solid」(塗りつぶし)にしました。

「bgColor」で背景色を設定します。背景色は「bgColor」なので「bgColor」だけ設定すればよさそうな気がしますが、なぜかこれだけでは背景色は変わりません。「fgColor」も背景色と同じ色を設定すると背景色が変更できます。

カラーコードはシングルクオーテーションでもダブルクオーテーションでもどちらで括っても動作しました。

# 背景色を変更
fill = openpyxl.styles.PatternFill(patternType='solid',
                                   start_color='FF0000', end_color='FF0000')

他にも「start_color=’FF0000′, end_color=’FF0000’」としても背景色を変更できます。

これでExcelセルの背景色を変更することができました。

Excelの文字色を変更する

import openpyxl

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

# シートに設定
sheet['A1'].font = openpyxl.styles.fonts.Font(color='FF0000')

# 保存する
book.save('C:\\pg\\data.xlsx')

Excelファイル「data.xlsx」のシート「Sheet1」のセル「A1」の文字色を赤色「FF0000」に設定しました。

「openpyxl.styles.fonts.Font」でフォントの色を設定しました。これでExcelセルの文字色を変更することができました。

Excelのセルを結合する

import openpyxl

# ブックを取得
book = openpyxl.load_workbook('C:\\pg\\data.xlsx')
# シートを取得
sheet = book['Sheet1']
# セルを結合
sheet.merge_cells('A1:G1')
# 保存する
book.save('C:\\pg\\data.xlsx')

Excelファイル「data.xlsx」のシート「Sheet1」の1行目のセルを結合しました。「merge_cells」を使って「A1」~「G1」までを結合しました。保存されたEXCELファイルを確認すると、1行目のセルが結合されました。

Excelのセル結合を解除する

import openpyxl

# ブックを取得
book = openpyxl.load_workbook('C:\\pg\\data.xlsx')
# シートを取得
sheet = book['Sheet1']
# セル結合を解除
sheet.unmerge_cells('A1:G1')
# 保存する
book.save('C:\\pg\\data.xlsx')

例1で使用した1行目のセル結合を解除しました。「unmerge_cells」を使って「A1」~「G1」までの結合を解除しました。保存されたEXCELファイルを確認すると、1行目のセルが結合解除されました。

Excelの行の高さ・列の幅を変更する

import openpyxl

# ブックを取得
book = openpyxl.load_workbook('C:\\pg\\data.xlsx')
# シートを取得
sheet = book['Sheet1']
# 行の高さを変更
sheet.row_dimensions[1].height = 30
# 列の幅を変更
sheet.column_dimensions['B'].width = 50
# 保存する
book.save('C:\\pg\\data.xlsx')

Excelファイル「data.xlsx」を開き、シート「Sheet1」の1行目の高さを30に設定し、B列の幅を50に設定しました。保存されたEXCELファイルを確認すると、セルの高さと幅が変更されました。

罫線(外枠)を書き込む

import openpyxl
from openpyxl.styles.borders import Border, Side

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

# 罫線(外枠)を設定
border = Border(top=Side(style='thin', color='000000'), 
                bottom=Side(style='thin', color='000000'), 
                left=Side(style='thin', color='000000'),
                right=Side(style='thin', color='000000')
)
# セルに罫線を設定
sheet['A1'].border = border

# 保存する
book.save('C:\\pg\\data.xlsx')

Excelファイル「data.xlsx」のシート「Sheet1」のセル「A1」に罫線(外枠)を設定しました。

「openpyxl.styles.borders.Border」で罫線を設定しました。ここでは罫線を外枠にするために、上下左右の4つを設定しました。

罫線の種類

top 上罫線
bottom 下罫線
left 左罫線
right 右罫線

style

hair 実線(極細)
thin 実線(細)
medium 実線(中)
thick 実線(太)
dashed 破線
dotted 点線
dashDot 一点鎖線
dashDotDot 二点鎖線
double 二重線
slantDashDot 斜め斜線

これでExcelで罫線を設定することができました。

以上、PythonからExcelを操作する方法でした。

● Python初心者におすすめ!

Python学習方法に関する記事です。読まないと損するかも。

Pythonのコスパ最強スクールはココです!

最短ルートでPythonを独学する方法は?

オススメのPython勉強本を紹介します!

コメント