マイクロソフトエクセルのXMLデータ表示ライブラリ

 Windows/Mac版マイクロソフトエクセルで作成されたXMLデータを読み込んで必要なセルデータを取得するライブラリです。getCellData()により任意のシートの任意の位置にあるデータを取得することができます。セルの位置は左上がゼロなので、その点にだけは注意が必要です。
 サンプルではSheet1とSheet2の全てのセルデータをテーブルで表示します。なお、Safari 2では標準状態のXMLでは文字化けしてしまいますので、エディタなどでBOM付きのUTF-8にするか、サーバー側でXMLデータを出力するようにして、出力の際にBOMの3バイトを出力するようにしてください。(サンプルを実行する

getWorkSheet(XMLデータ, シート名)指定したシートがあるか調べる。なければnullを返す。
getWorkSheetColCount(シートオブジェクト)指定したシートの列数を返す。
getWorkSheetRowCount(シートオブジェクト)指定したシートの行数を返す。
getCellData(XMLデータ, シート名, 横の位置, 縦の位置)指定されたシート内の指定位置のセル内容を返す。なければnullを返す。


【ライブラリ】
// ------------------------------------------------------------
// Microsoft Word 2003 (Windows) XML Library
// ------------------------------------------------------------
// get Worksheet Tag
function getWorkSheet(xml,sheetName)
{
var tagObj = xml.getElementsByTagName("Worksheet");
for (var i=0; i<tagObj.length; i++)
{
var n = tagObj[i].attributes[0].value;
if (n == sheetName) return tagObj[i];
}
return null;
}
// get Worksheet Row Size(height)
function getWorkSheetRowCount(tagObj)
{
var tableObj = tagObj.getElementsByTagName("Table")[0];
return tableObj.getElementsByTagName("Row").length;
}
// get Worksheet Col Size(width)
function getWorkSheetColCount(tagObj)
{
var tableObj = tagObj.getElementsByTagName("Table")[0];
var rowObj = tagObj.getElementsByTagName("Row")[0];
return rowObj.getElementsByTagName("Cell").length;
}
// get Cell Data
function getCellData(xml,sheetName,xPos,yPos)
{
var wsObj = getWorkSheet(xml,sheetName);
if (!wsObj) return null;
var wSize = getWorkSheetColCount(wsObj);
var hSize = getWorkSheetRowCount(wsObj);
if ((xPos < 0) || (xPos >wSize) || (yPos < 0) || (yPos > hSize)) return null;
var tableObj = wsObj.getElementsByTagName("Table")[0];
var rowObj = tableObj.getElementsByTagName("Row")[yPos];
var cellObj = rowObj.getElementsByTagName("Cell")[xPos];
return cellObj.getElementsByTagName("Data")[0].firstChild.nodeValue;
}

【サンプル】
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=shift_jis">
<title>ExcelのXMLデータを表示する</title>
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript" src="Lib_Excel.js"></script>
<script type="text/javascript"><!--
function loadDataFile(fileName)
{
new Ajax.Request(fileName, { method: 'get', onComplete: displayData });
}
function displayData(httpObj)
{
var sheetName = "Sheet"
var XML = httpObj.responseXML;
var resultData = "";
for (ws=1; ws<=2; ws++)
{
var wsObj = getWorkSheet(XML, sheetName+ws);
var w = getWorkSheetColCount(wsObj);
var h = getWorkSheetRowCount(wsObj);
resultData += "<table border='1'>";
for (i=0; i<h; i++)
{
resultData += "<tr>";
for (j=0; j<w; j++)
{
var n = getCellData(XML,sheetName+ws,j,i);
resultData += "<td>"+n +"</td>";
}
resultData += "</tr>";
}
resultData += "</table>";
}
$("result").innerHTML = resultData;
}
// --></script>
</head>
<body>
<h1>ExcelのXMLデータを表示する</h1>
<p>複数のシートのExcelのXMLデータを読み込み表示します</p>
<form>
<input type="button" value="XMLを読み込み" onClick="loadDataFile('menu.xml')"><br>
</form>
<div id="result"></div>
</body>
</html>


[目次へ]

(2006.2.21)