SQLの窓

2020年11月14日


IE11 を アプリケーションのプラットホームとして使う為の3つの設定

この設定を行うと、インターネットにあるページからでも、Windows のディスクやリソースに直接アクセスが可能になります( ActiveX を使用します )。よく利用されるのは、Excel へのアクセスですが、 ローカルネットワークのデータベースにもアクセスが可能です。




✅ インターネット上の任意のサイトを信頼して追加します

※ ここでは localhost です。インターネット上は 自分のサイト業務上のサイト になります

✅ ActiveX の使用を許可します( この設定で多くの処理が可能になります )

✅ 以下は ADO でのデーターベースアクセスに必要です

✅ クリップボードからの貼り付けができるのは IE11 のみです。

通常でもクリップボードへのコピーは可能で、他のブラウザでもクリップボードへのコピーは可能です。 18年前より IE を使用して、イントラネットの IIS のページ上に表示されたデータを Excel に転送して印刷に使うという処理を今も続けています。Excel でフォーマットを作っておくと、イレギュラーが発生しても Excel を直接変更すれば対応可能です。 大量な単独データが印刷が必要な場合はさすがに PDF( TCPDF ) を使用していますが、単票なら Excel に勝るものはありません。 IIS のタイムアウトを避けるような処理であれば、ADO で直接データーベースにアクセスして様々なデータをローカルに出力できます。 また、Excel のデータを複数セルでコピーして、IE11 の入力フィールドに貼り付けたり直接初期データを登録する事も可能になります。 さらにこれらのページ処理は、HTML だけで完結できる場合は拡張子を .hta として使う事もできます( 最初から HTA 目的で作成するのならば、IE11 の設定は必要ありませんが、HTA のデフォルトを最新にしておく為の META 要素が必要になります。 )
<meta http-equiv="x-ua-compatible" content="ie=edge">
❎ 注意事項として、IE11 のデフォルト状態では、VBSCript は利用できないので、VBScript が必要な場合は META 要素で IE10 以下を設定する必要があります。
<meta http-equiv="X-UA-Compatible" content="IE=8">

関連する記事

IE11 で VBScript のクラスを使用して Excel(Excel.Application) の処理を検証 HTML Application : JavaScript で新しい Excel の Book を作成する

IE11 上でコマンドプロントを模したページ

コマンドプロンプト on IE11( サイトを信頼して設定した場合 )

関連する記事

HTA / ADO / Jscript : Access( .accdb .mdb ) の読み込みと表示
タグ:HTA IE
posted by lightbox at 2020-11-14 08:23 | IE | このブログの読者になる | 更新情報をチェックする

2020年05月11日


IE11 : 実行済みのページのソースをクリップボードにコピーする

F12 で開発者ツールを表示し、コンソールを開いて以下のコマンドを実行します。
window.clipboardData.setData("Text",document.getElementsByTagName("HTML")[0].outerHTML)
実行すると、通常はクリップボードを使ってもいいか確認ダイアログが出るので『アクセスを許可』して下さい。



▼ 設定部分



Google Chrome の場合
copy(document.getElementsByTagName("HTML")[0].outerHTML)




posted by lightbox at 2020-05-11 23:03 | IE | このブログの読者になる | 更新情報をチェックする

2020年01月22日


VBScript : IE11のソースエディタの変更

最新の IE11 では、HKEY_CURRENT_USER でしか動作しないようです。





全て VBScript のみで実行しています。ですから、ファイル参照ウインドウの表示が、現在表示しているウインドウに隠れたりする場合があるので注意して下さい。

ieSrcEditor.wsf をエクスプローラから実行すると、ファイルを参照するダイアログが開きます。内部のコードは以下のようになっていますが、必要な関数等はインターネット上に保存して使用しています。ここでは、ローカルのファイルを開いてパスを取得する為に、InternetExplorer.Application を使用しています。

