OpenPyXlのチートシート

OpenPyXlの基本操作をまとめてみた。

#####OpenPyXlでExcelファイルを開く

```
import openpyxl
wb = openpyxl.load_workbook('example.x‐lsx')
```

#####Workbookからシートを取得

```Python
my_sheetnames = wb.sheetnames # return list object
sheet = wb[my_sheetnames[0]] # sheet[0] for example
```

#####シート名を文字列として取得

```Python
my_titles = sheet.title
```

#####アクティブなシートを取得

```Python
anotherSheet = wb.active
```

#####シートからセルを取得

```Python
cell_A1 = sheet['A1']
```

#####セルから値を取得

```Python
cell_A1_value = sheet['A1'].value
```

#####セルから行列情報を取得

```Python
cell_A1_row = sheet['A1'].row
cell_A1_column = sheet['A1'].column
cell_A1_coordinate = sheet['A1'].coordinate
area_cells = sheet['A1':'C3'] #複数セル範囲を指定して取得
```

#####列の挿入

```Python
sheet.insert_rows(7)
```

#####セル範囲の移動（※セルは上書きされる）

```Python
sheet.move_range("D4:F10", rows=-1, cols=2)
```

#####グラフの作成

```Python
import openpyxl.chart #OpenPyXlからChartをインポート
wb_chart = openpyxl.Workbook() #ワークブックを指定
sheet_chart = wb_chart.active #アクティブなシートを指定
for i in range(1, 11): 
sheet_chart['A' + str(i)] = i
refObj = openpyxl.chart.Reference(sheet‐_chart, min_col=1, min_row=1, max_col=1, max_row=10) #グラフ範囲を指定
seriesObj = openpyxl.chart.Series(refObj, title='First series')
chartObj = openpyxl.chart.BarChart() #棒グラフを指定
chartObj.title = 'My Chart' #グラフタイトルを指定
chartObj.append(seriesObj) #グラフを追加
sheet_chart.add_chart(chartObj, 'C5') #C5セルにグラフを追加
wb_chart.save('sampleChart.xlsx') #名前を付けてグラフを保存
```

#####行列を指定してセルを取得

```Python
cell_B1 = sheet.cell(row=1, column=2)
#.valueを付加することでセルの値を取得
```

#####列の最大値を取得

```Python
sheet_max_row = sheet.max_row
```

#####行の最大値を取得

```Python
sheet_max_column = sheet.max_column
```

#####行列を変換

```Python
from openpyxl.utils import get_column_l‐etter,　column_index_from_string #行列変換用ライブラリを取得
col_letter = get_column_letter(1)
col_max_letter = get_column_letter(she‐et.max_column)
index_letter = column_index_from_string‐('A') #Aの数値を取得
```

#####セルの結合および結合解除

```Python
wb_merge = openpyxl.Workbook()
sheet_merge = wb_merge.active
sheet_merge.merge_cells('A1:D3')
```

#####結合したセルに数値を設定

```Python
sheet_merge[‘A1’] = 'Twelve cells merged together.'
sheet_merge.merge_cells('C5:D5')
sheet_merge['C5'] = 'Two merged cells.'
wb_merge.save('merged.xlsx')
```

#####結合したセルを解除

```Python
wb_unmerge = openpyxl.load_workbook('‐merged.xlsx')
sheet_unmerge = wb_unmerge.active
sheet_unmerge.unmerge_cells('A1:D3')
sheet_unmerge.unmerge_cells('C5:D5')
wb_unmerge.save('unmerged.xlsx')
```

#####シートの作成・削除

```Python
wb_new.create_sheet() #シートを新規追加
wb_new.create_sheet(index=0, title='Firstsheet') #指定の場所にシートを新規追加
wb_new.create_sheet(index=2, title='Middle sheet') #指定の場所(index2)に名前を付けてシートを追加
del wb_new['Middle sheet']
```

#####セルに文字列の代入

```Python
sheet_new['A1'] = 'Hello, world!'
print(sheet_new['A1'].value)
```

#####フォントの変更

```Python
from openpyxl.styles import Font
wb_style = openpyxl.Workbook()
sheet_style = wb_style['Sheet']
italic24Font = Font(size=24, italic=True, name=‘Calibri’) #フォント作成
sheet_style['A1'].font = italic24Font #フォントをA1セルに適用
sheet_style['A1'] = 'Hello, world!'
wb_style.save('styles.xlsx')
```

#####数式の導入

```Python
wb_formulas = openpyxl.Workbook()
sheet_formulas = wb_formulas.active
sheet_formulas['A1'] = 200
sheet_formulas['A2'] = 300
sheet_formulas['A3'] = '=SUM(A1:A2)' #数式を適用
wb_formulas.save('writeFormula.xlsx')
```

#####行列の高さ・幅を設定

```Python
wb_dimension = openpyxl.Workbook()
sheet_dimension = wb_dimension.active
sheet_dimension['A1'] = 'Tall row'
sheet_dimension['B2'] = 'Wide column'
sheet_dimension.row_dimensions[1].height = 70 #高さを指定
sheet_dimension.column_dimensions‐['B'].width = 20 #幅を指定
sheet_dimension.column_dimensions‐['C'].hidden = True #Cを非表示
wb_dimension.save('dimensions.xlsx')
```

#####セルの固定

```Python
wb_freeze = openpyxl.load_workbook('pro‐duceSales.xlsx')
sheet_freeze = wb_freeze.active
sheet_freeze.freeze_panes = 'A2' #A2セルより上を固定
wb_freeze.save('freezeExample.xlsx')
```

##参照元
openPyXL_cheatsheet Cheat Sheet by Dima via
https://cheatography.com/dima/cheat-sheets/openpyxl-cheatsheet/
openpyxl による Excelファイル操作方法のまとめ
https://gammasoft.jp/support/how-to-use-openpyxl-for-excel-file/
OpenPyXl公式（英語）
https://openpyxl.readthedocs.io/en/stable/

##参考
YouTubeで「Pythonを使った事務処理の効率化」というタイトルで、OpenPyXlを紹介。
<iframe width="560" height="315" src="https://www.youtube.com/embed/qtBend9uYCI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>