PythonでExcel操作（書き込み編）

# 経緯
自社でプログラミングに興味を持っているい人向けに
馴染みのあるExcelの操作で触れることができるように書いてみようと思いました！
今回はPythonを用いたExcelへの書き込みについて書きました。
なお使用するモノ、環境、ブックの取得、シートの取得等については
前回の記事[PythonでExcel操作（読み込み編）](https://qiita.com/adgjmptw0/items/e21bef0e773fc0e3e47f)をご参照ください
### フォルダ階層
```
execel-controller/
　├ excel_read.py
　└ Books/
　 　└ Book_read.xlsx
　 　└ Book_write.xlsx
```
### 実行方法
```
cd C:\???\execel-controller
```
実行する際にはPythonファイルが置いてあるexecel-controllerフォルダに移動
```
python excel_write.py
```
コマンドプロンプトで実行する際は
「python [実行するpythonファイル名].py」
で実行できる。
今回は「excel_write.py」の中身を変更して実行していく。
# Book_write.xlsx
![スクリーンショット 2022-05-06 092145.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/17369dff-a7e8-34eb-2f37-6d983286f34f.jpeg)
今回使用する「Book_write.xlsx」ブックです。
※今回シートは「Sheet1」のみで中身も空になっています。
### セルに書き込み
```Python:excel_write.py
# openpyxlをimport
import openpyxl

# 書き込むセルを取得
# ブックを変数に格納
write_wb = openpyxl.load_workbook("Books/Book_write.xlsx")
# シートを変数に名前で格納
write_ws = write_wb["Sheet1"]
# cはセル番地でA1のセルを取得する
c = write_ws["A1"]
# c2は行列番号でA2のセルを取得する
c2 = write_ws.cell(1, 2)
# 変数cにvalueを付けて値を設定する
c.value = "A1です"
c2.value = "B1です"

# Book_write.xlsxに上書保存
write_wb.save("Books/Book_write.xlsx")
```
Excelに書き込むためにはセルを取得し「セルを格納した変数.value = ???」で
代入することによって書き込むことができる

実行結果
![スクリーンショット 2022-05-06 092846.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/a6edd2d0-61c5-ba35-0bb9-2636ed74566f.jpeg)
### 九九を書き込む
繰り返しでセルへの書き込みで九九を書き込みます。
```Python:excel_write.py
# openpyxlをimport
import openpyxl

# 九九を書き込む
# ブックを変数に格納
write_wb = openpyxl.load_workbook("Books/Book_write.xlsx")
# シートを変数に名前で格納
write_ws = write_wb["Sheet1"]
# for分の入れ子で九九を書き込む
# 1行目から10行目まで繰り返す
for i in range(1, 10):
  # 1列目から10列目まで繰り返す
  for j in range(1, 10):
    # 取得したセルの行列番号をかけあわせて代入する
    write_ws.cell(row=i, column=j, value=i * j)

# Book_write.xlsxに上書保存
write_wb.save("Books/Book_write.xlsx")
```
実行結果
![スクリーンショット 2022-05-06 100014.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/083d3c94-c3bd-e4d1-5d8f-d81e52c3816f.jpeg)
### 読み込んだデータを別のブックに書き込む
最後に前回「[PythonでExcel操作（読み込み編）](https://qiita.com/adgjmptw0/items/e21bef0e773fc0e3e47f)」で使用した「Book_read.xlsx」を読み込んで
「Book_write.xlsx」に書き込む
```Python:excel_write.py
# openpyxlをimport
import openpyxl

# Book_read.xlsxを1行ずつ読み込む
# セルの値(中身)を取得する
# ブックを変数に格納
read_wb = openpyxl.load_workbook("Books/Book_read.xlsx")
# シートを変数に名前で格納
read_ws = read_wb["Sheet1"]
# 行毎のデータを格納するリストを
row_list = []
# for分で1行づつ読み取り行リストに格納する
for row in read_ws.iter_rows(min_row=1, min_col=1):
    # 空のリストを作成
    value_list = []
    # 1行分のデータをリストに格納する。
    for c in row:
        value_list.append(c.value)
    # データリストを行リストに格納
    row_list.append(value_list)

# 読み込んだリストをリストを書き込む
# ブックを変数に格納
write_wb = openpyxl.load_workbook("Books/Book_write.xlsx")
# シートを変数に名前で格納
write_ws = write_wb["Sheet1"]
# 書き込みを開始する行番号
row_num = 1

#  読み取ったデータをBook_write.xlsxに書き込む
for row in row_list:
    c1 = write_ws["A" + str(row_num)]
    c1.value = row[0]
    c2 = write_ws["B" + str(row_num)]
    c2.value = row[1]
    c3 = write_ws["C" + str(row_num)]
    c3.value = row[2]
    c4 = write_ws["D" + str(row_num)]
    c4.value = row[3]
    # 1行進む
    row_num = row_num + 1

# Book_write.xlsxに上書保存
write_wb.save("Books/Book_write.xlsx")
```
「Book_read.xlsx」を1行づつ読み込みリストに格納して
「Book_write.xlsx」にリストの件数繰り返し書き込むようにしてみました
（※読み込み方法、書き込み方法模索中）

実行結果
![スクリーンショット 2022-05-06 103345.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/72e85ed0-0550-2b92-a1ce-ce2976fad61a.jpeg)

https://qiita.com/adgjmptw0/items/afbf2a0c26e993249ae2

# 参考文献
・[PythonでExcel、メール、webを自動化する本](https://www.amazon.co.jp/Python%E3%81%A7Excel%E3%80%81%E3%83%A1%E3%83%BC%E3%83%AB%E3%80%81Web%E3%82%92%E8%87%AA%E5%8B%95%E5%8C%96%E3%81%99%E3%82%8B%E6%9C%AC-%E4%B8%AD%E5%B6%8B%E8%8B%B1%E5%8B%9D/dp/4815606390)