Sub Test() ' ' Test Macro ' ' 全シート分繰り返す。 ' ' 画面のチラつきの防止設定を行う。 Application.ScreenUpdating = False ' 全シート分繰り返す。 Dim Sht As Worksheet For Each Sht In Worksheets ' シートを選択する。 Sht.Select ' 処理を記述する。 Msg "test" Next Sht ' 画面のチラつきの防止設定を元に戻す。 Application.ScreenUpdating = True End Sub
【Excel】選択セルの行列と選択セルの最終行列
Sub Test() ' ' Test Macro ' ' 行列を求める。 ' ' 特定のセルを選択する。(i:行、j:列) ActiveSheet.Cells(i, j).Select ' 選択セルの行求める。 MsgBox ActiveCell.Row ' 選択セルの列を求める。 MsgBox Activecell.Column ' 選択セルの最終行を求める。 MsgBox ActiveSheet.Cells(i, j).End(xlDown).Row ' 選択セルの最終列を求める。 MsgBox ActiveSheet.Cells(i, j).End(xlToRight).Column End Sub
【bat】エビデンスの取得効率化
少しでもエビデンスの取得を効率化するために、
下記手順でテストを行うことを想定。
- 01_BEFORE_UT.batを実行(第1引数にフォルダ名(ケース番号)を指定)
- テスト実行
- 02_AFTER_UT.batを実行(第1引数にフォルダ名(ケース番号)を指定)
DBはDB2としています。
-
01_BAFORE_UT.bat
@ECHO OFF REM 実行時の第1引数にエビデンス用のフォルダ名(ケース番号)を指定してください。 REM コマンドプロンプトを立ち上げ、「db2cmd 01_BAFORE_UT.bat フォルダ名」で実行します。 REM ************************************************************* REM エビデンスフォルダ設定 REM ************************************************************* SET EVI_DIR=%1 SET SQL_OUTPUT=%EVI_DIR%\10_SQL_LOG_Before MKDIR %EVI_DIR% MKDIR %SQL_OUTPUT% REM ************************************************************* REM DB設定(各自の設定に変更してください。) REM ************************************************************* SET SERVER_I=XXXXX SET USER_ID=YYYYY SET USER_PASS=ZZZZZ REM ************************************************************* REM DB2接続 REM -t:SQLファイル内のセミコロンをステートメント終了文字とする。 REM -v:コマンドテキストを標準出力にエコーする。 REM ************************************************************* db2 -tv connect to %SERVER_ID% user %USER_ID% using %USER_PASS%; REM ************************************************************* REM SQL実行 REM -t:SQLファイル内のセミコロンをステートメント終了文字とする。 REM -v:コマンドテキストを標準出力にエコーする。 REM -f:ファイル名を指定する。SQL文をファイルから読み込む。 REM ************************************************************* db2 -tvf select_AAA.sql > %SQL_OUTPUT%\select_AAA.log REM ************************************************************* REM DB2切断 REM ************************************************************* db2 connect reset
-
02_AFTER_UT.bat
@ECHO OFF REM 実行時の第1引数にエビデンス用のフォルダ名(ケース番号)を指定してください。 REM コマンドプロンプトを立ち上げ、「db2cmd 02_AFTER_UT.bat フォルダ名」で実行します。 REM ************************************************************* REM エビデンスフォルダ設定 REM ************************************************************* SET EVI_DIR=%1 SET SQL_OUTPUT=%EVI_DIR%\20_SQL_LOG_After SET LOG_OUTPUT=%EVI_DIR%\30_BATCH_LOG MKDIR %SQL_OUTPUT% MKDIR %LOG_OUTPUT% REM ************************************************************* REM DB設定(各自の設定に変更してください。) REM ************************************************************* SET SERVER_I=XXXXX SET USER_ID=YYYYY SET USER_PASS=ZZZZZ REM ************************************************************* REM DB2接続 REM -t:SQLファイル内のセミコロンをステートメント終了文字とする。 REM -v:コマンドテキストを標準出力にエコーする。 REM ************************************************************* db2 -tv connect to %SERVER_ID% user %USER_ID% using %USER_PASS%; REM ************************************************************* REM SQL実行 REM -t:SQLファイル内のセミコロンをステートメント終了文字とする。 REM -v:コマンドテキストを標準出力にエコーする。 REM -f:ファイル名を指定する。SQL文をファイルから読み込む。 REM ************************************************************* db2 -tvf select_AAA.sql > %SQL_OUTPUT%\select_AAA.log REM ************************************************************* REM DB2切断 REM ************************************************************* db2 connect reset REM ************************************************************* REM ログファイル取得 REM ************************************************************* copy \\サーバーホスト名\12345\xxxx.log %LOG_OUTPUT%
基本的な確認コマンドその1
-
OSのバージョン確認
cat /etc/issue CentOS release 6.6 (Final) Kernel \r on an \m
-
OSのbit数確認
uname -a Linux z-area.net 2.6.32-504.23.4.el6.x86_64 #1 SMP Tue Jun 9 20:57:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
【Java】jarファイル付のJavaコンパイル
基本的なことをメモ。
-
前提条件
/home/testにjarファイル、Javaファイルがある。
Javaファイルは処理内でjarファイル内のメソッドを利用する。
-
コンパイルと実行
cd /home/test javac -cp .:./jarファイル javaファイル java -cp .:./jarファイル クラス名
-
クラスパスの区切り文字
Linuxはコロンになる。
Windowsはセミコロンになる。
-
実行時のルートパス
実行時に-cp指定がないとJAVA_HOMEがルートになる。
.を指定することで現在いるディレクトリがルートになる。
【jQuery】動的追加したオブジェクトにイベントを設定
jQueryでオブジェクト(ボタンやリンク)にイベントを設定した場合、
画面表示時点で存在しているオブジェクトを押下すると
設定したイベントがもちろん実行されますが、
動的追加したオブジェクトでは押下しても設定したイベントが
実行されない事象があったので、解決策をメモしておきます。
-
例
下記のようなHTML(Thymeleaf)があると仮定し、
追加ボタンを押下すると行(<tr>~</tr>)が追加されるとする。<table class="table"> <thead> <tr> <th><span th:text="${no}"></span></th> <th><span th:text="${gaiyou}"></span></th> <th><span th:text="${naiyou}"></span></th> <th><span th:text="${link}"></span></th> <th><span th:text="${aruaru}"></span></th> </tr> </thead> <tbody id="van-tbody"> <tr th:each="van : ${vanAll}" > <td><span th:text="${van.no}"></span></td> <td><span th:text="${van.gaiyou}"></span></td> <td><span th:text="${van.naiyou}"></span></td> <td><span th:text="${link}"></span></td> <td> <span th:text="${van.aruaru}"></span><button id="button-plus + '${van.no}'" type="button" class="btn btn-plus"><span class="glyphicon glyphicon-plus-sign"></span></button> </td> </tr> </tbody> </table>
-
オブジェクトのイベント設定(静的)
上記HTMLにおいて初期状態で2行分があるとし、
その2行分のみにイベントを設定する場合、下記のようなイベント設定で問題なし。-
clickメソッド
古いタイプのイベント設定方法。
「button」に設定してしまうとテーブル外のボタンにもイベントが設定されてしまうので、
テーブル内のボタンだけが利用しているスタイルシート「btn-plus」にイベントを設定している。<script type="text/javascript"> <!-- $(document).ready(function() { $('.bth-plus').click(function() { alert('クリックしました'); }); }); --> </script>
-
onメソッド
新しいタイプのイベント設定方法。
こちらの設定方法が推奨されており、「バインド」と呼ばれる。
onメソッドの第1引数はスペースで区切れば複数のイベントも設定可能。
例:’click keyup’<script type="text/javascript"> <!-- $(document).ready(function() { $('.bth-plus').on('click', function(){ alert('クリックしました'); }); }); --> </script>
-
clickメソッド
-
オブジェクトのイベント設定(動的)
上記HTMLにおいて初期状態で2行分があるとし、
3行目、4行目と増えてもイベントを動作させたい場合、
下記のようにイベント自体は親に設定しておいて、
onメソッドの第2引数に本来イベントを設定したいオブジェクトを指定します。-
onメソッド(第2引数追加版)
このような設定方法を「デリゲート」という。<script type="text/javascript"> <!-- $(document).ready(function() { $('table').on('click', '.btn-plus', function(){ alert('クリックしました'); }); }); --> </script>
-
onメソッド(第2引数追加版)
【SpringMVC】GoogleChartsの利用
画面でボタン押下時にモーダルダイアログを表示し、
GoogleChartsを利用し、グラフを表示します。
-
画面の処理
ボタンにIDを追加する。<button id="bsButton" type="button" class="btn btn-danger">グラフ表示</button>
モーダルダイアログの表示領域を設定する。
<!-- Chart Create Modal --> <div th:fragment="chart-create-modal"> <div class="modal fade bs-example-modal-lg" id="myModal" tabindex="-1"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h3 class="modal-title" id="myModalLabel">タイトル</h3> </div> <div class="modal-body"> <div id="chart_div" style="width: 400px; height: 400px;"></div> </div> </div> </div> </div> </div>
JavaScriptでサーバー側からデータ取得処理を呼び出し
GoogleのAPIにデータを渡します。<script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("visualization", "1", { packages : [ "corechart" ] }); <!-- $(document).ready(function() { $("#bsButton").click(showChart); }); function showChart() { $.post( '/sample/showChart', // URL {}, // Userデータ function(result) { $("#myModalLabel").html("テストグラフ"); $('#myModal').modal('show'); var data = google.visualization.arrayToDataTable(result); var options = { title : 'テストグラフタイトル', vAxis : {title : "縦座標"}, hAxis : {title : "横座標"}, seriesType : "bars", series : {5 : {type : "line"}} }; var chart = new google.visualization.ComboChart(document.getElementById('chart_div')); chart.draw(data, options); }, // 成功時のコールバック "json" // JSON形式 ); }
-
サーバの処理
サーバー側からデータを取得しJSON形式で返します。@RequestMapping(value = "/showChart", method = RequestMethod.POST) @ResponseBody public Object[][] showChart(WebRequest request) { int rows = 3; int cols = 6; Object[][] result = new Object[rows][cols]; int row=0, col=0; // result配列にヘッダとデータを設定 return result; }
【SpringMVC】バリデーションチェック
SpringMVCでバリデーションチェックを実施します。
例として、作業時間入力用のクラスがあるとして、それを複数所持するListがあるとし、
JSPでそのListをループし、作業時間入力レコードを複数表示およびチェックします。
-
バリデーションチェックのjarファイル追加
「【SpringMVC設定】ファイルその4」を参考にpom.xmlにjarファイルを追加する。
-
アノテーション追加
作業時間入力用のクラスは全て必須項目とするため、「@NotNull」を追加する。public class DayTimeWork implements Serializable { private static final long serialVersionUID = 1L; @NotNull private String ankenNo; @NotNull private String startTime; @NotNull private String endTime; アクセサメソッドは省略。 }
作業時間入力用のクラスを保持するListには「@Valid」を追加する。
「@Valid」はネストしたクラスも検証対象とする場合、追加します。public class DayTime implements Serializable { @Valid private List<DayTimeWork> dayTimeWork; アクセサメソッドは省略。 }
-
コントローラーへの設定追加
Javaコントローラーにバリデーションチェックを実施するための設定を追加する。
「@Validated」の次の項目にBindingResultを記載しないと
実行時にValidationExceptionが発生する。@Controller public class InputController { @InitBinder public void initBinder(WebDataBinder binder) { // bind empty strings as null binder.registerCustomEditor(String.class, new StringTrimmerEditor(true)); } @RequestMapping(value = "/updateDayTime", method = RequestMethod.POST) public String updateDayTime( @ModelAttribute(value = "dayTime") DayTime dayTime, final @Validated DayTime inputDayTime, BindingResult result, Model model) { // 処理省略 } }
-
JSPへの設定追加
JSPでバリデーションチェック結果を取得する。
Thymeleafのタグを利用し、全項目内でエラーが1つでもあれば、
変数errとしてエラーを取得し、表示しています。<form class="form-horizontal" action="#" th:action="@{/updateDayTime}" th:object="${dayTime}" method="post"> <fieldset> <ul th:if="${#fields.hasErrors('*')}"> <li th:each="err : ${#fields.errors('*')}" th:text="${err}">Input is incorrect</li> </ul> </fieldset> </form>
Thymeleafのタグを利用し、エラー項目のテキストボックスの枠を赤くしたり、
入力がない場合、placeholderで「案件番号」という文字を初期表示することも可能。<form class="form-horizontal" action="#" th:action="@{/updateDayTime}" th:object="${dayTime}" method="post"> <table class="table"> <!-- 処理省略 --> <tr th:each="vc, row : *{dayTimeWork}" > <td th:class="${#fields.hasErrors('dayTimeWork[__${row.index}__].ankenNo')}? has-error" align="center"> <input type="text" th:field="*{dayTimeWork[__${row.index}__].ankenNo}" placeholder="案件番号" class="form-control" /> </td> </tr> </table> </form>
LFTPコマンドの外だし
シェルでLFTPでファイルを取得する必要があったので。
#!/bin/sh echo "処理開始" >> result.log # LFTP接続 lftp -f command.txt >> ftp.log # ftp.logに先頭から始まる「abc*」がない場合 if ! grep "^abc*" ftp.log > /dev/null 2>&1; then # ftp.logの内容をresult.logに移し、ftp.logを初期化し、処理正常 cat ftp.log >> result.log echo "処理終了(ファイルなし)" >> result.log cp /dev/null ftp.log exit 0 # ftp.logに先頭から始まる「abc*」がある場合 else # ftp.logの内の先頭から始まる「abc*」をgrepする for X in `grep "^abc*" ftp.log` do # ファイル名(grep結果)が取得できている場合(-eが存在確認) if [ ! -e $X ]; then # ftp.logの内容をresult.logに移し、ftp.logを初期化し、処理異常 cat ftp.log >> result.log echo "ファイル転送エラー" >> result.log cp /dev/null ftp.log exit 1 fi done fi # ftp.logの内容を初期化し、処理正常 echo "処理終了" >> result.log cp /dev/null ftp.log exit 0;
command.txtの内容 open IP user ユーザ名 パスワード cd /test cls abc*.txt mget abc*.txt
ftp.logは処理が終了すると0バイトに初期化するが、
処理中は下記状態となる。
【正常の場合(取得ファイルあり)】
abc1.txt
abc2.txt
【正常の場合(取得ファイルなし)】
ファイル取得エラー
【異常の場合】
abc1.txt
abc2.tx
ファイル転送エラー
【CentOS】cronの自動実行
cronは決められた時刻にコマンドを定期的に実行させるためのデーモンプロセスです。
-
cronの起動確認
/etc/rc.d/init.d/crond status crond (pid xxxx) を実行中...
-
cronの起動
/etc/rc.d/init.d/crond start
-
cronの設定ファイル(設定変更非推奨)
cat /etc/crontab
# 「/etc/password」の記述に関係なく、強制的にここで定義されたシェルを利用 SHELL=/bin/bash # パスの設定 PATH=/sbin:/bin:/usr/sbin:/usr/bin # cronの実行結果をここで指定されたユーザー宛にメール MAILTO=root # cronによりプログラム実行されるときのカレントディレクトリ HOME=/
-
cronへの登録(手動)
crontab -e
* * * * * プログラム名 1番目:分(0 - 59) 2番目:時(0 - 23) 3番目:日(1 - 31) 4番目:月(1 - 12) 5番目:曜日(0 - 6)(日曜日が0) or (sun,mon,tue,wed,thu,fri,sat)
編集が完了すると下記パスにユーザ名のファイルに保存される。
/var/spool/cron/ユーザ名
-
cronへの登録(自動)
対象ディレクトリに配置するだけで自動実行される。/etc/cron.hourly:1時間に1回実行 /etc/cron.daily:1日に1回実行 /etc/cron.weekly:1週間に1回実行 /etc/cron.monthly:1ヶ月に1回実行