JavaScript から Excel にアクセスする場合、『Quit メソッドを呼び出した後、Excel がシャットダウンしない』というバグがあるのでその対応を組み込んでいます 実行後に作成された Excel Book
<!DOCTYPE html> <html> <head> <meta http-equiv="x-ua-compatible" content="ie=edge"> <meta charset="utf-8"> <meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport"> <title>新しい Excel の Book を作成する</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha512-MoRNloxbStBcD8z3M/2BmnT+rg4IsMxPkXaGh2zD6LGNNFE80W3onsAhRcMAMrSoyWL9xD7Ert0men7vR8LUZg==" crossorigin="anonymous" /> <style> /* **************************** 上下エリア フィットコントロール用 ******************************/ html,body { height: 100%; } /* **************************** それぞれのエリアの特性 ******************************/ /* 基本枠 */ body { margin: 0; } /* 上固定部分 */ #head { padding: 16px; display: block; margin: auto; width: 100%; /* 幅 */ height: 70px; /* 高さ */ background-color: #e0e0e0; } /* 下スクロール部分 */ #extend { padding: 4px 16px; display: block; margin: auto; width: calc( 100% - 3px ); /* 幅 */ height: calc( 100% - 70px - 2px ); /* 高さ */ border: solid 2px #c0c0c0; overflow: scroll; } </style> <script> // **************************** // Excel.Application 用 // **************************** var Excel = null; var Book = null; var Worksheet = null; // 外部プログラムの実行用 var WshShell = new ActiveXObject("WScript.Shell"); var targetPath = WshShell.ExpandEnvironmentStrings("%TEMP%") + "\\新しいBook.xlsx"; // jQuery 用専用ロードイベント $(function(){ $("#filepath").text( targetPath ); // ボタンのイベント $("#action").on("click", function(){ // 実行確認 if ( !confirm("新しいBook を作成してもよろしいですが?") ) { return; } // 複数の Excel 処理を対話で続ける時の為に Excel が null の時のみ作成する方法 // ※ 今回は必ず実行後終了させるのでこの if 文は必要ありません if ( Excel == null ) { // **************************** // 基本オブジェクトを作成 // **************************** Excel = new ActiveXObject("Excel.Application"); } // **************************** // 表示( テストの時は表示 ) // 完成した場合は false にしますが、 // なんらかのエラーが起きた場合はタスクマネージャから Excel // を終了させる必要があります // **************************** Excel.Visible = true; // **************************** // 警告を出さないようにする // 使用すると上書きの警告が // 出なくなります // **************************** Excel.DisplayAlerts = false; // **************************** // ブック追加 // **************************** Excel.Workbooks.Add(); // **************************** // 追加したブックを取得 // ※ 新規なのて 1 番目 // **************************** Book = Excel.Workbooks( Excel.Workbooks.Count ); // **************************** // 先頭シートを選択する // 少なくとも最初に一つシートが存在します // **************************** Worksheet = Book.Worksheets( 1 ); // **************************** // シート名設定 // ( アクティブなので直接 ) // **************************** Worksheet.Name = "新しい情報"; // **************************** // Add では 第二引数に指定した // オブジェクトのシートの直後に、 // 新しいシートを追加します。 // **************************** Book.Worksheets.Add(null,Worksheet); // **************************** // シート名設定 // ( 2番目のシート ) // **************************** Book.Worksheets(2).Name = "予備情報"; // **************************** // 新しい情報 シートを選択 // **************************** Book.Worksheets("新しい情報").Select(); // **************************** // コード列を文字列に設定 // **************************** Worksheet.Columns("A:A").Select(); Excel.Selection.NumberFormatLocal = "@"; Worksheet.Columns("D:D").Select(); Excel.Selection.NumberFormatLocal = "@"; Worksheet.Columns("J:J").Select(); Excel.Selection.NumberFormatLocal = "@"; // **************************** // テーブル情報をセルへセット // **************************** // タイトル部分の参照 $("#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:K").Select(); Worksheet.Columns("A:K").EntireColumn.AutoFit(); Worksheet.Range("A1").Select(); // **************************** // 保存 // 拡張子を .xls で保存するには // Call ExcelBook.SaveAs( FilePath, 56 ) とします // **************************** var filePath = $("#filepath").text(); try { Book.SaveAs( filePath ); Book.Close(); } catch (e) { alert("Book.SaveAs でエラーが発生しました"); console.dir(e); ExcelQuit(); return; } // Excel の完全終了 ExcelQuit(); // **************************** // 終了確認 // **************************** alert("処理が終了しました \n\n 保存したブックを開きます"); // **************************** // Windows からの Excel 起動 // **************************** WshShell.Run( "RunDLL32.EXE shell32.dll,ShellExec_RunDLL " + filePath ); }); }); // **************************** // JavaScript による // Excel の完全終了処理 // **************************** var idTmr = ""; function ExcelQuit() { Excel.Quit(); Excel = null; idTmr = window.setTimeout("Cleanup();",1); } function Cleanup() { window.clearInterval(idTmr); CollectGarbage(); } </script> </head> <body> <div id="head"> <input id="action" type="button" value="ブックの作成" class="btn btn-primary"> <span class="ml-5" id="filepath">c:\temp\新しいBook.xlsx</span> </div> <div id="extend"> <table class="table table-striped"> <tbody id="tbl"> <tr><th>社員コード</th><th>氏名</th><th>フリガナ</th><th>所属</th><th>性別</th><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>2005-09-12</td><td>2005-11-28</td><td>400000</td><td>9000</td><td>0001</td><td>2012/03/21</td></tr> <tr><td>0002</td><td>山村 洋代</td><td>ヤマムラ ヒロヨ</td><td>0003</td><td>1</td><td>2005-06-17</td><td>2005-09-18</td><td>300000</td><td></td><td>0001</td><td>2001/01/02</td></tr> <tr><td>0003</td><td>多岡 冬行</td><td>タオカ フユユキ</td><td>0002</td><td>0</td><td>2005-08-14</td><td>2005-11-14</td><td>250000</td><td></td><td>0001</td><td>2001/01/01</td></tr> <tr><td>0004</td><td>高田 冬美</td><td>タカタ フユミ</td><td>0003</td><td>1</td><td>2005-06-13</td><td>2005-10-05</td><td>250000</td><td></td><td>0001</td><td>2001/01/01</td></tr> <tr><td>0005</td><td>内高 友之</td><td>ウチタカ トモユキ</td><td>0003</td><td>0</td><td>2005-09-12</td><td>2005-11-10</td><td>150000</td><td></td><td></td><td>2001/01/01</td></tr> </tbody> </table> </div> </body> </html>
▼ 以下の設定を IE11 で行うと、拡張子を .html に変更して IE11 でも実行できます このページの PDF
|
【HTA ( HTMLアプリケーション )の最新記事】
- HTA / ADO / Jscript : Access( .accdb .mdb ) の読み込みと表示
- HTML Application : JavaScript で Windows のいろいろなフォルダを開く
- HTA (または IE11) で フォルダ選択ダイアログからフォルダとファイルの一覧
- HTA (または IE11) で hostname を実行して標準出力からPC名の取得
- HTA : 『x-frame-options: SAMEORIGIN』の設定されていないページの情報を IFRAME 内に表示して jQuery で取り出す / iframe内 参照と .clone(..
- HTA (HTMLアプリケーション) で JavaScript と VBScript を混在させる手法 / GetObject を VBScript 側で使用する
- HTA + Basp21 + jQuery + twitter-bootstrap(4.1.1) でメール受信ツール
- HTA + Basp21 + jQuery + twitter-bootstrap(4.1.1) でメール送信ツール