0

テーブル データを Excel にエクスポートするエクスポート ボタンを jsp ページに追加しようとしています。関数は機能しますが、出力ファイルに正しい形式が表示されません。これを行う別の方法はありますか?また、IEで動作するものが必要です。

ここに画像の説明を入力

以下を参照してください...ヘルプ!

  <script Language="javascript">
  function ExportHTMLTableToExcel()
 {
 var thisTable = document.getElementById("myTable").innerHTML;
 window.clipboardData.setData("Text", thisTable);
 var objExcel = new ActiveXObject ("Excel.Application");
 objExcel.visible = true;

 var objWorkbook = objExcel.Workbooks.Add;
 var objWorksheet = objWorkbook.Worksheets(1);
 objWorksheet.Paste;
  }
 </script>

<table id="myTable" class="display">
<thead>
    <tr>
        <th>&nbsp;</th>
        <th> Bar Code </th>
        <th>Origin</th>



    </tr>
</thead>
<tbody>
    <c:forEach items="${summary}" var="summary">
        <tr>
    <td ><c:outvalue="${summary.eventDesc}" /></td>
    <td><a href="AnalysisController?value=${summary.labelNbr}"> <c:out
        value="${summary.labelNbr}" /> </a></td>
    <td><c:outvalue="${summary.origin}" /></td>

        </tr>
    </c:forEach>
</tbody>
 </table>

 <input type="button" onclick="ExportHTMLTableToExcel()"value="Export">
4

4 に答える 4

2

これは、IE で動作する JavaScript コードです。必要に応じてフォーマットを変更できます。

function write_to_excel() 
{
    str="";
    var myTable = document.getElementById('myTable');
    var rows = myTable.getElementsByTagName('tr');
    var rowCount = myTable.rows.length;
    var colCount = myTable.getElementsByTagName("tr")[0].getElementsByTagName("th").length; 

    var ExcelApp = new ActiveXObject("Excel.Application");
    var ExcelWorkbook = ExcelApp.Workbooks.Add();
    var ExcelSheet = ExcelWorkbook.ActiveSheet;//new ActiveXObject("Excel.Sheet"); 
    //ExcelSheet.Application.Visible = true;
    ExcelApp.Visible = true;

    ExcelSheet.Range("A1", "Z1").Font.Bold = true;
    ExcelSheet.Range("A1", "Z1").Font.ColorIndex = 23;     

    //Format table headers
    for(var i=0; i<1; i++) 
    {   
        for(var j=0; j<colCount-2; j++) 
        {           
            str= myTable.getElementsByTagName("tr")[i].getElementsByTagName("th")[j].innerHTML;
            ExcelSheet.Cells(i+1,j+1).Value = str;
        }
        ExcelSheet.Range("A1", "Z1").EntireColumn.AutoFit();
    }
    for(var i=1; i<rowCount; i++) 
    {
        for(var k=0; k<colCount-2; k++) 
        {
            str= rows[i].getElementsByTagName('td')[k].innerHTML;
            ExcelSheet.Cells(i+1,k+1).Value = myTable.rows[i].cells[k].innerText;
        }
        ExcelSheet.Range("A"+i, "Z"+i).WrapText = true;
        ExcelSheet.Range("A"+1, "Z"+i).EntireColumn.AutoFit();
    }

    //ExcelSheet.SaveAs("C:\\TEST.XLS");
    //ExcelSheet.Application.Quit();

    return; 
}
于 2013-03-20T20:06:10.143 に答える
1

MS Excel、OpenOffice、LibreOfficeなどで読み取り可能なCSV形式を使用してください。

テーブルを想像してみてください。

| H1 | H2 | H3 | H4 |

| x1 | x2 | x3 | x4 |
   
| y1 | y2 | y3 | y4 |

CSVは次のようになります

H1,H2,H3,H4
x1,x2,x3,x4
y1,y2,y3,y4

-> file.csv

各行をループし、で区切られた値を書き込む簡単なスクリプトを作成します,

これがあなたが探しているものであることを願っています

于 2013-03-20T20:02:26.290 に答える
1

html文字列をhtmlData変数に渡すだけで、デフォルト名を取得するなどの問題がいくつかあり、Excelを開くと無効な形式と表示されますが、データは正しい形式です。

var htmlData = "<some html tble string here />";

http://jsfiddle.net/DYqXa/

于 2013-07-24T05:51:05.193 に答える
0

テーブルの「コンテンツ」をエクスポートしていますが、実際のテーブルタグ自体はエクスポートしていません。テーブルを div 内に配置し、DIV の内容をエクスポートすると、期待どおりに動作するはずです。

ただし、他のいくつかの注意事項があります。まず、クリップボードへのアクセスが必要なため、このコードは IE 以外のブラウザーでは使用されないと想定できます。window.clipboardData.setData次に、新しいバージョンの Excel (以前に作成されたクリップボードの内容にアクセスしない) をカバーするために、Excel オブジェクトがインスタンス化された後にパーツを移動する必要があります。

<script Language="javascript">
    function ExportHTMLTableToExcel()
    {
       var thisTable = document.getElementById("myDiv").innerHTML;
       window.clipboardData.setData("Text", thisTable);
       var objExcel = new ActiveXObject ("Excel.Application");
       objExcel.visible = true;
       var objWorkbook = objExcel.Workbooks.Add;
       var objWorksheet = objWorkbook.Worksheets(1);
       objWorksheet.Paste;
    }
</script>

<div id="myDiv">
    <table id="myTable" class="display">
        <tr>
            <th>Col1</th>
            <th>Col2</th>
            <th>Col3</th>
        </tr>
        <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
        </tr>
        <tr>
            <td>4</td>
            <td>5</td>
            <td>6</td>
        </tr>
    </table>
</div>

<input type="button" onclick="ExportHTMLTableToExcel()"value="Export">
于 2013-11-12T15:10:15.843 に答える