首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HTML excel导出

HTML excel导出
EN

Stack Overflow用户
提问于 2015-12-18 14:39:54
回答 1查看 2.6K关注 0票数 1

我正在导出一个HTML表格到和Excel格式文件,然后下载它作为一个.xls。这在Firefox、Chrome等浏览器中运行得很好,但在IE中却不像预期的那样。

下面是我正在使用的函数。最后的if语句会发现浏览器是IE还是其他浏览器。

代码语言:javascript
运行
复制
function exportTable(obj) {
  var tab_text="<table border='2px'><tr>";
  var textRange; var j=0;
  tab = obj;


  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 = window.open();
      txtArea1.document.open("txt/html","replace");
      txtArea1.document.write(tab_text);
      txtArea1.document.close();
      txtArea1.focus(); 
      sa=txtArea1.document.execCommand("SaveAs",false,"export.xls");
      txtArea1.window.close()
  } else { //other browser not tested on IE 11
      sa = window.open('data:application/vnd.ms-excel,' + encodeURIComponent(tab_text));            
      return (sa);
  }
}

如果是IE,则创建一个新窗口,将HTML输出写入其中,然后询问用户保存文件的位置。当对话框出现时,用户被迫将文件保存为.html.txt

这就是它变得奇怪的地方。尽管“另存为”框强制用户将其下载为.html.txt,但文件本身被保存为.xls

可以禁用此提示吗?还是还有别的工作要做呢?我不希望最终用户对此感到困惑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-18 14:59:41

尝试使用隐藏的iframe而不是新的窗口。为我解决了很多问题。为了支持IE9,我最后得到了以下代码片段:

代码语言:javascript
运行
复制
if (event.data.browser !== 'IE') {
    $.util.open('data:application/vnd.ms-excel,' + event.data.content);
    return true;
}
else { 
    // The iframe already has to be included in the HTML, or you'll get a 'no access error'.
    frame.document.open("txt/html","replace");
    frame.document.write(event.data.content);
    frame.document.close();
    frame.focus(); 
    command = frame.document.execCommand("SaveAs", true, "data_table.xls");
    return command;                     
}

唯一的缺点是它不是一个“真实的”excel .xls文件,直到您第一次打开它并将它作为一个.xls重新保存,这种技术只是利用了优秀的能力来理解基本的html标记。

一个更好但更复杂的方法是实际构造一个base64编码的'string‘,如msdn文档所示,但最终这对项目来说已经足够了。

或者和所有的东西一样,有很多lotsa库可以帮你做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34358041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档