2009-07-06 6 views
-1

JSPからHTMLテーブルを取得し、それをExcelフォーマットに変換してユーザーにエクスポートする再利用可能なコードを記述します。私は、同じ情報を抽出するためにJavaのHTMLを解析するのではなく、HTML DOM Table Objectを利用したいと考えています。これに最も大きな利点は、Excelにセルを書き込む前にチェックボックス、ボタンなどを削除するように各セルを検査することです。JavaサーブレットでJavaScriptテーブルDOMにアクセスする

HTML表:

<a href="javascript: export();">Export to Excel</a> 
<table id="exportTable"> 
    ... 
</table> 

はJavaScript:

function export() { 
    var table = document.getElementById("exportTable"); 
    // Send table object to Servlet somehow 
} 

概念ができるようにJavaScriptがcommon.jsのいくつかの並べ替えに行くだろう私の心の中でセットアップはこのような何かを行くだろうサイトの任意のページの任意のテーブルで使用できます。

** UPDATE **

JSPは、テーブルを生成するJavaオブジェクトを使用しますが、テーブル自体が毎回異なるものになります。私はテーブルのDOM構造を得ることができる一般的なソリューションを探しています。それによって、既に実行されているtable.rowsとtable.cellsを利用して、各セルを調べてExcelで必要としないタグを削除します、チェックボックスなど)、応答タイプをExcelに設定してユーザーに出力します。それは理にかなっていますか?

+0

HTMLテーブルはExcelで解釈することができます。つまり、必要なのはマークアップとcontent-type "application/ms-excel"です。 –

+0

JSPでテーブルを生成しているので、テーブルを作成しているデータを出力してみてください。実際のJavaScript実装については、Ajaxの機能とDom操作をjQuery(http://jquery.com)で見てください。 – Daff

+2

私は理解できませんが、ここに質問がありますか? –

答えて

1

セルからのデータをシンプルなJSONオブジェクトにシリアル化し、Java側で利用可能な多くのJSON librariesのうちの1つを使用して、使用可能なオブジェクトに変換し直します。このような

何か:

function processTable(tableId) { 
    var jsonTable = []; 
    var tableObj = document.getElementById(tableId); 
    if (tableObj) { 
     for (var x=0, y=tableObj.rows.length; x < y; x++) { 
      var tableRow = tableObj.rows[x]; 
      var jsonRow = []; 
      for (var i=0, j=tableRow.cells.length; i < j; i++) { 
       var tableCell = tableRow.cells[i]; 
       // removes any line feeds or tabs 
       jsonRow.push(tableCell.innerHTML.replace(/\t|\n/g, "")); 
      } 
      jsonTable.push(jsonRow) 
     } 
    } 
    return JSON.stringify(jsonTable); 
} 

これは直接here利用できるパブリックドメインのJSON.stringify()ルーチンを使用しています。

これで文字列をサーバーに渡し、オブジェクトをJava-landで再水和することができます。テーブルの内容に直接対応する多次元の値の配列を取得します。

注:テーブル全体を取得します。テーブル。テーブル本体を取得したいだけの場合は、次のように、上記のコードを変更してtBodyを繰り返し処理する必要があります。

function processTable(tableId) { 
    var jsonTable = []; 
    var tableObj = document.getElementById(tableId); 
    if (tableObj) { 
     for (var a=0, b=tableObj.tBodies.length; a < b; a++) { 
      var tBody = tableObj.tBodies[a]; 
      for (var x=0, y=tBody.rows.length; x < y; x++) { 
       var tableRow = tableObj.rows[x]; 
       var jsonRow = []; 
       for (var i=0, j=tableRow.cells.length; i < j; i++) { 
        var tableCell = tableRow.cells[i]; 
        // removes any line feeds or tabs 
        jsonRow.push(tableCell.innerHTML.replace(/\t|\n/g, "")); 
       } 
       jsonTable.push(jsonRow) 
      } 
     } 
    } 
    return JSON.stringify(jsonTable); 
} 
0

POSTテーブルをサーバーに送ります。 JavaScriptのようにDOMにアクセスするには、Rhinoが必要です。しかし、ちょうどJDOMのように落ちやすいものを貼り付けることをお勧めします。次に、ヘッダーに "application/ms-excel"というように変更されたcontent-typeを持つテーブルをエコーバックします。

関連する問題