スポンサーリンク

WSH/JScriptで,Excelファイルを読み書きする際のテンプレート (シート上の全行を読み書きするコードのひな型)


WSH/JScriptのバッチで,Excelファイルを読み書きする場合,

下記のようなコードを毎回,毎回コーディングする。


このパターンは頻繁に使うため,テンプレート(スニペット)として掲載。

コードの雛形

excel読み書き.bat

@if(0)==(0) ECHO OFF

rem WSHコードに引数を渡す。
rem 第一引数:このバッチのフォルダのパス
rem 第二引数:このバッチにドロップされたファイルのフルパス
cscript.exe //nologo //E:JScript "%~f0" "%~dp0" "%~1"

echo 終了しました。
@pause

GOTO :EOF
@end



// 引数を取得
if(
	( WScript.Arguments.length < 2 )
	||
	( WScript.Arguments.Unnamed(1) == "")
)
{
	log("Excelファイルをドロップしてください。");
	WScript.Quit();
}

// このバッチの存在するフォルダ
var curr_dir = WScript.Arguments.Unnamed(0);

// ドロップされたファイルを読み込み対象とする
var file_path = WScript.Arguments.Unnamed(1);



// グローバル変数を定義
var excel = newExcel();



// ---------- 既存のブックを読み込む場合 ---------- 


// 対象ブックを開く
var book = openBook( file_path );

// 最初のシートを取得
var sheet = book.Worksheets(1);


var arr = [];


// 列内で全行を読み込み
var y = 1;
var continue_flag = true;
while( continue_flag )
{
	if( sheet.Cells( y, 1 ).Value ) // "undefined" に注意
	{
		var s = sheet.Cells( y, 1 ).Value + ""; // Stringに変換
		
		log( y + "行目:" + s );
		arr.push( s );
		
		
		// 次の行へ
		y ++;
	}
	else
	{
		continue_flag = false;
	}
}


// ブックを閉じる
book.Close();



// ---------- ブックを新規作成して書き込む場合 ---------- 


// 作成するファイル名
var file_path_new = curr_dir + "hoge.xls";

// 新規ブック生成
var book_new = createNewBookHere( file_path_new );

// 新しいシートを作成
var sheet_new = getNewSheet( book_new, "シート1" );


// 列内に書き込み
for( var i = 0; i < arr.length; i ++ )
{
	var y = i + 1;
	
	// 加工して書き込み
	sheet_new.Cells( y, 1 ).Value = "Hello, " + arr[ i ] + "!";
}

// 書き込んだ列の幅を調整
sheet_new.Columns( 1 ).AutoFit();


// ブックを保存
saveBook( book_new, file_path_new );

// ブックを閉じる
book_new.Close();



// Excelを閉じて終了
excel.Quit();
WScript.Quit();





// デバッグ用
function log(s){ WScript.Echo(s); }



// ----- Excel操作の共通関数 -----


// Excel起動
function newExcel()
{
	try
	{
		excel = WScript.CreateObject("ET.Application");
	}
	catch(e)
	{
		excel = WScript.CreateObject("Excel.Application");
	}
	excel.Visible = true;
	
	return excel;
}



// 既存のブックを開く
function openBook( file_path )
{
	excel.Workbooks.Open( file_path );
	var book = excel.Workbooks( excel.Workbooks.Count );
	
	return book;
}



// カレントフォルダにExcelを新規生成し,ブックを返す。
function createNewBookHere( file_path )
{
	var fso = WScript.CreateObject("Scripting.FileSystemObject");
	log( "新規ブックを作成:" + file_path );

	// ファイルが存在するか
	if( fso.FileExists( file_path ) )
	{
		log( "既に同名のファイルが存在します。実行停止");
		WScript.Quit();
	}
	else
	{
		log( "新規作成しました。" );
	}

	// 新規ブック
	excel.Workbooks.Add();
	var book = excel.Workbooks( excel.Workbooks.Count );

	// 新規ブックを保存
	excel.DisplayAlerts = false;
	book.SaveAs( file_path );
	log("とりあえずブックを保存しました");

	return book;
}



// 新しいシートを追加して返す
function getNewSheet( book, new_name )
{
	var sheet = book.Worksheets.Add();
	sheet.Name = new_name;
	
	return sheet;
}



// ブックを保存
function saveBook( book, file_path )
{
	excel.DisplayAlerts = false;
	book.SaveAs( file_path );

	log( "ブックを保存しました。" );
}

元になるコード

JScript/WSH で,Excelファイルを読み書きしよう
http://language-and-engineering.hatenablog.jp/entry/20090717/p1

関連する記事:

ドキュメント作成を楽にするための,Excel VBA 頻出8パターン
http://language-and-engineering.hatenablog.jp/entry/20090401/p1


Excelブックの「シート目次」を,自動的に作成するバッチ (WSH/JScriptで,各シートへのリンク付きの目次を自動生成)
http://language-and-engineering.hatenablog.jp/entry/20110921/p1