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

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




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

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

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

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2]
"1201"=dword:00000000


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

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2]
"1406"=dword:00000000


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

通常でもクリップボードへのコピーは可能で、他のブラウザでもクリップボードへのコピーは可能です。
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2]
"1407"=dword:00000000


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 ) の読み込みと表示

IE11

HTA か IE11(要設定) で動作する Excel.Application の処理を JavaScript で記述したサンプル

JavaScript で記述しているのは、jQuery を使用したいからです。Excel 部分以外であれば他の用途にそのまま利用できるように考えています。

twitter-bootstrap を使用して簡単で美しい見栄えが利用できます。

Excel.Application を JavaScript で利用する際は、Microsoft が認識しているバグがあるので、サンプルのような終わり方をする必要があります。そうしなければ、メモリに Excel のプロセスが残ってしまう事を避けられません。Microsoft は、VBScript を使えば問題無いと書いていますが、IE11 でそもそも VBScript を使うのはいろいろ制限や工夫が必要な上に他へのリソースの流用ができないので、このようなアプローチが必要かもしれません。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta charset="sjift_jis">
<title>Excel の処理</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css" />
<script>

	// ****************************
	// HTA の時のみ使用
	// ****************************
	//top.moveTo( 300, 150 );
	//top.resizeTo( 800, 600 );

	var WshShell = new ActiveXObject("WScript.Shell");
	var FilePath = "";

	$(function(){

		$("#action").on("click", function(){

			// ****************************
			// Excel.Application を解放する為に
			// ローカル変数を使用しています
			// ****************************
			var Excel = null;
			var Book = null;
			var Worksheet = null;

			Excel = new ActiveXObject("Excel.Application");

			// ****************************
			// 保存ダイアログを前面に
			// 表示する為の処理です
			// ****************************
			Excel.Visible = true;
			Excel.WindowState = 2;	// Minimize
			Excel.WindowState = 1;	// Maximize
			Excel.Visible = false;

			// ****************************
			// 警告を出さないようにする
			// 使用すると上書きの警告が
			// 出なくなります
			// ****************************
			// Excel.DisplayAlerts = false;

			// ****************************
			// ブック追加
			// ****************************
			Excel.Workbooks.Add();

			// ****************************
			// 追加したブックを取得
			// ****************************
			Book = Excel.Workbooks( Excel.Workbooks.Count );

			// ****************************
			// 現状、ブックにはシート一つ
			// という前提で処理していますが
			// 必要であれば、Book.Worksheets.Count
			// で現在のシートの数を取得できます
			// ****************************
			Worksheet = Book.Worksheets( 1 );
			Worksheet.Activate();

			// ****************************
			// シート名設定
			// ****************************
			Worksheet.Name = "新しい情報";

			// ****************************
			// 参照
			// 最後の 1 は、使用するフィルター
			// の番号です
			// ****************************
			FilePath = Excel.GetSaveAsFilename( "excel_001","Excel ファイル (*.xlsx), *.xlsx", 1)
			if ( FilePath == false ) {
				// ****************************
				// 保存していないので
				// 保存した事にして閉じます
				// ****************************
				Book.Saved = true;
				Book.Close();
				Excel.Quit();
				Excel = null;

				alert( "Excel ファイルの保存選択がキャンセルされました" );

				window.setTimeout("Cleanup();",1);
				return;
			}

			// ****************************
			// セルへセット
			// ****************************
			// タイトル部分の参照
			$("#tbl th").each(function(idx){
				Worksheet.Cells(1, idx+1) = $(this).text();
			});

			// 行一覧の参照
			$("#tbl tr").each(function(row){
				$(this).find("td").each(function(idx){
					Worksheet.Cells(row, idx+1) = $(this).text();
				});
			});

			// ****************************
			// セルをデータに合わせて
			// 整理して左上を選択
			// ****************************
			Worksheet.Columns("A:C").Select();
			Worksheet.Columns("A:C").EntireColumn.AutoFit();
			Worksheet.Range("A1").Select();

			// ****************************
			// 保存
			// 拡張子を .xls で保存するには
			// Call ExcelBook.SaveAs( FilePath, 56 ) とします
			// ****************************

			try {
				Book.SaveAs( FilePath );
			}
			catch (e) {
				console.dir(e);
				alert("Book.SaveAs でエラーが発生しました");
			}

			// ****************************
			// Excel をアプリケーションとして終了
			// ****************************
			Excel.Quit();
			Excel = null;
			idTmr = window.setTimeout("Cleanup();",1);

			alert("処理が終了しました \n\n 保存したブックを開きます");

			WshShell.Run( "RunDLL32.EXE shell32.dll,ShellExec_RunDLL " + FilePath );

		});

	});

