Excel X Python最速仕事術の仕事術

## VBAの時代は終わったらしい

最近「Excel X Python最速仕事術」という本が2019年12月末時点で売れていてAmazonの表計算の書籍ランキングなどで1位を獲得しています。あのExcel最強の教科書より売れているのだからすごいです！(表計算のカテゴリはかなり人気があるカテゴリです)
[Amazonリンク](https://www.amazon.co.jp/gp/bestsellers/books/502742/ref=zg_b_bs_502742_1)

その最速仕事術っていったいどういったものかというと**PythonからExcelのVBAみたいなことをする**というのがこの本の核心です。今回は自分の学びのため、この本から学んだPythonからExcelっブックを操作してVBAっぽいことをする方法を紹介させていただきます。

この本では一貫して[**openpyxl**](https://openpyxl.readthedocs.io/en/stable/)というライブラリを使用しExcel操作をしています。

##ワークブックを読み込む。(新規のワークブック)

```python
import openpyxl
lwb = openpyxl.Workbook()
lsh = lwb.active #セルへの書き込みのためにシートを読み込む
```
##既に作成されているExcelを読み込む

```python
import openpyxl
wb = openpyxl.load_workbook('ファイル名.xlsx')
```

##ドキュメントを保存する

```python
import openpyxl
wb = openpyxl.load_workbook('ファイル名.xlsx')
wb.save(filename = 'sample_book.xlsx')
```

##セルに書き込む

```python
import openpyxl
lwb = openpyxl.Workbook()
lsh = lwb.active #セルへの書き込みのためにシートを読み込む
lsh.cell(行数,列数).value = "hogehoge"
```

##チャートを使う(ラインチャート)

引用元のコードを載せておきます
[引用元のリンク](https://openpyxl.readthedocs.io/en/stable/charts/line.html)

```python
from datetime import date

from openpyxl import Workbook
from openpyxl.chart import (
    LineChart,
    Reference,
)
from openpyxl.chart.axis import DateAxis

wb = Workbook()
ws = wb.active

rows = [
    ['Date', 'Batch 1', 'Batch 2', 'Batch 3'],
    [date(2015,9, 1), 40, 30, 25],
    [date(2015,9, 2), 40, 25, 30],
    [date(2015,9, 3), 50, 30, 45],
    [date(2015,9, 4), 30, 25, 40],
    [date(2015,9, 5), 25, 35, 30],
    [date(2015,9, 6), 20, 40, 35],
]

for row in rows:
    ws.append(row)

c1 = LineChart()
c1.title = "Line Chart"
c1.style = 13
c1.y_axis.title = 'Size'
c1.x_axis.title = 'Test Number'

data = Reference(ws, min_col=2, min_row=1, max_col=4, max_row=7)
c1.add_data(data, titles_from_data=True)

# Style the lines
s1 = c1.series[0]
s1.marker.symbol = "triangle"
s1.marker.graphicalProperties.solidFill = "FF0000" # Marker filling
s1.marker.graphicalProperties.line.solidFill = "FF0000" # Marker outline

s1.graphicalProperties.line.noFill = True

s2 = c1.series[1]
s2.graphicalProperties.line.solidFill = "00AAAA"
s2.graphicalProperties.line.dashStyle = "sysDot"
s2.graphicalProperties.line.width = 100050 # width in EMUs

s2 = c1.series[2]
s2.smooth = True # Make the line smooth

ws.add_chart(c1, "A10")

from copy import deepcopy
stacked = deepcopy(c1)
stacked.grouping = "stacked"
stacked.title = "Stacked Line Chart"
ws.add_chart(stacked, "A27")

percent_stacked = deepcopy(c1)
percent_stacked.grouping = "percentStacked"
percent_stacked.title = "Percent Stacked Line Chart"
ws.add_chart(percent_stacked, "A44")

# Chart with date axis
c2 = LineChart()
c2.title = "Date Axis"
c2.style = 12
c2.y_axis.title = "Size"
c2.y_axis.crossAx = 500
c2.x_axis = DateAxis(crossAx=100)
c2.x_axis.number_format = 'd-mmm'
c2.x_axis.majorTimeUnit = "days"
c2.x_axis.title = "Date"

c2.add_data(data, titles_from_data=True)
dates = Reference(ws, min_col=1, min_row=2, max_row=7)
c2.set_categories(dates)

ws.add_chart(c2, "A61")

wb.save("line.xlsx")
```


##複数のExcelを読み込む

```python
import openpyxl
import pathlib
path = pathlib.Path('ディレクトリ名/')
for path_obj in path.iterdir():
    wb = openpyxl.load_workbook('ファイル名.xlsx')
    for sh in wb:
        #シートごとの操作
```


##更新履歴
- 2019/12/30 新規作成