Javascript HTML表格转换为Excel格式&;扩展don';不匹配

Javascript HTML表格转换为Excel格式&;扩展don';不匹配,javascript,jquery,excel,Javascript,Jquery,Excel,我有一个将HTML表格转换为Excel文档的函数。但是,在打开文件时,我从Excel收到以下消息: “something.xls”的文件格式和扩展名不匹配。等等等等 下面是我用于导出的函数,它是线程@SamPopes answer的一个稍加编辑的版本。obj参数是使用document.createElement('table')创建的table元素 是否有任何方法在打开文件时阻止此消息 function export(obj) { var tab_text="<table border

我有一个将HTML表格转换为Excel文档的函数。但是,在打开文件时,我从Excel收到以下消息:

“something.xls”的文件格式和扩展名不匹配。等等等等

下面是我用于导出的函数,它是线程@SamPopes answer的一个稍加编辑的版本。
obj
参数是使用
document.createElement('table')创建的
table
元素

是否有任何方法在打开文件时阻止此消息

function export(obj) {
  var tab_text="<table border='2px'><tr>";
  var textRange; var j=0;
  tab = obj; //Table


  for(j = 0 ; j < tab.rows.length ; j++){     
    tab_text=tab_text+tab.rows[j].innerHTML+"</tr>";
    //tab_text=tab_text+"</tr>";
  }

  tab_text=tab_text+"</table>";
  tab_text= tab_text.replace(/<A[^>]*>|<\/A>/g, "");//remove if you want links in your table
  tab_text= tab_text.replace(/<img[^>]*>/gi,""); // remove if you want images in your table
  tab_text= tab_text.replace(/<input[^>]*>|<\/input>/gi, ""); // removes input params

  var ua = window.navigator.userAgent;
  var msie = ua.indexOf("MSIE "); 

  if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))      // If Internet Explorer
    {
      txtArea1.document.open("txt/html","replace");
      txtArea1.document.write(tab_text);
      txtArea1.document.close();
      txtArea1.focus(); 
      sa=txtArea1.document.execCommand("SaveAs",true,"export.xls");
  } else { //other browser not tested on IE 11
      sa = window.open('data:application/vnd.ms-excel,' + encodeURIComponent(tab_text));            
      return (sa);
  }
}
函数导出(obj){
var tab_text=“”;
var textRange;var j=0;
tab=obj;//表
对于(j=0;j|/g,“”;//如果需要表中的链接,请删除
tab_text=tab_text.replace(//*>/gi,“”;//如果希望表中有图像,请删除
tab_text=tab_text.replace(//*>|/gi,“”)//删除输入参数
var ua=window.navigator.userAgent;
变量msie=ua.indexOf(“msie”);
如果(msie>0 | |!!navigator.userAgent.match(/Trident.*rv \:11\./)//如果Internet Explorer
{
打开(“txt/html”,“replace”);
txtArea1.文档。写入(制表符文本);
txtArea1.document.close();
txtArea1.focus();
sa=txtArea1.document.execCommand(“SaveAs”,true,“export.xls”);
}else{//其他浏览器未在IE 11上测试
sa=window.open('data:application/vnd.ms excel',+encodeURIComponent(制表符文本));
返回(sa);
}
}

正如我在上面的评论中所说,下面是创建CSV文件的代码。这可以避免您收到的错误消息,但将消除您格式化数据的任何机会(据我所知)。下面是我的代码,它对IE使用一个进程,对所有其他浏览器使用第二个进程:

function exportTotalDataFile(){
    var dataText = "";    
    var rowText = "";

    'allData is generated through an AJAX call that creates a JSON'
    'this loop creates the header row'
    for (var index in allData[0]) {
        rowText += index + ',';
    }

    'takes the trailing comma out, adds new row'
    rowText = rowText.slice(0, -1);
    dataText += rowText + '\r\n';

    'Produces the data rows'
    for (var i = 0; i < allData.length; i++) {
        var rowText = "";

        for (var index in allData[i]) {
            rowText += '"' + allData[i][index] + '",';
        }

        rowText.slice(0, rowText.length - 1);
        dataText += rowText + '\r\n';
    }

    var fileName = "Losses Report"; 

    'Internet Explorer logic'
    var isIE = false || !!document.documentMode;
    if (isIE){
        var IEwindow = window.open();
        IEwindow.document.write('sep=,\r\n' + dataText);
        IEwindow.document.close();
        IEwindow.document.execCommand('SaveAs', true, fileName + ".csv");
        IEwindow.close();
    } 
    'All the other browsers'
    else {
        var uri = 'data:text/csv;charset=utf-8,' + escape(dataText);
        var link = document.createElement("a");  
        link.href = uri;
        link.style = "visibility:hidden";
        link.download = fileName + ".csv";
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
    }

}
函数exportTotalDataFile(){
var dataText=“”;
var rowText=“”;
'所有数据都是通过创建JSON的AJAX调用生成的'
'此循环创建标题行'
对于(allData[0]中的var索引){
行文本+=索引+',';
}
'去掉尾随逗号,添加新行'
rowText=rowText.slice(0,-1);
dataText+=rowText+'\r\n';
'生成数据行'
对于(var i=0;i

很抱歉,这种方法在格式化部门受到限制,但我希望这能有所帮助

是否所有内容都像您希望的那样输出,但您只是想停止邮件?@BrandenKeck是的,没错,抱歉,我没有简单的答案。当我使用js导出时,我总是创建一个CSV文件,如下所示:。。。我从来没有犯过错误。不过,我希望有人能回答这个问题,我很想看看如何从JS操作excel。谢谢你的回答。我可能会尝试将数据导出为csv,但找不到支持IE8+的跨浏览器方法。例如,有没有办法格式化CSS数据,使表格标题以粗体显示?对不起,我不知道如何进行CSS格式化,但我将发布我对跨浏览器问题的解决方案作为答案。。。