function Cleanup() {
	CollectGarbage();
}
</script>

<style>
html,body {
	/* height: 100%; */
}

.entry td {
	padding: 6px;
}

/* ****************************
テーブル内のデータを選択不可
( ダブルクリック対応 )
******************************/
#tbl {
	user-select: none;
	-moz-user-select: none;
	-webkit-user-select: none;
	-ms-user-select: none;
}

#tbl th {
	cursor: default;
}

#tbl td {
	cursor: default;
	color: black;
}

</style>

</head>
<body>
<div class="main">

<table class="entry ml-3 mt-3">
	<tr>
		<td>
			<input id="action" type="button" value="Excel.Application の実行" class="form-control btn btn-primary">
		</td>
	</tr>
</table>


<table class="table ml-3 mt-2" id="data" style='width:400px;'>

	<tbody id="tbl">

		<tr>
			<th>コード</th>	<th>開始日</th>	<th>終了日</th>
		</tr>

		<tr>
			<td>FIRST</td><td>2018/04/01</td><td>2018/06/30</td>
		</tr><tr>
			<td>SECOND</td><td>2018/07/01</td><td>2018/09/30</td>
		</tr><tr>
			<td>THIRD</td><td>2018/10/01</td><td>2018/12/31</td>
		</tr><tr>
			<td>FOURTH</td><td>2019/01/01</td><td>2019/03/31</td>
		</tr>

	</tbody>

</table>


</div>
</body>
</html>


関連する記事

🔻 IE11 の設定と VBScript でのサンプルです
IE11 で Excel のブックにアクセスする / JavaScript を使用して Excel のブックのセルにデータをセットして更新



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

最新の 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>






IE11 で Excel のブックにアクセスする / JavaScript を使用して Excel のブックのセルにデータをセットして更新

⭕ まず、信頼するサイトlocalhost( またはイントラネットのサーバ ) を登録します。



⭕ レベルのカスタマイズで『スクリプトを実行しても安全だとマークされていないActiveX コントロール』を『有効』にします。



▼ 以下の .reg ファイルをエクスプローラからダブルクリックしてインポートする事もできます
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2]
"1201"=dword:00000000

▼ .reg ファイルをダウンロード
その上で以下のコードを localhost で実行が可能です。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="Content-type" content="text/html; charset=shift_jis">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>

// *************************************
// IE 用オブジェクト作成関数
// *************************************
function newObject( className ) {

	var obj;

	try {
		obj = new ActiveXObject( className );
	}
	catch (e) {
		obj = null;
	}

	return obj;

}

// *************************************
// Excel 用オブジェクト 格納変数
// *************************************
var excelApp = null;
var myBook = null;

// *************************************
// Exce ブックを読み込んで更新して終了
// *************************************
function excelTest() {

	// Excel オブジェクト作成
	if ( excelApp == null ) {
		 excelApp = newObject("Excel.Application");
	}

	// Excel ブックの読み込み
	myBook = excelApp.Workbooks.Open("C:\\Users\\lightbox\\Documents\\Book1.xlsx");

	// アクティブなウィンドウを最大化
	excelApp.ActiveWindow.WindowState = 2;
	// 表示時様態にする
	excelApp.Visible = true;

	// jQuery でオブジェクトの一覧を取得して Excel のセルに情報をセットする
	var row = 0;
	$.each( window.navigator, function( key, value ){

		row++;
		// シートのセルに書き込み
		myBook.Sheets("Sheet1").Cells(row, 1) = key;
		myBook.Sheets("Sheet1").Cells(row, 2) = typeof value;
		myBook.Sheets("Sheet1").Cells(row, 3) = value;

	});

	// 保存
	myBook.Save();

	// Excel の終了
	if ( excelApp != null ) {
		excelApp.Quit();
		excelApp = null;
	}

}

</script>
</head>
<body>
<input id="export" type="button" value="Excel のテスト" onclick="excelTest();">
</body>
</html>