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) でメール送信ツール




テキストファイルの入力は行毎に読み込む方法で、オーソドックスな以下のクラスを使います。
✅
※ 列の ID は、視認性を上げる為に日本語の名称を使用しています。
( Apache 環境では、.py に対してソースコードの先頭の #!プログラム をcgi として実行します / PHP は別定義です )

ドライバは、古い {SQL Server} ドライバを使用していますが、VBS では、{SQL Native Client} を使っても同じだと思います。



