SQLの窓 イラストAC フリー素材

2019年08月17日

IE11 : Excel.Application でファイルを開くダイアログを使用する

通常だと、ダイアログが IE11 の後ろに隠れてしまうので、Excel の表示位置をデスクトップの外に置いて表示状態にし、一旦最大化して(この時点で手前に出る)から元に戻しています。

<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">
<meta charset="utf-8">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css">

<link rel="stylesheet" href="https://lightbox.sakura.ne.jp/demo/two-section.css">
<script>
var excel = null;

$(function(){

	// Excel でファイルを開くダイアログ	
	$("#open_file_dialog").on("click", function(){
	
		// Excel をロード
		excel = new ActiveXObject("Excel.Application");
		excel.top = -200;	// デスクトップの外に隠す
		excel.left = -200;
		excel.width = 100;
		excel.height = 100;
		excel.Visible = true;
		excel.WindowState = 2	// Maximized
		excel.WindowState = 1	// Minimized

		excel.DisplayAlerts = false;

		// 一つのファイルを開く
		// https://docs.microsoft.com/ja-jp/office/vba/api/excel.application.getopenfilename
		var filePath = excel.GetOpenFilename("全て,*.*,CSV,*.csv", 1,"ファイルの選択",null, false );
		// 非表示にして
		excel.Visible = false;
		// デスクトップの中に戻す
		excel.top = 1;
		excel.left = 1;
		
		// 未選択の場合
		if( filePath === false ) {
			alert("ファイルの参照選択がキャンセルされました")
		}
		// 選択の場合
		else {
			alert(filePath + " を選択しました");
		}

		// Excel を終了
		excel.Quit();
		excel = null;
		// Excel 解放
		var idTmr = window.setTimeout("Cleanup();",1);

	});

});
// ******************************
// Excel 解放
// ******************************
function Cleanup() {
	CollectGarbage();
}

</script>
</head>
<body>
	<div id="head">
		<input type="button" id="open_file_dialog" value="ファイルを開く">
	</div>

	<div id="extend">

	</div>

</body>
</html>



posted by at 2019-08-17 15:48 | IE | このブログの読者になる | 更新情報をチェックする

2019年08月14日

IE11 : new ActiveXObject("ADODB.Connection") で .accdb のテーブル一覧を jQuery で TABLE に作成する

関連する記事

VBScript : 3種のMDB(または accdb)内の テーブル一覧取得方法

var cn = new ActiveXObject("ADODB.Connection");
var rs = new ActiveXObject("ADODB.Recordset");
var schema;

// ******************************
// データベースの接続
// ******************************
function connectDb(){

	// データベースの処理
	var path = "C:\\Users\\sworc\\Documents\\hanbaic-set\\hanbaic.accdb";
	var connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";";

	cn.Open( connectionString );

	schema = cn.OpenSchema( 20, [,,,] );

}

// ******************************
// jQuery でテーブル作成
// https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/schemaenum?view=sql-server-2017
// ******************************
function buildTable( ){

	while( !schema.EOF ) {

		var table_name = schema.Fields("TABLE_NAME").Value;
		if ( table_name.indexOf("MSys") == 0 ) {
			schema.MoveNext();
			continue;
		}

		var tr = $("<tr class='rowdata'></tr>")
			.appendTo("#tbl");

		$("<td></td>")
			.appendTo(tr)
			.css({
				"color": "#007bff",
				"text-decoration": "underline",
				"cursor": "pointer",
				"width": "250px"
			})
			.text(schema.Fields("TABLE_NAME").Value)
			// セルにイベントを作成
			.on("click", function(){

				console.log( $(this).text() );

			})
			;

		$("<td></td>")
			.appendTo(tr)
			.text(schema.Fields("TABLE_TYPE").Value);


		schema.MoveNext();
	}

	cn.Close();

}

$(function(){

	// ロード時の全ての行の表示
	connectDb();
	buildTable( );

});






posted by at 2019-08-14 21:09 | IE | このブログの読者になる | 更新情報をチェックする

IE11 + jQuery で、select( リスト)をタブルクリックした時に OPTION 要素の処理を行うコード

Google Chrome では、OPTION 要素に直接 dblclick イベントを作成できましたが、IE11 では無視されたので以下のようにして実装しました

