注目⏰ 【VBS】WshShell.Runによる外部プログラムの実行のバリエーションと注意事項 ⏰ 複数行のグループデータを1行にまとめるSQLIE11 ( JScript : UI ) C# PHP JavaScript / jQuery HTML/CSS Android Java その他 WSH ( JScript : バッチ ) JScript を使用して( 拡張子は WSF )、CScript.exe に呼び出されるコンソールアプリケーションです🍄 【メール送信 : fake sendmail】 fake sendmail for windows でメールを送信する 🐬 【データベース : エクスポート】 .accdb より Excel へのエクスポート MySQL から Excel へのエクスポート MySQL から SQLServer へのエクスポート 【データベース : Excel : エクスポート : CSV : 標準出力】 名前の定義がされた範囲をテーブルとして SELECT 文で 標準出力に CSV 出力 ⚡ 【HTTP : Msxml2.ServerXMLHTTP : GET】 Msxml2.ServerXMLHTTP の GET で WEB 上の文字列を取得して JSON オブジェクトに変換して利用する ⚡ 【HTTP : Msxml2.ServerXMLHTTP : POST】 簡単にバイナリファイルをアップロードする【PUTをPHPでサポート】 【基本部分】 JScript の基本 MsgBox と InputBox を使うIE11 ( JScript : UI ) IE11 で画面を作成して、一般的な JavsScript を使用して実行されるアプリケーションです。 ※ ここでできる事は、WSH ( JScript : バッチ ) でも可能です🍄 【メール】 CDO.Message でメール送信 【データベース : 問合せ】 .accdb のテーブル一覧を jQuery で TABLE に作成する 🏢 【Excel】 新しい Excel の Book を作成する 既存の Book を開いてその中のテンプレートシートをコピーして名前を付けて保存する ファイルを開くダイアログを使用する 【Windows : プログラム実行】 コマンドプロンプトベースの外部プログラムより情報を取得 【Windows : フォルダ選択】 フォルダを選択して、フォルダ内のフォルダとファイルの一覧を jQuery で表示する 【その他】 jQuery で、selectをタブルクリックした時に OPTION 要素の処理を行うコードIE11 はブラウザなので、⚡ 通信処理は 【JavaScript / jQuery】 の ajax が利用できます C#🍄 【メール】 TKMP.DLLを使った、Gmail 用メール送信テンプレート 🔀 【DataGridView】: カラムを作成( 他の一覧処理用 ) Microsoft Access に対してSQLを入力してその結果を DataGridView に表示する最も簡単なコード 🔀 【DataGridView : DBより自動更新】 DataGridView を使用したナチュラルな行データの更新 🔀 【DataGridView】: DB より カラム自動作成 Excel を データベースとして DataGridView に読み込む ⚡ 【WEBアクセス : JSON】 WebClient で JSON データを取得後 Json.NET でオブジェクト化 ⚡ 【WEBアクセス : バイナリ】 PHP と連携してバイナリデータを WebClient.UploadDataAsync でそのままアップロードする 🐬 【データベース】 Microsoft Access の接続で、他の RDBMS【ここでは MySQL】にエクスポートを行う 【Windows】 フォームを表示せずに、通知領域にアイコンを表示させる常駐プログラム 🏢 【Excel】 dynamic 型 による Excel へのアクセス 【C# : ラムダ式等】 C# の delegate : メソッドの引数にメソッドを渡して使用する方法PHP🍄 【メール】 fake sendmail for windows を使って、PHP でごく普通に mb_send_mail でメール送信 ⚡ 【ファイルアップロード】 PHP における標準的なテスト用アップロードのテンプレート 🐬 【データーベース : JSON : API】 PHP : MySQL から JSON 文字列を返す自作【テスト用】API テンプレート 【データーベース : Microsoft Access : クラス】 家に持ち帰った mdb で簡単に php からアクセスしてテストプログラムを作る【MDBクラス付き】 📷 【画像処理】 PHP : 画像を返す処理( readfile ) と画像を縮小する処理( GD )JavaScript / jQuery⚡ 【HTTP : ajax : GET】 jQuery の $.ajax で JSON 文字列を WEB より取得して TABLE を作成する ⚡ 【HTTP : ajax : アップロード】 一般的な PHP のアップロードページに対して jQuery の $.ajax でファイルをアップロードする ⚡ 【HTTP : ajax : Firebase JSON】 Firebase の Realtime Database の JSON を jQuery の $.ajax で読み込んで TABLE を作成する ⚡ 【HTTP : Firebase : API】 Firebase に定義した Realtime Database の API を使用して TABLE を作成する 💾 【ファイル : CSV ロード】 FileReader で、ローカルの CSV を読み込んで【shift_jis】、jQuery でテーブルを作成して表示する 📥 【クリップボード : コピー】 clipboard.js で、2種類のクリップボード処理オブジェクトを作成して使い分けるHTML/CSS下半分がスクロールするページ 下半分が IFRAME なページ Bootstrap な単純ページ( レスポンシブ )Android⚡ 【HTTP : JSON】 LiveDoor のお天気情報をリストビューに表示する手順Java🐬 【コンソール】 単純な MySQL アクセス【 mysql-connector-java-5.1.47.jar】 ⚡ 【コンソール : HTTP : JSON】 Okhttp( GET ) と Google Gson( JSON => オブジェクト ) で WEB アクセス 🐬 【JSP】 JSP で単純な MySQL アクセス 【mysql-connector-java-5.1.47.jar】データベース System.Data.OleDb で select into 構文を使って簡単に Microsoft Access のデータを他の データベースにエクスポートする データーベース間 テーブルアクセス IN 句による外部参照 Access のエクスポート その他Apache の index 表示でファイル名が長すぎて省略される場合の設定変更 デスクトップにユーザアイコン参考PHP : ユニークなキーの取得
bcp ユーティリティ( Microsoft ) SQL クライアント設定ユーティリティ( Microsoft ) sqlcmd Utilitybcp lightbox..社員マスタ out "c:\TEMP\data.csv" -c -t , -r \n -S localhost -U sa -P password bcp "select * from lightbox..[商品マスタ]" queryout "c:\TEMP\data.csv" -c -t , -r \n -S localhost -U sa -P password
|
画狼
まとめ
2019年11月18日
バッチ処理の為の .wsf スケルトン / cscript.exe での実行を強制する / 自分自身の呼び出し
Wscript.Echo は、Wscript.exe から実行すると、一回の処理毎にメッセージボックスを表示するので、連続処理する場合は避けなければなりません(wscript.exe をタスクマネージャから強制終了する事になります) Wscript.exe は、通常エクスプローラからダブルクリックでスクリプトを実行した際に使用されるので、誤って実行してしまう事を避ける方法です。以下のサンプルでは、スクリプトにデータを含めて、そのデータをループ処理で表示する処理ですが、コマンドプロンプトからの実行を強制しています( コマンドプロンプトから、cscript.exe を使用しないと Quit されます )![]()
右端のアイコンよりダウンロードできます
<JOB> <SCRIPT language="VBScript"> ' コマンドプロンプトより起動される為の処理 str = WScript.FullName str = Right( str, 11 ) str = Ucase( str ) if str <> "CSCRIPT.EXE" then strMessage = "コマンドプロンプトより cscript " & WScript.ScriptFullName strMessage = strMessage & " と指定して実行して下さい " & vbCrLf & vbCrLf strMessage = strMessage & "( この文字列をクリップボードにコピーしたい場合は" strMessage = strMessage & "ctrl+c です )" WScript.Echo strMessage WScript.Quit end if aData = Split( getResource("myText"), vbCrLf ) For I = 0 to Ubound( aData ) if Trim( aData(I) ) <> "" then Wscript.Echo aData(I) end if Next </SCRIPT> <RESOURCE id="myText"> コード名称マスタ 商品マスタ 得意先マスタ 社員マスタ 取引データ </RESOURCE> </JOB>
以下は、Wscript.exe で起動された場合は、cscript.exe で自分自身を呼び出して再度実行しています( 最後にコマンドプロンプトの pause で停止 )
右端のアイコンよりダウンロードできます
<JOB> <SCRIPT language="VBScript"> ' コマンドプロンプトより起動される為の処理 str = WScript.FullName str = Right( str, 11 ) str = Ucase( str ) if str <> "CSCRIPT.EXE" then str = WScript.ScriptFullName Set WshShell = Wscript.CreateObject("WScript.Shell") strParam = " " For I = 0 to Wscript.Arguments.Count - 1 if instr(Wscript.Arguments(I), " ") < 1 then strParam = strParam & Wscript.Arguments(I) & " " else strParam = strParam & """" & Wscript.Arguments(I) & """ " end if Next Call WshShell.Run( "cmd.exe /c cscript.exe """ & str & """" & strParam & " & pause", 3 ) WScript.Quit end if aData = Split( getResource("myText"), vbCrLf ) For I = 0 to Ubound( aData ) if Trim( aData(I) ) <> "" then Wscript.Echo aData(I) end if Next </SCRIPT> <RESOURCE id="myText"> コード名称マスタ 商品マスタ 得意先マスタ 社員マスタ 取引データ </RESOURCE> </JOB>
そして、最後は面倒な記述部分を WEB 上に置いて呼び出して実行しています (Crun と言う関数)
右端のアイコンよりダウンロードできます
<JOB> <COMMENT> ************************************************************ WSH 実行スケルトン ************************************************************ </COMMENT> <COMMENT> ************************************************************ 外部スクリプト定義 ************************************************************ </COMMENT> <SCRIPT language="VBScript" src="http://lightbox.in.coocan.jp/laylaClass.vbs"> </SCRIPT> <SCRIPT language="VBScript"> ' *********************************************************** ' 処理開始 ' *********************************************************** Call laylaFunctionTarget( "http://lightbox.in.coocan.jp/" ) Call laylaLoadFunction( "baseFunction.vbs" ) Crun() aData = Split( getResource("myText"), vbCrLf ) For I = 0 to Ubound( aData ) if Trim( aData(I) ) <> "" then Wscript.Echo aData(I) end if Next </SCRIPT> <RESOURCE id="myText"> コード名称マスタ 商品マスタ 得意先マスタ 社員マスタ 取引データ </RESOURCE> </JOB>
2019年09月21日
WordPress ( 5.x.x ) の 投稿用のエディタ( Gutenberg )を 昔ながらのエディタにする為、functions.php に一行追加
詳細は以下のサイトより WordPressエディタGutenbergを無効にする方法について(準備ができていない!) 結局 functions.php の先頭に以下を追加しましたadd_filter('use_block_editor_for_post', '__return_false', 10);
2019年08月26日
Java : Okhttp( GET ) と Google Gson( JSON => オブジェクト ) で WEB アクセス
Okhttp のダウンロードは、files の jar リンクです。( Maven リポジトリ) Okhttp は Okio と kotlin-stdlib に依存しているのでこれらもダウンロードする必要があります。
import java.io.IOException; import com.google.gson.Gson; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class Main { public static void main(String[] args) { String url = "https://lightbox.sakura.ne.jp/demo/json/syain_api_bind.php"; String result = ""; OkHttpClient okHttpClient; okHttpClient = new OkHttpClient(); Request.Builder builder = new Request.Builder(); builder.url(String.format("%s?name=%s", url, "田")); Request request = builder.build(); Response response = null; try { response = okHttpClient.newCall(request).execute(); result = response.body().string(); } catch (IOException e) { e.printStackTrace(); } System.out.println(result); Gson gson = new Gson(); Syain[] syains = gson.fromJson(result, Syain[].class); for (Syain syain : syains) { System.out.println(syain.社員コード); System.out.println(syain.氏名); System.out.println(syain.フリガナ); } } private class Syain { public String 社員コード; public String 氏名; public String フリガナ; } }
C# : PHP と連携してバイナリデータを WebClient.UploadDataAsync でそのままアップロードする
WebClient.UploadDataAsync Method バイナリデータは、HTTP のボディ部分で送られるので、ファイル名は HTTP ヘッダにセットして渡します
using System; using System.IO; using System.Net; using System.Windows.Forms; namespace WebPut { public partial class Form1 : Form { // 読み込むファイルのパス string image_path = @"C:\Users\sworc\Pictures\IMG0330.JPG"; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { WebClient webClient = new WebClient(); // ファイル名を HTTP ヘッダーで渡す webClient.Headers.Add("UserData", Path.GetFileName(image_path)); // イベント作成 webClient.UploadDataCompleted += (object _sender, UploadDataCompletedEventArgs _e) => { if (_e.Error != null) { // エラー Console.WriteLine(_e.Error.Message); } else { // サーバからの応答( バイト配列なのでテキストに変換 ) Console.WriteLine(System.Text.Encoding.GetEncoding("UTF-8").GetString(_e.Result)); } }; // 画像ファイルをバイト配列に読み込む FileStream file_stream = new FileStream(image_path, FileMode.Open, FileAccess.Read); byte[] bin_buffer = new byte[file_stream.Length]; file_stream.Read(bin_buffer, 0, (int)file_stream.Length); file_stream.Close(); // バイナリデータアップロード開始 string access_url = "http://localhost/php/upload/php-put.php"; webClient.UploadDataAsync(new Uri(access_url), bin_buffer); } } }
PHP 側は、php://input を利用した単純なコードです。 php-put.php
<?PHP header( "Content-Type: text/html; charset=utf-8" ); $id = uniqid(); $fp = fopen( "php://input", "rb" ); $wfp = fopen( "data/{$id}_{$_SERVER["HTTP_USERDATA"]}", "wb" ); while( $ret = fread( $fp, 4096 ) ) { fwrite( $wfp, $ret ); } fclose($wfp); fclose($fp); ?> データが保存されました
C# : WebClient で JSON データを取得後 Json.NET でオブジェクト化( ついでに PropertyInfo でプロパティデータ一覧を foreach で取得 )
Json.NET は ダウンロードボタンで NuGet 用のコマンドラインが表示されます Json.NET でオブジェクトに変換するだけならば、 { set; get; } でプロパティ化せずとも単純な public な変数の定義で可能です。ここでは、プロパティの名前の一覧を配列で準備して foreach でデータを取得できるように { set; get; } でプロパティ化しています。
using Newtonsoft.Json; using System; using System.Net; using System.Reflection; using System.Text; using System.Web; using System.Windows.Forms; namespace WebJson { public partial class Form1 : Form { // フィールド名一覧 private string[] field_names = {"社員コード", "氏名", "フリガナ", "所属", "性別", "作成日", "更新日", "給与", "手当", "管理者" }; public Form1() { InitializeComponent(); } private void action_Click(object sender, EventArgs e) { WebClient webClient = new WebClient(); webClient.Encoding = Encoding.GetEncoding("utf-8"); // DownloadStringCompleted の引数は、https://docs.microsoft.com/ja-jp/dotnet/api/system.net.downloadstringcompletedeventhandler webClient.DownloadStringCompleted += (object _sender, DownloadStringCompletedEventArgs _e) => { Console.WriteLine(_e.Result); // Json.NET は、NuGet でインストールします : Install-Package Newtonsoft.Json // https://www.newtonsoft.com/json JsonData[] data = JsonConvert.DeserializeObject<JsonData[]>(_e.Result); // 画面にデータをセット name.Text = data[0].氏名; furi.Text = data[0].フリガナ; // プロパティ名一覧より、データを取得 PropertyInfo property; string value; foreach (string name in field_names) { property = typeof(JsonData).GetProperty(name); value = property.GetValue(data[0]).ToString(); Console.WriteLine(value); } }; // HttpUtility.UrlEncode は System.Web を参照する必要があります string access_url_query_string = $"https://lightbox.sakura.ne.jp/demo/json/syain_api_bind.php?name={HttpUtility.UrlEncode("田", Encoding.UTF8)}"; // WEB データ取得開始 webClient.DownloadStringAsync(new Uri(access_url_query_string)); } private class JsonData { // PropertyInfo.GetValue を使用する為に { set; get; } でメソッド化しています public string 社員コード { set; get; } public string 氏名 { set; get; } public string フリガナ { set; get; } public string 所属 { set; get; } public int 性別 { set; get; } public DateTime 作成日 { set; get; } public DateTime 更新日 { set; get; } public int 給与 { set; get; } public int 手当 { set; get; } public string 管理者 { set; get; } } } }