JavaScriptでExcelファイルからデータの取得
先日、JavaScriptを使って、Excel上に記載した正規表現のリストにマッチングするアプリを公開しました。
今回は、上記のアプリの肝となっているJavaScriptでExcelファイルからデータを取得する部分に特化してまとめてみました。
使い方
下記のソースをメモ帳にコピーして、拡張子を「*.hta」にして保存してください。
後は、対象のファイルをダブルクリックすれば起動します。(Windows環境のみです)
Excelで開けるファイルを指定して「データ取得」ボタンを押下すると、ファイル内のデータが画面上に表示されます。
実際にどのような処理となっているかは、下記ソース内のコメント等で確認してください。
<html> <head> <meta charset='utf-8' /> <title>JavaScriptでExcelファイルからデータ取得</title> <script type='text/javascript'> // 画面サイズを変更する window.resizeTo(800, 600); // Excelを操作するために必要 var excel = new ActiveXObject("Excel.Application"); // 初期化処理 function fileOpen() { // 画面からの入力値を取得 var file = document.getElementById("file").value; // 画面を描画 document.open(); document.write("<html><head><meta charset='utf-8' />"); document.write("<title>JavaScriptでExcelファイルからデータ取得</title></head>"); document.write("<body style='background-color:#cccccc'>"); // ブックを開く var workBook = excel.Workbooks.Open(file); // シートは一番左のシートで固定 var workSheet = workBook.Sheets(1); // 1行目の出力(1行目に値が存在している列までを対象に出力) document.write("<table border='1'><tr>"); var max_col = 1; while (1) { var cell = workSheet.Cells(1, max_col); // 対象セルの値が無い場合は処理を抜ける if (cell == null || cell.Value == undefined) break; // 値を出力する document.write("<th style='text-align: center;'>" + cell.Value + "</th>"); // 次の列の値へ max_col++; } document.write("</tr>"); // 2行目以降の出力(1列目に値が存在している行までを対象に出力) var max_row = 2; while (1) { var cell = workSheet.Cells(max_row, 1); // 対象セルの値が無い場合は処理を抜ける if (cell == null || cell.Value == undefined) break; // 1行目の最終列までを対象に値を出力する document.write("<tr>"); for ( i = 1; i < max_col; i++) { cell = workSheet.Cells(max_row, i); document.write("<td>" + cell.Value + "</td>"); } document.write("</tr>"); // 次の行へ max_row++; } document.write("</table></body></html>"); document.close(); // Excelファイルを閉じる workBook.Close(); } </script> </head> <body style='background-color:#cccccc'> <table> <tr> <th>対象ファイル</th><td> <input type='file' id='file' size='60'> </td> </tr> <tr> <th> <input type='button' value='データ取得' onclick='fileOpen()'> </th><td> </td> </tr> </table> </body> </html>
以上です。