select でイベントを作成して、その後選択されている場所が対象なので $(this).find(":selected") で参照します

※ デモページ
$(function(){

	// **************************************
	// 対象追加
	// **************************************
	$("#target").on("dblclick", function(){

		var target = $(this).val();

		$("#code option").each(function( idx ){

			if ( $(this).val() == target ) {
				alert( "この対象は既にセットされています" );
				target = null;
				return;
			}

		});

		if ( target != null ) {
			$("<option></option>")
				.val( target )
				.text( $(this).find(":selected").text() )
				.appendTo("#code")
			;
		}

	});

	// **************************************
	// メンバ削除
	// **************************************
	$("#code").on("dblclick", function(event){

		console.log("dblclick");

		$(this).find(":selected").remove();

	});

});



posted by at 2019-08-14 19:48 | IE | このブログの読者になる | 更新情報をチェックする

ActiveXObject("WScript.Shell" ) でコマンドプロンプトベースの外部プログラムより情報を取得

wscript.Run で、同期処理でコマンドプロンプトを表示せずに cmd.exe を呼び出して、標準出力に結果を出力するアプリを実行させてリダイレクトでファイルに書き込みます。

すぐにそのテキストを読み込んで、IE11 内の処理で使用します。

var wscript = new ActiveXObject("WScript.Shell" );

wscript.Run("cmd /c ipconfig > " + getFullPath("log.txt"),0 , true);
var infile = fs.OpenTextFile( getFullPath("log.txt"), 1 );
var text = infile.ReadAll();
infile.Close();







posted by at 2019-08-14 17:55 | IE | このブログの読者になる | 更新情報をチェックする

ActiveXObject("CDO.Message") でメール送信

ほぼほぼ IE11 での利用となります。





var cdo = new ActiveXObject("CDO.Message");

var server = "SMTPサーバー";
var port = 587; // または 465
var user = "ユーザ";
var from = "メールアドレス";
var pass = "パスワード";

// ***************************
// メール送信
// ***************************
function cdo_mail_send(to, subject, text_body) {

	// ***************************
	// 自分のアドレスと宛先
	// ***************************
	cdo.From = from
	cdo.To = to

	// ***************************
	// 件名と本文
	// ***************************
	cdo.Subject	= subject;
	cdo.Textbody = text_body;

	// ***************************
	// 設定
	// ***************************
	cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2;
	cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = server;
	cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = port;

	// ポートが 465 の場合は true に変更
	cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = false;

	cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
	cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = user;
	cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = pass;

	// ***************************
	// 設定
	// ***************************
	cdo.Configuration.Fields.Update();

	// ***************************
	// 送信
	// ***************************
	try {
		cdo.Send();

		console.log( "cdo.Send() : " + to + ":" + subject);
	}
	catch (e) {
		console.dir(e);
		alert("cdo.Send() でエラーが発生しました");
	}

}

// http://logicalerror.seesaa.net/article/312259839.html




posted by at 2019-08-14 15:50 | IE | このブログの読者になる | 更新情報をチェックする

2015年09月26日

IE の『互換表示設定』に localhost を入れて忘れててえらい目にあった

▼ これです。


そもそも、IE8 以前に開発したイントラネットシステムを保守しつづける為にいろいろするわけですが、たぶんそのテストに使って削除するのを忘れてました。

自宅で処理するのは、ほぼ Google Chrome なので、影響も無く困らないから気づくはずも無く。でも、WEB アプリのテンプレートを作っていて、『お、IE もチェック』とページを表示したら、とんでもない事態に。

とにかく IE だけが動作しないので、なんとなく jQuery のバージョンを 1.9.1 に下げたらなんと・・・
ページを表示するだけで固まり、タスクマネージャーから停止させてもゾンビのように蘇る IE。再起動したり、開発者ツール開けたりしても、想像もつかないエラーばっかり。

で、以前動作確認した環境で使用した、x-ua-compatible: IE=8 のヘッダー入れると動作する。
・・・・???? 
さらに、x-ua-compatible: IE=11 としても動作する。

あ。

ここで、やっと互換表示設定の存在を思い出し、あけてみたら localhost が居座っていたという。

『災難の記録』




posted by at 2015-09-26 20:56 | IE | このブログの読者になる | 更新情報をチェックする

2015年07月06日

どうも、IE で右クリックからブックマークレットを登録しようとするとエラーになる事があるようです

