[英]Export Html table to Excel file - getting incorrect format
我試圖在我的jsp頁面上添加一個導出按鈕,該按鈕會將表數據導出到Excel。 該功能有效,但是我的輸出文件未顯示正確的格式。 還有另一種方法可以做到這一點。我還需要在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> </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">
這是我在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;
}
使用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
我將編寫一些簡單的腳本,該腳本將遍歷每一行並寫入以,
分隔的值。
我希望這是你要找的
只需將html字符串傳遞給htmlData變量,就會出現一些問題,例如其采用默認名稱,並且在打開excel時會說格式無效,但數據格式正確。
var htmlData = "<some html tble string here />";
您正在導出表的“內容”,而不是實際的表標記本身。 如果將表放在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">
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.