アンインストールは、zip 内の uninstall.reg か 以下のテキストを uninstall.reg として shift_jis か Unicode で保存してエクスプローラから実行します。内部は、Microsoft の仕様によるレジストリエントリの削除記述となっています。ですから、実際削除を行うのは、regedit.exe です。
Windows Registry Editor Version 5.00

[-HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\View Source Editor]


▼ 実行用のソースコードです
<JOB>
<COMMENT>
************************************************************
 WEB WSH 実行スケルトン
************************************************************
</COMMENT>

<COMMENT>
************************************************************
 外部スクリプト定義
************************************************************
</COMMENT>
<SCRIPT
	language="VBScript"
	src="http://lightbox.in.coocan.jp/laylaClass.vbs">
</SCRIPT>

<SCRIPT language=VBScript>
' 管理者として実行を強制する
Set obj = Wscript.CreateObject("Shell.Application")
if Wscript.Arguments.Count = 0 then
	obj.ShellExecute "wscript.exe", WScript.ScriptFullName & " runas", "", "runas", 1
	Wscript.Quit
end if

' ***********************************************************
' 処理開始
' ***********************************************************
Call laylaFunctionTarget( "http://lightbox.in.coocan.jp/" )
Call laylaLoadFunction( "baseFunction.vbs" )
Call laylaLoadFunction( "wmiReg.vbs" )
Call laylaLoadFunction( "toolFunction.vbs" )

' **********************************************************
' エディタ選択
' **********************************************************
strValue = OpenLocalFileName
if strValue = "" then
	Wscript.Quit
end if

' **********************************************************
' レジストリ
' **********************************************************
strPath = "SOFTWARE\Microsoft\Internet Explorer\View Source Editor\Editor Name"
Call WMIRegCreateKey( HKEY_CURRENT_USER, strPath )
strValue = Dd( strValue )
Call WMIRegSetStringValue( HKEY_CURRENT_USER, strPath, Empty, strValue )

MsgOk( strValue & " を IE のソースエディタとして登録しました" )

Function OpenLocalFileName( )

	Call GetObj( "IEDocument", "InternetExplorer.Application" )
	IEDocument.Navigate( ScriptDir( ) & "\local.htm" )
	IEDocument.document.getElementsByTagName("BODY")(0).innerHTML = "<input id=FilePath type=file>"
	IEDocument.document.getElementById("FilePath").click
	if IEDocument.document.getElementById("FilePath").value = "" then
		OpenLocalFileName = ""
		IEDocument.Quit
		Set IEDocument = Nothing
		Exit Function
	end if

	OpenLocalFileName = IEDocument.document.getElementById("FilePath").value

	IEDocument.Quit
	Set IEDocument = Nothing

End Function
</SCRIPT>
</JOB>



このページの PDF



タグ:ツール IE
posted by lightbox at 2020-01-22 15:00 | IE | このブログの読者になる | 更新情報をチェックする

2019年01月10日


IE11 で VBScript のクラスを使用して Excel(Excel.Application) の処理を検証

通常の「インターネット」では行いません。「信頼済みサイト」でのみ ActiveX を実行可能にしてから対象ページを登録して、WEB ページのデータを Excel のブックに転送して保存します。

業務アプリケーションとして「運用ルール」がきちんと決められ、システム管理者が居られると言う前提で通常は利用されます。

▼ 以下、前提となる設定




画像では、「localhost」ですが、イントラネットですと、単純にサーバー名になります

以下ソースコード
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=10">
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<script language="VBScript">

Const xlMaximized = -4137

Function Creata_Excel_Book() 

	Dim ExcelPath : ExcelPath = "c:\temp\test.xlsx"

	' 処理前の確認
	alert("OK")
	console.log( "OK" )

	' オブジェクト
	Dim MyExcel

	' オブジェクト作成
	Set MyExcel = new CExcel

	' 空の Book 作成 / 引数にパスが指定されているので、
	' そのパスで上書き保存する
	Set Workbook = MyExcel.Create( ExcelPath )

	' セルにデータをセット
	Workbook.ActiveSheet.Cells(2, 1) = "IE11+Excelです"

	' 変更内容を上書き
	Workbook.Save

	' オブジェクト情報の表示
	console.dir( MyExcel )
	console.dir( Workbook )

	' Excel オブジェクトの終了
	MyExcel.Quit

	' Windows アプリケーションとして開く
	MyExcel.Load( ExcelPath )

	' 解放
	Set MyExcel = Nothing

End Function

Class CExcel

	Public App
	Public WshShell
	Public ErrDescription
	Private WorkBook
	Public CurBook

' ************************************************
' インスタンスが作成されたときの処理
' ************************************************
	Private Sub Class_Initialize()

		Call InitSetting()
		console.log( "Class_Initialize" )

	End Sub

' ************************************************
' インスタンスが終了したときの処理
' ( Set インタンス変数 = Nothing で発生 )
' ************************************************
	Private Sub Class_Terminate()

		Call Quit()
		console.log( "Class_Terminate" )

	End Sub

' ************************************************
' 初期処理
' ************************************************
	Public Default Function InitSetting()

		if IsEmpty( App ) then
			Set App = CreateObject("Excel.Application")
		end if 
		if IsEmpty( WshShell ) then
			Set WshShell = CreateObject("WScript.Shell")
		end if 

		' ユーザーに入力を促すメッセージを表示させないようにする
		App.DisplayAlerts = False

		Set CurBook = Nothing

	end function

' ************************************************
' 終了
' ************************************************
	Public Function Quit()

		If not IsEmpty( App ) Then
			For Each Workbook In App.Workbooks
				' 全てのブックを保存した事にする
				WorkBook.Saved = True
			Next
			App.Quit
			Set App = Nothing
			App = Empty
			Set CurBook = Nothing
		End If

	End Function

' ************************************************
' 表示・非表示
' ************************************************
	Public Property Let Visible( bFlg )
		App.Visible = bFlg
	End Property 
	Public Property Get Visible
		Visible = App.Visible
	End Property

' ************************************************
' 開く
' ************************************************
	Public Function Open( strPath )

		on error resume next
		Set Open = App.Workbooks.Open(strPath)
		if Err.Number <> 0 then
			Set Open = Nothing
			ErrDescription = Err.Description
			Exit Function
		end if
		on error goto 0
		Set CurBook = Open

		' アクティブなウィンドウを最大化
		App.ActiveWindow.WindowState = xlMaximized

	End Function

' ************************************************
' 新規ブック作成
' ************************************************
	Public Function Create( strPath )

		Dim nBooks

		App.Workbooks.Add
		nBooks = App.Workbooks.Count

		' 戻り値セット
		Set Create = App.Workbooks( nBooks )

		' 処理
		Set CurBook = Create
		CurBook.Activate

		' アクティブなウィンドウを最大化
		App.ActiveWindow.WindowState = xlMaximized

		if strPath <> "" then
			on error resume next
			CurBook.SaveAs( strPath )
			if Err.Number <> 0 then
				MsgBox( Err.Description )
				Exit Function
			end if
			on error goto 0
		end if

	End Function

' ************************************************
' 閉じる
' ************************************************
	Public Function Close( MyBook )

		if IsObject( MyBook ) then
			MyBook.Saved = True
			MyBook.Close
			Set MyBook = Nothing
			MyBook = Empty
		else
			if CurBook is Nothing then
			else
				CurBook.Saved = True
				CurBook.Close
				Set CurBook = Nothing
			end if
		end if

	End Function

' ******************************************************
' 上書き保存
' ******************************************************
	Function Save( MyBook )

		if IsObject( MyBook ) then
			MyBook.Save
		else
			CurBook.Save
		end if

	End Function

' ******************************************************
' 名前を付けて保存
' ******************************************************
	Function SaveAs( MyBook, strPath )

		if IsObject( MyBook ) then
			MyBook.SaveAs strPath
		else
			CurBook.SaveAs strPath
		end if

	End Function

