前回
【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
データ内容:
基本操作は以前の記事を参照して下さい。
openpyxlの使い方
複数のデータを読み込む
以前一つのファイルを読み込むことができたので今回は複数のファイルを読み込んでいきましょう。
ファイル構成は以下の通りです。
|
|- main.py
|_ data – data.xlsxが15ファイル
アルゴリズム
複数のファイルを読み込む場合、以前の読み込みから書き込みまでの動作を1ファイルごとに複数回行います。
データをダウンロードした方は15ファイルあるので、15回行うことになります。
ではまず、15ファイルがそれぞれに対して、処理を行うので、それぞれのファイルがどこにあるのかをプログラムで探していきましょう。
ファイルを探すプログラム
以下のプログラムは難易度が少し高いので、そのままコピペしてしまって構いません。
#ファイルを見つけるために必要なモジュール
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は配列データになっているので、これを一つづつ取り出します。
上のコードに書き足ていきましょう。
...
if filePath == []:
print("データがありません!")
for path in filePath:
print(path)
# 出力結果 ->
#data/data.xlsx
#data/data2.xlsx
#data/data10.xlsx
# ...
これで一つづつ出力することができました。
ここまでの技術と前回の基本操作を組み合わせると大量のデータを変更することができます。
大量のデータを変更してみる
流れの確認
dataフォルダの下にあるファイルを検索してパスを保存。(今回は15個のファイル)
15ファイルそれぞれに対して、データの書き込み処理を行う。
実際のプログラム
このコードは今回のコードと、前回の記事のコードを少し変えて書いたものなので、変更した部分にコメントを入れてあります。
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のセルの値が書き換わっています。
以上です!
もっと知りたい
もっと知りたい方は以下のサイトが非常に参考になります!
pythonのopenpyxlの使い方メモ – Qiita
Python openpyxlでExcelを操作 – Qiita
楽して仕事をしたい方向けの本の紹介
このようなエクセルなどなるべく楽して仕事をこなしたい方には以下の本がオススメです。
タイトルの通り、様々なPythonの使い方が載っています。
私もこの本は何回も読み返していて、「仕事が早いね」とよく言われるようになったので、ぜひオススメしたい1冊です。
相変わらずオライリーはでかいので、電子書籍の方がいつでも読めるのでおすすめです。
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
コメントを残す