【Python | NOTE】EXCELを操作するopenpyxlの使い方

スポンサーリンク
スポンサーリンク

openpyxlの使い方

環境

  • Windows10
  • anaconda
  • python3
  • jupyter notebook

モジュールインポート

import openpyxl

openpyxlの使い方

新規のファイルを作成してA1セルに”テスト”と書き込み保存する

wb = openpyxl.Workbook()
ws = wb['Sheet']
ws.cell(1, 1).value = 'テスト'
wb.save('test.xlsx')
wb.close()

※ファイル名は「test.xlsx」としています。

既にあるEXCELファイルを開いて、A1セルの値を出力する

さっき、作成したファイルを取得します。

openpyxl.load_Workbook

wb = openpyxl.load_Workbook('test.xlsx', read_only=True)
ws = wb['Sheet']  # アクティブなシートで良ければwb.activeでもOK
print(ws.cell(1, 1).value)
wb.close()

「テスト」というテキストが出力されると思います。

※”read_only=True”は読み込み専用

シート名を変更する

ws.title

wb = openpyxl.load_Workbook('test.xlsx')
ws = wb['Sheet']
ws.title = "テストタイトル"
wb.save('test.xlsx') 
wb.close()

※ちゃんとセーブしないと反映されないので注意して下さい。

Pandasのデータフレームとのやり取り

モジュールインポート

from openpyxl.utils.dataframe import dataframe_to_rows

OpenPyXLのユーティリティ

PandasのデータフレームをOpenPyXL用の行単位のオブジェクトに分割してくれるもの

データフレームをEXCELシートに書き出す

wb = openpyxl.Workbook()
ws = wb.active

ws.cell(1, 1).value = 'データ'
rows = dataframe_to_rows(df, index=False, header=True)

# 表の貼り付け位置
row_start = 2
col_start = 1

for row_no, row in enumerate(rows, row_start):
    for col_no, value in enumerate(row, col_start):
        ws.cell(row_no, col_no).value = value

wb.save('test.xlsx') 
wb.close()

EXCELの書式関係の処理

モジュールインポート

from openpyxl.styles import PatternFill, Border, Side, Font

OpenPyXLのスタイル関係の機能のインポート

データフレームをEXCELシートに書き出す

cell = ws.cell(3, 2)

#罫線の種類と色
cell.fill = PatternFill(patternType='solid', fgColor='008080')

#文字の太さと色
cell.font = Font(bold=True, color='FFFFFF')

#セルの幅
ws.column_dimensions['A'].width = 20

wb.save(filename)
wb.close()

グラフの作成

モジュールインポート

from openpyxl.chart import Reference, BarChart, PieChart, LineChart, ScatterChart, Series

グラフ関係の機能をインポート

折れ線グラフ(LineChart)

wb = openpyxl.load_Workbook('test.xlsx')
ws = wb.active

# グラフに使うデータの範囲を指定(ここにデータがあるとします)
refy = Reference(ws, min_col=4, min_row=4, max_col=4, max_row=23)

# グラフシリーズを生成
series = Series(refy, title='凡例タイトル')

# Chart
chart = LineChart()
chart.title = '折れ線グラフ'
chart.x_axis.title = 'X軸のタイトル'
chart.y_axis.title = 'Y軸のタイトル'
chart.height = 10
chart.width = 20
chart.series.append(series)

# 生成したChartオブジェクトをシートの指定位置に追加
ws.add_chart(chart, 'A2') #A2セルのところにグラフが出来る

wb.save('test.xlsx')
wb.close()