' ******************************************************
' 通常アプリケーションとして開く
' ******************************************************
	Function Load( strPath )

		if not IsEmpty( App ) then
			MsgBox( "Excel をロードする前に、Quitを実行して下さい   " )
			Exit Function
		end if

		Call WshShell.Run( _
			"RunDLL32.EXE shell32.dll,ShellExec_RunDLL " & _
			strPath _
		)

	End Function

End Class

</script>
</head>
<body>

<input type="button" value="実行" onclick="Call Creata_Excel_Book()" language="VBScript">

</body>
</html>





posted by lightbox at 2019-01-10 16:03 | IE | このブログの読者になる | 更新情報をチェックする

IE 専用 : 「信頼済みサイト」でのみ行う、WEBページのデータの Excel への転送



通常の「インターネット」では行いません。「信頼済みサイト」でのみ ActiveX を実行可能にしてから対象ページを登録して、WEB ページのデータを Excel のブックに転送して保存します。

業務アプリケーションとして「運用ルール」がきちんと決められ、システム管理者が居られると言う前提で通常は利用されます。

▼ 以下、前提となる設定




画像では、「localhost」ですが、イントラネットですと、単純にサーバー名になります

以下ソースコード
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=10">
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<script language="VBScript">

Dim WSH
Dim ExcelApp

' ******************************************************
' Excel 実行
' ******************************************************
Function LoadExcel(strPath)

	If Not IsObject(WSH) Then
		Set WSH = CreateObject("WScript.Shell")
	End If

	Call WSH.Run( "RunDLL32.EXE shell32.dll,ShellExec_RunDLL " & _
		strPath )

End Function

' ******************************************************
' Excel 処理
' ******************************************************
Function ExcelAction()

	' 読み込む Excel のパス
	Dim FilePath : FilePath = "C:\temp\Book1.xlsx"
	' 書き込む Excel のパス
	Dim FilePathResult : FilePathResult = "C:\temp\Book1_result.xlsx"

	' Excel.Application
	Dim ExcelApp
	' ブック
	Dim MyBook
	' シート
	Dim Sheet

	Set ExcelApp = CreateObject("Excel.Application")

	' 表示状態にする( 非表示にしても良いが、
	' 処理が長い場合は表示しておいたほうが良い
	ExcelApp.Visible = True
	' 確認ダイアログを出さない
	ExcelApp.DisplayAlerts = False

	' ブックを読み込む
	Set MyBook = ExcelApp.Workbooks.Open(FilePath)

	' 対象シート
	Set Sheet = MyBook.Sheets("Sheet1")

	' セルにデータをセット
	Dim tbl,rows,I,cols

	' テーブルオブジェクトを取得
	' ※ VB で配列は、() で参照する
	Set tbl = document.getElementsByTagName("table")(0)

	' 行のコレクション
	Set rows = tbl.getElementsByTagName("tr")

	' th は読み飛ばすので、1 から開始
	For I = 1 to ( rows.length - 1 )
		' 列のコレクション
		Set cols = rows(I).getElementsByTagName("td")
		For J = 0 to ( cols.length - 1 )
			if J = 0 or J = 3 then
				' 数字データを文字列としてセルにセットする
				Sheet.Cells(I+5, J+1) = "'" & cols(J).innerText
			else
				Sheet.Cells(I+5, J+1) = cols(J).innerText
			end if
		Next
	Next

	' 上書き保存
	MyBook.SaveAs FilePathResult

	' Excel を終了
	ExcelApp.Quit

	' Excel 解放
	Set ExcelApp = Nothing

	' 保存したブックを Excel で実行
	Call LoadExcel( FilePathResult )

End Function

</script>
</head>
<body>
<input type="button" value="Excel起動" language="VBScript" onclick='Call ExcelAction()'>

