目次
毎日の記録表の印刷を自動化する方法
なぜ、自動化したいのか?(目的)
「農業」や「養殖」で栽培や育成管理をしていると毎日記録表をつけます。
そして、必要なデータ取得し、積み重ねていくことで
育成管理の精度を高めていきます。
しかし、毎日の記録作業は大変です。
そのため、少しでも自動化できることは自動化して作業の労力を減らしたいです!!
どのようなことをしたいのか?
パソコンが毎日指定の時間に指定のエクセルファイルを
勝手に印刷してくれるようにします。
これによって毎朝パソコンでエクセルファイルを開いて
印刷する手間がなくなります。
今回はこれだけです。
どうやって自動化するのか?
自動化するための流れは下記の通りです。
①Windowsのタスクスケジューラがバッチファイルを起動。
②pythonファイルが起動。
③pythonがエクセルファイルを開き、印刷をする。
「印刷自動化」の詳細方法解説
バッチファイルの作成
まずは「バッチファイル」を作成します。
「バッチファイル」とはコマンドを記述したテキストファイルのことです。
拡張子が「.bat」であるため、BATファイルとも呼ばれます。
コマンドプロンプトでの作業をあらかじめバッチファイルにしてプログラムしておき、
Windowsのパソコンでこのファイルを起動させると自動で実行させることができます。
今回作成するバッチファイルの役割は下記の2つです。
1.開きたいファイルの入っているフォルダーのところに行く。
2.起動させたいプログラムを指定し、ファイルを開く。
コードサンプルは下記の通りです。
(※バッチファイル上では「\」は「¥」にします。)
ファイル名:print.bat
- #↓これで目的のファイルまで移動。
- cd C:\Users\◯◯\Desktop\◯◯◯
- #もし、サーバー上の共有ファイルの場所を指定したい場合は↓
- pushd\\ここにIPアドレス\ここにファイル名
- #↓pytonを起動させて、動かしたいプログラムファイルを指定。
- python ◯◯◯.py
- #↓これで処理終わり。
- exit()
pythonファイルの作成
自動印刷の作業を実行するpythonのファイルを作成します。
(※python自体のインストールは事前に済ませておいてください。)
今回このpythonファイルでやりたいことは下記の通りです。
・各種ライブラリをインポート
・pythonファイルと同じフォルダーにあるエクセルファイルを指定
・いつも使っているプリンターで印刷
コードのサンプルは下記の通りです。
ファイル名:printsheet.py
- # ↓OSの機能を使うための各種ライブラリをインポート
- import os.path
- import time
- import win32api
- import win32print
- # ↓エクセルを扱うためのライブラリをインポート
- import openpyxl
- #↓実行したいエクセルファイル
- conf_file_path = ‘◯◯.xlsx’
- # ↓印刷する関数 win32api.ShellExecuteを使用して
- # 通常使うプリンターから出力する
- def PrintOut():
- win32api.ShellExecute(
- 0,
- “print”,
- conf_file_path,
- ‘/c:”%s”‘ % win32print.GetDefaultPrinter(),
- “.”,
- 0
- )
- #↓上で定義したプリントアウト関数を実行
- PrintOut()
- #↓ワークブックを閉じる
- wb.close()
- #↓実行されましたと表示させる。
- print(‘実行されました’)
- #↓処理を停止
- time.sleep(1)
タイムスケジューラーの設定
ここまでで「バッチファイル」と「Pythonファイル」が用意できました。
あとは、これを設定した時間に起動するだけです。
そのためには「タイムスケジューラー」を使用します。
これはWindowsのパソコンにはもともと入っており、
指定の時間でプロクラムを動かすことができます。
タスクスケジューラーの「基本タスクの設定」で作成したバッチファイルを
希望の時間で起動するようにセットすれば完了です。
まとめ
今回はエクセルファイルを毎日決まった時間に印刷できるようになりました。
エクセルにTODAY関数などを設定しておけば、印刷した日の日付で印刷してくれます。
エクセルとpythonの組み合わせによって現場で役に立つツールはまだまだ構築できそうです。
例えば、天気の自動取得や育成管理値の自動警報システムなどです。
引き続き新たに構築したシステムについての情報は更新していく予定です。