イラストAC のブックマークレット作って IE でテストしたら、こんな感じで出ます。



どうも原因が今イチ特定できませんが、『お気に入りバー』へ直接ドロップすると問題ありません。

▼ こういうのは出ますが



※というか、もういい加減に『お気に入りバー』って呼ぶのやめろよ……


関連する記事

イラストAC用、複数タグ一括転送ブックマークレット


posted by at 2015-07-06 19:56 | IE | このブログの読者になる | 更新情報をチェックする

2013年07月26日

IE拡張メニューで取得したテキストをメールで送る(CDO.Message版)

かなり前に作ったものなので、IEの仕様変更が理由で動かなくなっていた部分がありました。今回修正とともに、Gmail に最適化しました。


ダウンロード

Gmail を基本にデフォルト表示していますが、SSL/465 でクライアント設定できるメールサービスなら使えるはずです。

パスワードをソースに埋め込む事になるので、自宅でのみの使用が推奨されます。

内容を変更したい場合は、再度インストールを行います。

  1) カーソル下のテキストを取得します
  2) 選択状態のテキストがあれば、それを取得します
  3) リンクの場合は、テキストと URL を取得します
  4) HTML タグによっては( PRE など ) その範囲内のテキスト
    を取得します
<JOB>
<COMMENT>
************************************************************
IE 拡張メニューインストーラ

■カーソル下のテキストを CDO.Message でメール送信

   CDO.Message は、Windows 標準のメール用コンポーネントです

  インストール時に以下の情報を入力する必要があります。
  ( 何度でもインストールしなおせます )
  一度インストールしたら、直接
  C:\laylaClass\menuex\send_mail_text_CDOMessage.wsf
  を変更しても同じです

  1) ホスト名(またはIPアドレス)
  2) 宛先
  3) 差出人
  4) メールのタイトル

------------------------------------------------------------

  1) カーソル下のテキストを取得します
  2) 選択状態のテキストがあれば、それを取得します
  3) リンクの場合は、テキストと URL を取得します
  4) HTML タグによっては( PRE など ) その範囲内のテキスト
    を取得します

■著作権その他

このプログラムはフリーです。どうぞ自由に御使用ください。
著作権は作者である私(lightbox)が保有しています。
また、本ソフトを運用した結果については、作者は一切責任を
負えせんのでご了承ください。
************************************************************
</COMMENT>

<SCRIPT
	language="VBScript"
	src="http://homepage2.nifty.com/lightbox/laylaClass.vbs">
</SCRIPT>

<SCRIPT language=VBScript>
' ***********************************************************
' 処理開始
' ***********************************************************
Call laylaFunctionTarget( "http://homepage2.nifty.com/lightbox/" )
Call laylaLoadFunction( "baseFunction.vbs" )



' //////////////////////////////////////////////////////////
' インストール時の表示名
strProgName	= "ブラウザの情報をメール(CDO.Message)で送る"
' インストールファイル名( 拡張子は .htm となる )
strProgFile	= "send_mail_text_CDOMessage"

' メニューとウインドウのタイトルに表示する文字列
' レジストリに登録するのでユニークである必要があります
strRegName	= "−★ブラウザの情報をメール(CDO.Message)で送る"
' 対象となるコンンテンツ
nTargetType 	= &H3F
' &H3F : UNKNOWNを除く全て
' &H1  : DEFAULT
' &H2  : IMAGE
' &H4  : CONTROL
' &H8  : TABLE
' &H10 : TEXTSELECT
' &H20 : ANCHOR
' &H40 : UNKNOWN

' 画面ありがどうか
bIsGUI = True
' //////////////////////////////////////////////////////////



' Csript.exe で実行を強制
' Crun

print strProgName & " をインストールします"
if not OkCancel( "インストールしてもよろしいですか?" ) then
	Wscript.Quit
end if

' ファイルシステムオブジェクト作成
GetFso

strInstallPath1 = "c:\laylaClass"
strInstallPath2 = "c:\laylaClass\menuex"
strInstallPath3 = "c:\laylaClass\menuex\" & strProgFile & ".htm"

SMTPServer = InputBox( "SMTPサーバー", strProgName, "smtp.gmail.com:465" )
MailTo = InputBox( "宛先", strProgName )
MailFrom = InputBox( "差出人", strProgName, "username@gmail.com:username:パスワード" )
MailSubject = InputBox( "Subject(固定)",strProgName, "ブラウザのデータ" )

' ******** ●ここを変更● ********
strHtml = GetInline("MenuExt")
strHtml = Replace( strHtml, "$REGNAME", strRegName )
strHtml = Replace( strHtml, "$SMTPServer", SMTPServer )
strHtml = Replace( strHtml, "$MailTo", MailTo )
strHtml = Replace( strHtml, "$MailFrom", MailFrom )
strHtml = Replace( strHtml, "$MailSubject", MailSubject )
Call PutTextFile( strInstallPath3, strHtml )

' レジストリ処理用オブジェクト作成
GetWshShell

on error resume next
WshShell.RegWrite _
	"HKCU\Software\Microsoft\Internet Explorer\MenuExt\"&strRegName&"\", _
	strInstallPath3, _
	"REG_SZ"
WshShell.RegWrite _
	"HKCU\Software\Microsoft\Internet Explorer\MenuExt\"&strRegName&"\Contexts", _
	nTargetType, _
	"REG_DWORD"

if bIsGUI then
	' この定義があると、画面あり
	WshShell.RegWrite _
		"HKCU\Software\Microsoft\Internet Explorer\MenuExt\"&strRegName&"\Flags", _
		&H1, _
		"REG_DWORD"
end if
on error goto 0

print "処理が終了しました"

Wscript.Quit

</SCRIPT>

<COMMENT>
******** ●ここを変更● ********
</COMMENT>
<RESOURCE id="MenuExt">
<![CDATA[
<meta http-equiv="content-type" content="text/html; charset=SHIFT_JIS">
<SCRIPT language="VBScript">

	SMTPServer	= "$SMTPServer"
	MailTo		= "$MailTo"
	MailFrom	= "$MailFrom"
	MailSubject	= "$MailSubject"

	Dim WshShell,RegName,strLocation,obj,doc

	Set WshShell = CreateObject("WScript.Shell")
	RegName = "$REGNAME"

	' *************************************************
	' ウインドウサイズ
	' *************************************************
	window.dialogWidth = "800px"
	window.dialogHeight = "600px"

'	window.dialogTop = "100px"
'	window.dialogLeft = (window.screen.width/2)&"px"

	strLocation = external.menuArguments.document.URL

	on error resume next
	ExecuteGlobal "function dummy(): end function"
	on error goto 0

Function setObj( src )
	Set obj = src
End Function
</SCRIPT>

<SCRIPT language="JavaScript">
setObj(external.menuArguments.event.srcElement);
</SCRIPT>
<html>
<head>
<title>$REGNAME</title>
<meta http-equiv="content-type" content="text/html; charset=SHIFT_JIS">
<STYLE type="text/css">
* {
	font-size:12px;
}
body {
	margin:0;
}
</STYLE>

<SCRIPT language="VBScript">

	' 関数定義用
Function SendMailCDOMessage()

	Dim Cdo

	Set Cdo = CreateObject("CDO.Message")

	aAuth = Split( MailFrom, ":" )
	Cdo.Configuration.Fields.Item _
	 ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
	Cdo.Configuration.Fields.Item _
	 ("http://schemas.microsoft.com/cdo/configuration/sendusername") = aAuth(1)
	Cdo.Configuration.Fields.Item _ 
	 ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = aAuth(2)

	Cdo.From = aAuth(0)

	Cdo.To		= MailTo
	Cdo.Subject	= MailSubject
	Cdo.Textbody	= document.getElementsByName("text")(0).value

	Cdo.Configuration.Fields.Item _
	 ("http://schemas.microsoft.com/cdo/configuration/sendusing") = _
		2

	sv = Split(SMTPServer,":")

	Cdo.Configuration.Fields.Item _
	 ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
		sv(0)
	Cdo.Configuration.Fields.Item _
	 ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = _
		sv(1)
	Cdo.Configuration.Fields.Item _
	 ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true

	Cdo.Configuration.Fields.Update

	on error resume next
	Cdo.Send
	if Err.Number <> 0 then
		alert(Err.Description & "   ")
	else
		alert("メールを送信しました   ")
	end if
	on error goto 0
	window.close()

End Function


</SCRIPT>
<base target="_self">
</head>
<BODY>

<TEXTAREA
	name="text"
	style='width:790px;height:550px;'
></TEXTAREA>
<INPUT
	type="button"
	value="送信"
	onClick='Call SendMailCDOMessage()'
><br>
</FORM>

</BODY>
</html>
<SCRIPT for=window event=onload language="VBScript">

	' onload 処理
	Set doc = obj.document

	set objTextArea = doc.selection
	set objTextRange = objTextArea.createRange( )
	on error resume next
	strData = objTextRange.text
	nLen = Len( strData )
	on error goto 0

	if nLen <> 0 then
		document.getElementsByName("text")(0).value = strData
	else
		strTag = obj.tagName
		if UCase( strTag ) = "A" then
			strWork = obj.innerText
			strWork = strWork & vbCrLf & obj.href
			document.getElementsByName("text")(0).value = strWork
		else
			document.getElementsByName("text")(0).value = obj.innerText
		end if
	end if

</SCRIPT>
]]>
</RESOURCE>