<style>
#lboxtable * {
	font-family: 'メイリオ','MS Pゴシック';
	font-size: 12px;
}
#lboxtable table {
	border-collapse: collapse;
	border: solid #000000 1px;
	background-color: #ffffff;
}
#lboxtable td{
	padding: 5px;
	border: solid #000000 1px;
	white-space: nowrap;
}
#lboxtable th {
	padding: 5px;
	border: solid #000000 1px;
	background-color: silver;
	white-space: nowrap;
}
</style>
<div id="lboxtable">
	<table>
		<tr>
			<th>社員コード</th>
			<th>氏名</th>
			<th>フリガナ</th>
			<th>所属</th>
			<th>性別</th>
			<th>給与</th>
		</tr>
		<tr>
			<td>0001</td>
			<td>浦岡 友也</td>
			<td>ウラオカ トモヤ</td>
			<td>0003</td>
			<td>0</td>
			<td>270000</td></tr>
			<tr>
			<td>0002</td>
			<td>山村 洋代</td>
			<td>ヤマムラ ヒロヨ</td>
			<td>0003</td>
			<td>1</td>
			<td>300000</td></tr>
			<tr>
			<td>0003</td>
			<td>多岡 冬行</td>
			<td>タオカ フユユキ</td>
			<td>0002</td>
			<td>0</td>
			<td>250000</td></tr>
			<tr>
			<td>0004</td>
			<td>高田 冬美</td>
			<td>タカタ フユミ</td>
			<td>0003</td>
			<td>1</td>
			<td>250000</td>
		</tr>
	</table>
</div>

</body>
</html>

IE 専用なので、スクリプトは VBScript を使用しています。Windows のオブジェクトなので、VBScript で使うほうがいろいろ都合が良く、VB や VBA の情報が参考にできます

⭐ 元になるブックは、C:\temp\Book1.xlsx としていますが、場所に制限はありません
⭐ 転送後、別のブックに保存してから、再度 Excel を普通に呼び出して開いています
⭐ 元になるブックを書式として完成させておいて、データのみ転送するのが本来の方法です
⭐ Excel に対する操作はもっといろいろ可能です





タグ:IE excle VBScript
posted by lightbox at 2019-01-10 14:34 | IE | このブログの読者になる | 更新情報をチェックする

2019年01月09日


VBScript のコードを書いた HTML を IEのツールメニューにアドオンする



IE拡張メニューとほぼ近いものですが、現在表示されているページ全体に対して「何かをする」という機能に合っています。
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Extensions\{7D4A0D6B-9722-4106-8D10-6E3684F04594}]
"CLSID"="{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}"
"MenuText"="テストメニュー"
"MenuStatusBar"="ステータスバーに表示される文字列"
"Script"="C:\\TEMP\\menuex_location.html"



(HKEY_CURRENT_USER にするとユーザ単位です)
<SCRIPT language="VBScript">

	on error resume next
	' *************************************************
	' URLの表示
	' *************************************************
	str = external.menuArguments.document.URL
	if Err.Number <> 0 then
		str = "URL を取得できませんでした"
	else
		' 取得できたらクリップボードにセット
		Call window.clipboardData.setData("Text",str)
	end if
	on error goto 0

	alert(str)

</SCRIPT>

これはあくまでサンプルなので、レジストリをインポートした後、C:\TEMP\menuex_location.html を作成して上記 VBScript のコードを書き込む必要があります

※ 7D4A0D6B-9722-4106-8D10-6E3684F04594 は、任意のGUID なので、WSH : GUID取得 で個別に作成します

※ 以下のコマンドを実行するとクリップボードに GUID を取得できます
cmd /c echo Set TypeLib=CreateObject("Scriptlet.TypeLib"):Wscript.echo TypeLib.Guid>%temp%\_.vbs&cscript.exe /NOLOGO %temp%\_.vbs | clip

Adding Menu Items にこれらの設定に関する仕様があります(英文)

Exec エントリを使用すると実行ファイルを使用可能です 


▼ アドオンの管理で確認できます





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

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

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

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

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


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

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

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

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

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



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり