自作アプリ2つめ 勤務表入力アプリ(挫折)

自作アプリケーション2作目は、
エクセルに勤務時間を記載するアプリケーションを途中まで作って挫折しました。

Tomcatが動かなくなりました。
Tomcatダウンロードしなおしても、エクリプスダウンロードしなおしても、新しいワークスペースで作ってもどうしても動かないので一時休止しました。。

構想:2時間
実装:3時間
環境構築にはまる:5時間以上
です。


実装できたところ:

  • GUIから働いた時間と日にちを選択
  • 日にちに対応するExcelのローを取得

  • Excelに必要事項を書き込む


ちょっと工夫したところ:

  • 日にちを毎回選択するのは面倒だと思うので、GUIを開いた日にちを自動的に選択するようにした。
  • ファイルのパスや名前が変わることが予想されるので、外部のファイルから読み込むようにした。

f:id:isotai:20170321232403p:plain
うごけー!


以下、抜粋して紹介します。

HTML:

<form action="/Kinmu/Main" method="get">
日にち:
<select id="day" name="day">
<option value="1">1</option>
<option value="2">2</option>

始業:
<select name="start">
<option value="09:00" selected>09:00</option>
<option value="09:15">09:15</option>
//以下略

昼休み開始:
<select name="lunchstart">
<option value="12:00" selected>12:00</option>
<option value="12:30">12:30</option>
//以下略


昼休み終了:
<select name="lunchend">
<option value="13:00" selected>13:00</option>
<option value="13:30">13:30</option>
//以下略

終業:
<select name="finish">
<option value="18:00" selected>18:00</option>
<option value="18:30">18:30</option>

//以下略

</form>

選択要素はformのselectで統一しています。日にちは

<input type="time">

でカレンダーから選ぶこともできたのですが、
取得できる値が年号から(2017xxxxx)で、今回は使いずらかったのでやめました。



ページを開いた時に、今日の日にちを選択状態にするところ。

JavaScriptで日にち取得して、該当の日にちの

<option value="1">1</option>

にselected を追加して

<option value="1" selected>1</option>

にします。

<script>
windows.onload = setDay;
function setDay(){
	var date = new Date();
	var day = date.getDate();
    document.getElementById('day').options[day-1].selected = true;
}
</script>

<body onLoad="setDay()" >


Main.java

                //エクセルファイルの名前とパスを取得します。
		GetFIlePath getfilepass = new GetFIlePath();
		 String worktablepass = getfilepass.getWorkTablePass();
		 System.out.println(worktablepass);

               // GUIから入力された日にちに対応した、エクセルのRawを取得
                 GetRawAndCell getrawandcell  = new GetRawAndCell();
		int wtRaw = getrawandcell.getWtRaw(Integer.parseInt(day));

ざっくりと省きましたが、Main.javaサーブレットです。
GUIから入力された値を受け取っていい感じに調整します。
GetFIlePathとGetRawAndCellメソッドだけ紹介します。


GetFIlePath.java

public class GetFIlePath {

	public String getWorkTablePass(){

		String worktablepass = null;

		try {

		BufferedReader br = new BufferedReader(new InputStreamReader
               (new FileInputStream("/Users/Documents/workspace/kinmu/filepass.txt"),"UTF-8"));

		worktablepass = br.readLine();
        br.close();

		}catch(IOException e){
			System.out.println(e);
		}
		return worktablepass;

	}
}

filepass.txtの一行目に記載してあるエクセルファイルのパスと名前を取得して返します。
ファイル名が変更になったらfilepass.txtを編集します。

文字コードを指定して読み込むには、FileInputStreamを使用する必要があるようで、
ファイル読み込むだけでFileInputStream,InputStreamReader,BufferedReader、メソッド3つも登場しています。



GetRawAndCell.java

public class GetRawAndCell {

	public int getWtRaw(int day){

		int wtRaw = 0;

		switch (day) {
		case 1:
			wtRaw = 13;
			break;
		case 2:
			wtRaw = 14;

               //以下略

GUIから入力された日にちに対応した、エクセルのRawを取得します。
1から31までの数字に対応する、エクセルのRAWを取得できるようにする必要があります。
最初はif分で書こうと思っていたのですが、こういうときはswitch文の方がわかりやすいですね!発見です。


その後GUIから入力された勤務時間などを、実際にエクセルファイルに書き込んで終わりです。

isotai.hatenablog.com


いろいろと他にもやりたいことがあったはあったのですが、
今はTomcatに立ち向かう気力がないので撤退です!