2011年09月04日

Excelで書きだしたXMLをパースするスクリプト

要件としたはデータはExcelで管理して、Excelで書きだしたXMLを利用してAjaxでサイトを管理するという物。

Excelが書きだしたXMLは次のような感じなので

<Row>
<Cell><Data ss:Type="String">001</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">北海道</Data></Cell>
<Cell><Data ss:Type="Number">1</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">001</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">北海道</Data></Cell>
<Cell><Data ss:Type="Number">1</Data></Cell>
</Row>


なので次のようにすると取得できる。

$("Row",xml).each(function(i){
console.log($("Cell",this).eq(0).text())
});


ただ、空欄のセルなどがあると

<Row>
<Cell><Data ss:Type="String">001</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">北海道</Data></Cell>
<Cell><Data ss:Type="Number">1</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">001</Data></Cell>
<Cell ss:Index="2"><Data ss:Type="Number">1</Data></Cell>
</Row>


といった具合にCell要素は書き出されずにss:index属性が追加される。そうするとeqメソッドだと列数がずれてしまうので次のように貼り列に入れる際にインデックス番号を調整すればいけます。

$("Row",xml).each(function(i){
var data = [],def=0;
for(var i=0;i<12;i++){
if($("Cell",this).eq(i-def).attr("ss:Index")){
var new_def = $("Cell",this).eq(i-def).attr("ss:Index")-i-1;
i=$("Cell",this).eq(i-def).attr("ss:Index")-1;
def = new_def;
}
data[i] = $("Cell",this).eq(i-def).text()
}
console.log(data[2]);
});

タグ:EXCEL xml AJAX
posted by ねこまんま at 11:07 | Comment(0) | TrackBack(0) | Ajax | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/224205627
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック