50歳から自分の好きな職業に簡単に転職できるの? ここは「がっちゃん 」が実際に体験した転職への道を記録するブログである

PythonでExcelデータを操作する

どうも! 職業訓練生のがっちゃんです!

 50歳にして長期人材育成「情報セキュリティ管理者資格」2年コースを絶賛受講中です!

 今回は、授業で習った「Python3系」プログラミングでExcelのデータ操作方法について書いていきたいと思います。

 エクセルのファイルを見比べて、特定のセルを見つけないといけない、ファイル同士でコピー&ペーストを地道に繰り返し行う時など、退屈な作業をPythonで自動化する時に役立つそうです。

 プログラミングで使用しているソフトは「Pycharm Community」を使っています。インストール、使い方については以下のブログをご参考にしていただければと思います。

Excel操作に必要な環境設定から

 「Pycharm Community」というソフトを中心に設定方法を書いていきます。「Excel」データを操作するには「openpyxl」というライブラリが必要になります。まずはプロジェクトの新規作成から始めます。「ファイル」→「新規プロジェクト」を選択します。

 ※「Pycharm Cpmmunity」では、プロジェクトごとに仮想環境を管理しています。今回はExcelデータが操作できる仮想環境を設定していきます。

 「プロジェクトの作成」画面の「ロケーション」(プロジェクト名)は自由な名前に設定してください。私は「excel」にしました。「次の環境を使用」欄を「Conda」に設定してください。あとは「作成」ボタンをクリックすればOKです。

 MacOSをご利用の方は、「Conda実行可能ファイル」がデフォルト表示されないと思います。その場合は、以下のファイルを指定するようにしてください。

 WindowsPCを使われている方は画面右下に、以下のようなメッセージが出るので「修復」をクリックしてください。その後のウインドウでは「自動で構成」をクリックしてください。

 最後にこんなメッセージが出てくればOKです。

 ターミナル画面を開いて、いつもは「venv」という表示が「excel」になっていればOKです。 

プロジェクトができたら次は「設定」です。「ファイル」→「設定(Macの場合は新規プロジェクトの設定)」→「プロジェクト・インタープリター」を選択し、以下の画面を表示させます。

 画面右側にある「+」をクリックして「使用可能なパッケージ」ウインドウから「openpyxl」を選択します。

※一覧から「openpyxl」が見つからない場合は検索窓に「open」と入力するとすぐに見つかります。「openpyxl」を選択したら画面下の「パッケージのインストール」をクリックします。

 インストールが無事完了すれば、パッケージの一覧に「openpyxl」が追加されていることが確認できます。

※どうしてもここでパッケージがインストールできないことがあります。私の場合でも、Mac環境では「openpyxl」パッケージが見つからずインストールできませんでした。しかし、プログラムに「import openpyxl」と書くと波線が出てきます。そこにマウスを合わせると「openpyxlのインポート」と表示され、そこからインストールをすることができました。ここでインストールできない場合は、このように実行してみてください。

エクセルのデータの読み込み:px.load_workbook()

 まずはエクセルで以下のような「osakaweather」ファイルを作成します。作るのが面倒な人は、以下から私の作成したデータをダウンロードしてください。

 作成したファイルは今回作成した「excel」プロジェクト直下に置いてください。

シート名を取ってくる

 次に「read.py」を作成します。プログラムは以下のとおりです。

 実行結果は以下のとおりです。キチンとシート名が表示されていればOKです。

 シート名を以下のように変更して、再度実行してみると、シートをリストとして取ってきていることがわかります。ということは、for文でループさせれば、シートをリストで取れることがわかります。

シートのデータを取ってくる

 次はシート内のデータを抜き取ります。プログラムを以下のように修正します。

 実行結果は以下のとおりになります。各行ごとの値をタプル(丸カッコ)で取ってきています。

 各セルごとの値を取り出すには以下のようにプログラムを修正します。

 実行結果は以下のとおりです。

新規にエクセルファイルを作成する:px.Workbook()

 Pythonプログラム「create.py」を作成して、新規にエクセルのファイルを作成します。今回は授業の担当先生と授業内容が書かれた「schedule」という名前のファイルを作成していきます。新規にエクセルファイルを作成するには「px.Workbook()」メソッドを使用します。WorkbookのWは大文字ですのでご注意ください。

 「create.py」プログラムを実行して出来上がった「schedule.xlsx」ファイルが「excelプロジェクト」直下にできているのがわかりますね。内容もこんな感じで出来上がりました。

