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学習方法に関する記事です。読まないと損するかも。
 
  
  
  
  

コメント