2013-03-20 31 views
0

我試圖添加一個導出按鈕到我的jsp頁面,該頁面將表格數據導出到Excel。該功能可用,但我的輸出文件不顯示正確的格式。是否有另一種方法來做到這一點我也需要一些可以在IE中使用的東西。導出Html表格到Excel文件 - 獲取不正確的格式

enter image description here

見下文...幫助!

<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"> 

回答

1

對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; 
} 
+0

此外,由於某種原因,每次導出時都會執行兩次,因此每次都打開兩個重複的工作簿。 – Fahad 2013-03-20 21:35:45

+0

嗨,當我使用innerHTML而不是innerText時,我發現HTML標籤在Excel中被複制而不是被格式化。你能幫我解決這個問題嗎?謝謝。 – user318197 2015-08-31 12:37:05

+0

或者你能告訴我是否可以在Excel單元格中創建一個超鏈接? – user318197 2015-09-01 04:31:02

1

使用CSV格式,可讀爲MS Excel中,OpenOffice或LibreOffice的等等

試想一下表:

| 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

我會寫一些簡單的腳本,將通過每行循環,並寫入值由,分離。

我希望這是你在找什麼

1

只是傳遞HTML字符串變量htmlData,夫婦有沒有像其採取默認名稱的問題,當你打開Excel它說無效的格式,但數據是正確的格式。

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

http://jsfiddle.net/DYqXa/

0

要導出的表中的「內容」,但不是實際的表標籤本身。如果您將表格放入div中,並導出DIV的內容,它應該按預期工作。

雖然只是其他筆記。首先,您可以假設此代碼不會用於IE以外的瀏覽器,因爲它需要剪貼板訪問。其次,您需要將window.clipboardData.setData部件移動到AFTER之後,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"> 
相關問題