シートを追加する:workbook.create_sheet()

 「mix1.py」プログラムを作成し、先ほど作成した「schedule.xlsx」ファイルに「2020-09_授業予定」というシートを追加してみます。

 実行した結果、以下のようにシートが追加されました。

 実行して以下のような「PermissionError」が出た場合は、保存先であるエクセルファイルが開かれていることが原因です。エクセルで開いたままになっていませんか?開いたままならファイルを閉じて再度実行してみましょう。

ファイル同士の結合:os.path.join()

 複数のエクセルファイルを一つのファイルにまとめます。テキストファイルやWordファイルはまとめません。エクセルだいるだけを結合させることができます。

 「excelプロジェクト」直下に「excels」というフォルダを新規作成します。エクセルファイルを数個作成、その他にテキストファイルやWordファイルも作成して「excels」フォルダに入れて準備します。ファイルの準備が面倒な方は、以下のファイルをダウンロードしてお使いください。

・ファイル結合プログラムのためのサンプルファイルです。
「gundam.xlsx」
「sample.docx」
「sample2.rtf」
「seiseki.xlsx」
「syusyokukatudou.xlsx」

 準備ができたら、以下の「mix2.py」プログラムを作成していきましょう。

 出来上がった「mix2.py」プログラムを実行すると、「excels」フォルダ直下に、以下のような「mixfile.xlsx」が出来上がっています。また、エクセルのデータだけ一つのファイルにまとめられ、シート名は拡張子を抜いたファイル名で付けられていることが分かります。

 WindowsPC環境の方は、以下のように日付が変な数字表記になっているかもしれません。そんな時はセルの「表示形式」を「日付」に変更していただくとキチンとした日付で表示されるようになります。

BottleフレームワークでWeb入力フォームを作成する

 今までのエクセルのファイル操作と、「Bottle」フレームワークを使って書籍管理できる「Web入力フォーム」を作成していきます。以下、「Bottle」フレームワークについて、サイトからの引用です。

Bottle

公式サイト:https://bottlepy.org/docs/dev/

 Bottleはとにかく動作が早くシンプルなWeb アプリケーションを作成するためのフレームワークです。

 Bottleは「bottle.py」という1つのファイルだけで構成されており機能は少ないですがシンプルで軽量のため小規模なアプリケーションを作成する用途に適しています。

 学習についても日本語での解説記事が豊富にインターネット上にあるので、Webフレームワークを使うこと自体が初めてという初心者には特にオススメです。

Python開発にフレームワークを利用するメリット

フレームワークを活用するメリットは3つです。

  • 開発の効率化
  • セキュアな開発
  • プログラミングルールの統一化

メリット1:開発の効率化

P ython開発にフレームワークを利用すると、多様なテンプレートやデバッグ機能などが使用可能になります。

 フレームワークを使わずに開発しようとすると、コードを1から書かなければいけません。そのため、システム完成までのステップが増え、バグが発生する可能性が高まります。

 一方フレームワークを導入する事でプログラマーが書かなければいけないコード量を抑えることができるため、開発にかかる時間を大幅に短縮する事ができます。さらにミスも少なくなり、トラブルがあった場合でも原因をすぐに特定しやすくなるので、ダウンタイムの時間を短くすることが可能です。

メリット2:セキュアな開発

 Pythonはビッグデータを扱うシステムや、WEBサービスの開発などに使われるため、高いセキュリティが求められます。

 フレームワークの中には、セキュリティ面で必要となる実装をサポートしているものがあります。フレームワークは、大切なシステムや情報を守るという役割も担っています。

メリット3:プログラミングルールの統一化

 システム開発の現場においては経験もスキルも異なる様々なプログラマーがプロジェクトに参加します。

 フレームワークを導入する事で大人数での開発でもルールに則ったコードの統一が可能になり、結果的に品質が高まり、保守性の高いシステムが完成しやすくなります。

Bottleフレームワークのインストール

 いつものように新規プロジェクトを作成します。設定は以下のようにしました。上記で作成した「excel」プロジェクトとプロジェクト名が違うだけで、そのほかの設定は同じです。

画面左下の「Pythonコンソール」から「Bottle」のインストールを実行します。以下のコマンドを実行してください。

 「ファイル」→「設定」→「プロジェクト・インタープリター」で「bottle」パッケージがあればインストールは成功です。

※どうしても「bottle」をインストールできない場合。私の場合、WindowsPCではすんなりインストールできたのですが、MacOSの「Pycharm Community」でインストールしようとしたのですが、全くインストールができませんでした。アチコチのサイトでインストール方法を調べ、試してみましたがことごとくダメでした。

 最後に実行して成功したのは「bottle.py」ファイルを引っ張ってきたことです。上の「Bottle」フレームワークの説明でも触れられていますが、「Bottleフレームワークは「Bottle.py」という一つのファイルだけで構成されている」と書かれています。そこで、「https://raw.githubusercontent.com/bottlepy/bottle/master/bottle.py」のソースをコピーしてプロジェクト直下に「bottle.py」として保存しました。

 すると「import bottle」が効くようになりました。どうしてもインストールできない場合は、これをお試しください。

テストページの作成:route,runモジュール

 まずは「app.py」プログラムを作成してブラウザに「テストページ」を表示させます。

 これを実行すると、以下のようなURLが示された実行結果が出てきます。そのURLをクリックすると・・・。

 こんなふうにブラウザに表示されました。

入力フォームの作成

 これでブラウザに表示されることが分かりましたので、実際に入力フォームを作成していきたいと思います。先ほど作成した「app.py」を以下のように修正します。

 今回は、「@route(‘/’)」を「@route(‘/index’)」に変更しています。プログラム実行後、表示されたURLに「/index」を足して実行してみると、以下のような画面表示にになります。内容を記入、また空欄のまま「送信」ボタンを押すと、以下のようなエラーが出てしまいます。

POST処理への対応:requestモジュール

 どうも許可されていないHTTPメソッド(POST)でアクセスしようとしたので「ページは渡せないよ」と言われちゃったみたいです。上記プログラムではget処理だけが許可されていて、post処理は許可されていない状態になっています。そこで、以下のようにpost処理にも許可が下りるように修正します。

 実行した結果、以下のようにエラーなく遷移できましたでしょうか。それに合わせて「書籍名」「著者名」「ページ数」がコンソールに表示されていればOKです。

エクセルファイルに書籍データを書き込めるようにする

 次は入力した書籍データをエクセルファイルに書き込めるようにします。前段の「openpyxl」パッケージをインストールしてから、以下、プログラムの修正をしてください。

 実行結果はこのとおり、「books.xlsx」が作成され、書籍データの登録もできました。

登録書籍の一覧表示画面を追加、HTML文は「views」フォルダに格納

 「books.xlsx」ファイルに登録された書籍データを一覧表示できるページを追加します。また、同一ファイルにHTML文が記載されているのがややこしいので、別ファイルにしてスッキリさせていきます。

 まずはプロジェクト直下に「views」フォルダを作成し「index.html」「result.html」ファイルを作成していきます。

 出来上がったら、「index.html」「result.html」にHTML文を移動させていきます。以下、それぞれのファイルの内容になります。

 以下が実行結果です。書籍の登録から登録した書籍の一覧表示、エクセルへのデータ記録、うまくいきましたね。

まとめ

 間違えずにプログラムできているはずなのに、なぜかうまくいかない・・・。そんな人はいませんか?私もそうですが、入力支援機能を使ってプログラム組んでいれば、よほどでないとプログラムの記述ミスの可能性は少ないです。一番大切なのは、プログラムを少しずつ書いては、「ここまでのプログラミングはキチンと動くかな?」と確認することです。幸いなことにPythonはインタープリター式で、プログラムを上から順々に実行してくれます。途中まで書いては「print文」でデータの動きや出力などを確認してみましょう。そして最後にインデントの間違いはないか!?を確認すればたいていはミスを防げるはずです。

 私は今回このプログラム作成で急いだあまり最後の最後は、あれとこれと一緒にやっちゃえ!ってしたものだから、プログラムミスをしてしまい、どこで間違えたのかを探すのが大変でした。基本を守ることは大切なことですね。

 また、今回はパソコンのOSによって、プログラミングの環境が大きく変わることが分かり、大変勉強になりました。就職先がどんなOS環境なのか!?って分かるわけもなく、いろんなOS環境で経験しておくことも大切だなぁ、とつくづく思いました。

 失敗することでいろんなことが学べたことも、自分のスキルアップに役立ちました。

それでは本日も最後までお付き合いいただき、ありがとうございました!

 

スポンサーリンク
最新情報をチェックしよう!