Gilja's logs of the struggles with programming

シン母駆け出しエンジニアの奮闘記

Python DAY3-2:Excelデータ取得サンプルコード解読

Windowsにインストール

手にした「ExcelPython最速仕事術」に沿って、

Windows10にインストールしてみた!

公式リファにもあった通り、

そもそもインストールしなくても使用できるそうですが無視。

ほんでインストールするにしても、

pyenv無くてよい、のだから時短しようぜ!!

インストールも、

コマンドラインじゃなくて

インストーラーDLで秒じゃん、秒!!

まあすべては結果論さ。

pyenvとにらめっこできたおかげで

こうして学習意欲の火が再燃したのだから。

たかが、

時間が1/6になっただけよ。。。泣

サンプルファイルDL

早速見せつけられたサンプルコード

Excel形式の伝票からデータを一覧形式で取得しcsvファイルに書き起こすというシナリオ

まぁ解説なくともある程度読むことはできたよね

VBAやってるから似てるところはすっと入ってくるか

やはりPythonのほうが扱いやすい印象ではあるなーっ

読めてもかけなきゃ意味ないやい!!

# ライブラリをインポート
# ここでは3種のライブラリを使用
import pathlib
#標準ライブラリで、pathをオブジェクト化できる優れもの

import openpyxl
#外部ライブラリ  Excelを扱うライブラリは複数あるがより機能豊富なものらしい

import csv
#csvにはきだすための標準ライブラリ

はい続きまして、処理についてのメモ

# pathオブジェクト作成
path = pathlib.Path("フォルダパス")

# 新しいファイルwbオブジェクトを作成
wb = openpyxl.Workbook()
# shオブジェクトの取得方法
sh = wb.active

# for文にてpath(フォルダ)オブジェクトのTIPS
for path_obj in path.iterdir():
# iterdir()メソッドでpathオブジェクト配下のパスを順番に取り出せる

# ファイルパスを拡張子フィルタ検索
if path_obj.match("*.xlsx"):

# ファイルパスを指定してオブジェクトwbに読み込む
wb = openpyxl.load_workbook(パスオブジェクト)

# wbオブジェクトの全てのshに対するfor文がVBAより簡単
for sh in wb:

# 「セルの値がなければ」は、
# VBA: sh.Cells(1, 1).Value = "" 等で表す
# Pythonでは、
sh.cell(1, 1).value != None

# csvに書き出すところが少し慣れが必要かも
with open("書き出すパス", "w", encoding="utf_8_sig") as fp:
# "w": 書き込み、"utf_8_sig":BOM付きUTF-8
# withから始めると、終了後自動で閉じてくれる
# fp は「ファイルポインタ」 csv.writerで書き込めるもの(?)
    writer = csv.writer(fp, lineterminator="\n")
# 行終わりを改行コードを指定してファイルポインタ書込かな

# ここでまたもや優れた書き方
    for row in sh.rows: # 全行に対して繰り返し

# 1行ずつ書き込む記述をリスト内包表記とやらで記述
        writer.writerow([col.value for col in row])
# 多分、「1行のうちの列数分の要素をもつリストで、要素はその列の値」という意味なんだろう…

さすがに転記部分はVBAとほぼ同じなので無視

Cellsがcellなだけですたい

最後は少し難読だなー…

慣れだな、うん慣れ!

明日は外部ライブラリをインストールしてみようの巻!