経緯
自社でプログラミングに興味を持っているい人向けに
馴染みのあるExcelの操作で触れることができるように書いてみようと思いました!
今回はPythonを用いたExcelへの書き込みについて書きました。
なお使用するモノ、環境、ブックの取得、シートの取得等については
前回の記事PythonでExcel操作(読み込み編)をご参照ください
フォルダ階層
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
今回使用する「Book_write.xlsx」ブックです。
※今回シートは「Sheet1」のみで中身も空になっています。
セルに書き込み
# 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 = ???」で
代入することによって書き込むことができる
九九を書き込む
繰り返しでセルへの書き込みで九九を書き込みます。
# 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")
読み込んだデータを別のブックに書き込む
最後に前回「PythonでExcel操作(読み込み編)」で使用した「Book_read.xlsx」を読み込んで
「Book_write.xlsx」に書き込む
# 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」にリストの件数繰り返し書き込むようにしてみました
(※読み込み方法、書き込み方法模索中)