2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Python】data_only=True で、値を転記する。

Last updated at Posted at 2021-02-10

pythonを使用してExcelファイルの操作を勉強しています。
本日の気づき(復習)は、値の転記に関してです。
pythonでExcelを操作するため、openpyxlというパッケージを使用しています。

以下のような
〇〇市、△△市・・・と地区ごとの平均時給の台帳を作りたいとします。
平均時給は計算式で表しています。
image.png

余談:「#DIV/0!」対策

image.png

ちなみになのですが、こちらのように何も入力していなかったりすると「#DIV/0!」と表示されてしまうことがないでしょうか。
この表示、「0」で割ってますよって意味でして地味に嫌いです・・・。
対策としては

=IFERROR(計算式,"")

と書いてあげると・・・。
image.png

このような感じで、表示が消えてくれます。個人的にすっきりです!

cell.value属性

cell(行番号,列番号).value

cell(1,1) == ws['A1']
cell(5,10) == ws['J5']

1始まりでセルの番地を設定できます。
繰り返し処理で、行や列をずらしていくときに重宝してくれそうです。

lord_workbook関数で、data_only=Trueを指定する。

今回の問題は、数式ではなく計算結果の値を読み込みたいことなので

lord_workbook(ファイル, data_only=True)

上記のように記述してあげると計算結果の値を読み込んでくれます。
ただ、そのままWorkbook.saveとかで保存してしまうと数式も消してしまうので
別のブックに転記するなりして、上書きしないように注意が必要です。

cell.number_formatで書式設定をコピー

こちらは地味なところなのですが、時給の平均値なのでセルの書式設定も通貨です。
やっぱりここは書式設定もコピーしたいですね!
こちらはセルのnumber_fomat属性で取得できます。

cell.number_format

これらをふまえて、記述してみると

read_cell.py
from pathlib import Path
from openpyxl import load_workbook, Workbook

wb_new = Workbook()
ws_new = wb_new.active
ws_new.title = '台帳'
ws_new.column_dimensions['A'].width = 20

path = Path('../地区別平均時給')
for i, file in enumerate(path.glob('*.xlsx')):
    wb = load_workbook(file, data_only=True)
    ws = wb['チェックリスト']

    row_no = i + 1
    # セルD23を転記
    ws_new.cell(row_no, 1).value = ws['D23'].value
    # セルL23を転記
    ws_new.cell(row_no, 2).value = ws['L23'].value
    # セルL23の表示設定をコピー
    ws_new.cell(row_no, 2).number_format = ws['L23'].number_format

wb_new.save('平均時給一覧.xlsx')

となりました。
個人的には大事なところを勉強できたとウハウハしています。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?