</JOB>

更新履歴
2009-04-07 : 初回投稿
2013-07-26 : 動作確認とブログ本文を大幅に変更



posted by at 2013-07-26 20:54 | IE | このブログの読者になる | 更新情報をチェックする

2013年03月09日

IE10 for Windows7 を我慢できなくってインストールしたんですが、『それでも Microsoft かよ』と、思わずつぶやきたくなる件について。



ブラウザのテーブルを Microsoft の Excel にコピーした結果です。( 下にあるのは他の賢いブラウザ達 )

元のテーブルはこんなかんじ。
<table>
<tr>
<td>1</td><td>2</td><td>3</td>
</tr>
<tr>
<td>1</td><td>2</td><td>3</td>
</tr>
<tr>
<td>1</td><td>2</td><td>3</td>
</tr>
</table>

これはあんまりですよねぇ・・・。IE10 になったらてっきりうまく行くと思っていたのに、酷いです。ちなみに、IE9 では、スペースのかわりに改行が入っていたはずです。『ちょっとだけ進歩した・・・』『なんでやねん!』って一人で突っ込んでましたけど。

IE10 の言語別ダウンロード

言語を選択して、32ビットか64ビットかを選択して、すぐインストールできるファイルをダウンロードします。

で、インストールに邪魔なものは全て停止を要求するんですが、インストール中は、エクスプローラさえ強制終了しました(不安すぎる)。で、終わった後飛ばされたページがこちら。

新しいブラウザーを試しましょう

このページの meta 情報が以下。
<meta property="og:description" content="新しいブラウザー (Windows 7 用の Internet Explorer 10 Release Preview) について学びます。" />

『なんでやねん・・・・』


posted by at 2013-03-09 03:35 | IE | このブログの読者になる | 更新情報をチェックする

2013年02月28日

IE拡張メニューで取得したテキストをメールで送る(Basp21版)

※ Basp21 では暗号化ができないので、CDO.Message版 を使用したほうがいいと思います

自分のメールアドレスで使っている SMTP サーバーというもので送信する IE 拡張メニューです。

※ 相当古いソフトですが、VBScript の世界では有名な、Basp21 というオブジェクトをインストールする必要があります( インターネットで調べれば情報はたくさんあると思います )
ダウンロード カーソル下のテキストを basp21 でメール送信 選択した場合は、その文字列ですが、単に右クリックで実行した場合は適当に取得してテキストエリアに転送するので、加工してから送信できます。 http://www.hi-ho.ne.jp/babaq/basp21.html から basp21 をダウンロードしてインストールしている必要があります。 インストール時に以下の情報を入力する必要があります。( 何度でもインストールしなおせます )一度インストールしたら、直接 C:\laylaClass\menuex\send_mail_text_basp21.htm を変更しても同じです
	SMTPServer	= "サーバー.jp:587"
	MailTo		= "メールアドレス"
	MailFrom	= "<メールアドレス>	ユーザ:パスワード"
	MailSubject	= "任意のタイトルメッセージ"


  1) ホスト名(またはIPアドレス)
  2) 宛先
  3) 差出人( 形式はこのような形<メールアドレス>\tユーザー:パスワード )
  4) メールのタイトル

※ \t は実際のタブです。

メール情報の詳細な設定
posted by at 2013-02-28 05:33 | IE | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します