4
7

More than 1 year has passed since last update.

PythonでExcel操作(書き込み編)

Last updated at Posted at 2022-05-06

経緯

自社でプログラミングに興味を持っているい人向けに
馴染みのある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

スクリーンショット 2022-05-06 092145.jpg
今回使用する「Book_write.xlsx」ブックです。
※今回シートは「Sheet1」のみで中身も空になっています。

セルに書き込み

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

九九を書き込む

繰り返しでセルへの書き込みで九九を書き込みます。

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

読み込んだデータを別のブックに書き込む

最後に前回「PythonでExcel操作(読み込み編)」で使用した「Book_read.xlsx」を読み込んで
「Book_write.xlsx」に書き込む

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

参考文献

PythonでExcel、メール、webを自動化する本

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7