SQLの窓 イラストAC フリー素材

2019年08月21日

IE11 : JScript : Excel.Application で新しい Excel の Book を作成する

Excel.Application は、常にメモリ上に置くのは問題が出ると困るので、実行毎に開放します。

ここで実行している機能は
1) ブックを追加
2) デフォルトシートの名称変更
3) シートを前のシートの後ろにもう一つ追加
4) 列の表示形式の設定
5) ブラウザ上のデータを jQuery で セルに転送
6) セルの表示幅を自動調整
7) 保存
8) Excel の終了と解放
<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">
<meta charset="utf-8">
<title>新しい Excel の Book を作成する</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css">

<link rel="stylesheet" href="https://lightbox.sakura.ne.jp/demo/two-section.css">

<script>
// ****************************
// Excel.Application 用
// ****************************
var Excel = null;
var Book = null;
var Worksheet = null;
var WshShell = new ActiveXObject("WScript.Shell");

$(function(){

	$("#action").on("click", function(){
	
		if ( Excel == null ) {
			// ****************************
			// 基本オブジェクトを作成
			// ****************************
			Excel = new ActiveXObject("Excel.Application");
		}

		// ****************************
		// 表示( テストの時は表示 )
		// ****************************
		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 = "c:\\temp\\test.xlsx";

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

			console.dir(e);
			ExcelQuit();
			return;
		}

		ExcelQuit();

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

		// ****************************
		// Windows からの Excel 起動
		// ****************************
		WshShell.Run( "RunDLL32.EXE shell32.dll,ShellExec_RunDLL " + filePath );

	});

});

// ****************************
// 終了処理
// ****************************
function ExcelQuit() {
	Excel.Quit();
	Excel = null;
	idTmr = window.setTimeout("Cleanup();",1);
}
function Cleanup() {
	CollectGarbage();
}
</script>
</head>
<body>
	<div id="head">
		<input id="action" type="button" value="Excel.Application の実行" class="btn btn-primary">
	</div>

	<div id="extend">
		<table class="table">
		<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 のバグの対処方法( 英文 )

BUG: Excel Does Not Shut Down After Calling the Quit Method When Automating from JScript

IE11 の設定








【IEの最新記事】
posted by at 2019-08-21 14:16 | IE | このブログの読者になる | 更新情報をチェックする