わかりやすい自動売買入門書販売し始めました!

【Pythonでお手軽実践】 めんどくさいExcel作業を自動化しよう!複数データを変更編

 

前回

【Pythonでお手軽実践】 めんどくさいExcel作業を自動化しよう!基本操作編

こんにちは、きちえです。

今回は前回に引き続きまして複数データの変更をやっていきます。

自動化するための前準備

実行環境は前回と同じですので、前回から来た方は飛ばしてしまいましょう!

実行環境

エラーが出た時に確認してください!

Python 3.6.3
Mac OS 10.13.3
pipインストール済

使用するモジュール

今回使用するライブラリは「openpyxl」です。

使ったことない方は以下のコードをターミナルでうってインストールしてください。

ターミナル
pip install openpyxl

 

今回使用するデータ

これからxlsxデータを扱うので以下のデータを元に説明していきます。
15ファイルほどあります。
データダウンロード:
https://drive.google.com/open?id=1Il4XpMBwLKHsQbK4360cgC6UXidb6TeK
データ内容:f:id:kichie_com:20180404152226p:plain

基本操作は以前の記事を参照して下さい。

openpyxlの使い方

複数のデータを読み込む

以前一つのファイルを読み込むことができたので今回は複数のファイルを読み込んでいきましょう。

ファイル構成は以下の通りです。
|
|- main.py
|_ data – data.xlsxが15ファイル

アルゴリズム

複数のファイルを読み込む場合、以前の読み込みから書き込みまでの動作を1ファイルごとに複数回行います。
データをダウンロードした方は15ファイルあるので、15回行うことになります。
ではまず、15ファイルがそれぞれに対して、処理を行うので、それぞれのファイルがどこにあるのかをプログラムで探していきましょう。

ファイルを探すプログラム

以下のプログラムは難易度が少し高いので、そのままコピペしてしまって構いません。

main.py

#ファイルを見つけるために必要なモジュール
import os

#変数の初期化
filePath = []

folder = "data"
#folder下のファイルとフォルダを検索
for root, dirs, files in os.walk(folder):
    for fname in files:
#        ファイルのパスを作成
        fnamePath = os.path.join(root, fname)
        #ファイル名に.xlsxという名前があったら
        if fnamePath.find(".xlsx") != -1:
#            filePathに追加
            print(".xlsxファイルがありました!場所: "+fnamePath)
            filePath.append(fnamePath)

if filePath == []:
    print("データがありません!")

print(filePath)
# 出力結果 -> 
['data/data.xlsx', 'data/data10.xlsx', 'data/data11.xlsx', 'data/data12.xlsx', 'data/data13.xlsx', 'data/data14.xlsx', 'data/data15.xlsx', 'data/data2.xlsx', 'data/data3.xlsx', 'data/data4.xlsx', 'data/data5.xlsx', 'data/data6.xlsx', 'data/data7.xlsx', 'data/data8.xlsx', 'data/data9.xlsx']

ファイルを探すことができました。

エラーが出たら確認

ここはエラーがが出やすいのでもしエラーが出てしまったら、ファイル構造がちゃんと以下の様になっているかを確認しましょう。

|
|- main.py
|_ data – data.xlsxが15ファイル

ではこのfilePathに保存されたデータファイルの居場所を使って探していきましょう。
ちなみにファイルの居場所のことを専門用語では「パス(path)」と言います。

filePathに保存されたパスを一つずつ取り出す。

filePathは配列データになっているので、これを一つづつ取り出します。

上のコードに書き足ていきましょう。

main.py

...

if filePath == []:
    print("データがありません!")

for path in filePath:
    print(path)
# 出力結果 -> 
#data/data.xlsx
#data/data2.xlsx
#data/data10.xlsx
#    ... 

これで一つづつ出力することができました。

ここまでの技術と前回の基本操作を組み合わせると大量のデータを変更することができます。

大量のデータを変更してみる

流れの確認

dataフォルダの下にあるファイルを検索してパスを保存。(今回は15個のファイル)
15ファイルそれぞれに対して、データの書き込み処理を行う。

実際のプログラム

このコードは今回のコードと、前回の記事のコードを少し変えて書いたものなので、変更した部分にコメントを入れてあります。

main.py

import openpyxl as px
import os


#変数の初期化
filePath = []
folder = "data"
#folder下のファイルとフォルダを検索
for root, dirs, files in os.walk(folder):
    for fname in files:
#        ファイルのパスを作成
        fnamePath = os.path.join(root, fname)
        #ファイル名に.xlsxという名前があったら
        if fnamePath.find(".xlsx") != -1:
#            filePathに追加
            print(".xlsxファイルがありました!場所: "+fnamePath)
            filePath.append(fnamePath)

if filePath == []:
    print("データがありません!")

#それぞれのパスを取り出してそのファイルを編集して保存
for path in filePath:
    print(path)
    wb = px.load_workbook(path)  ##ここを変更
    #1番最初のシートを読み込む
    sheetName = wb.sheetnames[0]
    print("■読み込みシート名: "+sheetName)
    sheet = wb[sheetName]
    #値を書き換えて
    sheet["B1"].value = "株式会社パイソン" ##ここを変更
    #データを保存
    wb.save(path) ##ここを変更

これで実行すると全てのファイルのB1のセルの値が書き換わっています。
f:id:kichie_com:20180404160531p:plain

以上です!

もっと知りたい

もっと知りたい方は以下のサイトが非常に参考になります!
pythonのopenpyxlの使い方メモ – Qiita
Python openpyxlでExcelを操作 – Qiita

楽して仕事をしたい方向けの本の紹介

このようなエクセルなどなるべく楽して仕事をこなしたい方には以下の本がオススメです。

タイトルの通り、様々なPythonの使い方が載っています。

私もこの本は何回も読み返していて、「仕事が早いね」とよく言われるようになったので、ぜひオススメしたい1冊です。

相変わらずオライリーはでかいので、電子書籍の方がいつでも読めるのでおすすめです。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)