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