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