この設定を行うと、インターネットにあるページからでも、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 ) の読み込みと表示
2020年11月14日
IE11 を アプリケーションのプラットホームとして使う為の3つの設定
2020年05月11日
IE11 : 実行済みのページのソースをクリップボードにコピーする
F12 で開発者ツールを表示し、コンソールを開いて以下のコマンドを実行します。
window.clipboardData.setData("Text",document.getElementsByTagName("HTML")[0].outerHTML)
実行すると、通常はクリップボードを使ってもいいか確認ダイアログが出るので『アクセスを許可』して下さい。 ▼ 設定部分 Google Chrome の場合
copy(document.getElementsByTagName("HTML")[0].outerHTML)
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
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>
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 に対する操作はもっといろいろ可能です
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 エントリを使用すると実行ファイルを使用可能です ▼ アドオンの管理で確認できます
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。 Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。 また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。 ※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです 対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。 ※ エキスパートモードで表示しています アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります<% if:page_name eq 'archive' -%> アーカイブページでのみ表示される内容 <% /if %> <% if:page_name eq 'category' -%> カテゴリページでのみ表示される内容 <% /if %> <% if:page_name eq 'tag' -%> タグページでのみ表示される内容 <% /if %>この記述は、以下の場所で使用します
|