Javascript 将Html表格导出到Excel文件-格式不正确

Javascript 将Html表格导出到Excel文件-格式不正确,javascript,jsp,html-table,export-to-excel,Javascript,Jsp,Html Table,Export To Excel,我正在尝试向jsp页面添加一个导出按钮,该按钮将表数据导出到Excel。该函数可以工作,但我的输出文件没有显示正确的格式。有没有其他方法可以做到这一点,我也需要一些东西,将在IE工作 见下文。。。救命啊 <script Language="javascript"> function ExportHTMLTableToExcel() { var thisTable = document.getElementById("myTable").innerHTML; windo

我正在尝试向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>&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">

函数ExportHTMLTableToExcel()
{
var thisTable=document.getElementById(“myTable”).innerHTML;
window.clipboardData.setData(“文本”,此表);
var objExcel=新的ActiveXObject(“Excel.Application”);
objExcel.visible=true;
var objWorkbook=objExcel.Workbooks.Add;
var objWorksheet=objWorkbook.工作表(1);
粘贴;
}
条形码
起源
使用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
-->文件.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
-->文件.csv

我将编写一些简单的脚本,循环遍历每一行,并编写由
分隔的值


我希望这就是你想要的

这是我在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; 
}
函数写入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=新的ActiveXObject(“Excel.Application”);
var ExcelWorkbook=ExcelApp.Workbooks.Add();
var ExcelSheet=ExcelWorkbook.ActiveSheet;//新建ActiveXObject(“Excel.Sheet”);
//ExcelSheet.Application.Visible=true;
ExcelApp.Visible=true;
ExcelSheet.Range(“A1”、“Z1”).Font.Bold=true;
ExcelSheet.Range(“A1”、“Z1”).Font.ColorIndex=23;
//格式化表格标题

对于(var i=0;i这是我在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; 
}
函数写入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=新的ActiveXObject(“Excel.Application”);
var ExcelWorkbook=ExcelApp.Workbooks.Add();
var ExcelSheet=ExcelWorkbook.ActiveSheet;//新建ActiveXObject(“Excel.Sheet”);
//ExcelSheet.Application.Visible=true;
ExcelApp.Visible=true;
ExcelSheet.Range(“A1”、“Z1”).Font.Bold=true;
ExcelSheet.Range(“A1”、“Z1”).Font.ColorIndex=23;
//格式化表格标题

对于(var i=0;i只需将html字符串传递给htmlData变量,其中有两个问题,比如它采用默认名称,当您打开excel时,它表示格式无效,但数据格式正确

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

只需将html字符串传递给htmlData变量,就有两个问题,比如它使用默认名称,当您打开excel时,它会显示无效格式,但数据格式正确

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

您导出的是表的“内容”,而不是实际的表标记本身。如果您将表放在div中,并导出div的内容,则应能正常工作

不过,还有一些其他注意事项。首先,您可以假设此代码不会在IE以外的浏览器中使用,因为它需要剪贴板访问。其次,您需要在Excel对象实例化后将
窗口.clipboardData.setData
部分移动到以覆盖较新版本的Excel(不访问在创建之前创建的剪贴板内容)


函数ExportHTMLTableToExcel()
{
var thisTable=document.getElementById(“myDiv”).innerHTML;
window.clipboardData.setData(“文本”,此表);
var objExcel=新的ActiveXObject(“Excel.Application”);
objExcel.visible=true;
var objWorkbook=objExcel.Workbooks.Add;
var objWorksheet=objWorkbook.工作表(1);
粘贴;
}
可乐
可乐
可乐
1.
2.
3.
4.
5.
6.
您导出的是表的“内容”,而不是实际的表标记本身。如果您将表放在div中,并导出div的内容,它应该可以正常工作

不过,还有一些其他注意事项。首先,您可以假设此代码不会在IE以外的浏览器中使用,因为它需要剪贴板访问。其次,您需要在Excel对象实例化后将
窗口.clipboardData.setData
部分移动到以覆盖较新版本的Excel(不访问在创建之前创建的剪贴板内容)


函数ExportHTMLTableToExcel()
{
var thisTable=document.getElementById(“myDiv”).innerHTML;
window.clipboardData.setData(“文本”,此表);
var objExcel=新的ActiveXObject(“Excel.Application”);
objExcel.visible=true;
var objWorkbook=objExcel.Workbooks.Add;
var objWorksheet=objWorkbook.工作表(1);
粘贴;
}
可乐
可乐
可乐
1.
2.
3.
4.
5.
6.
此外,