通过Javascript在Excel中打开HTML页面

我们有用HTML生成的报告,我们的用户经常在Excel中打开,通过使用内容types我们可以很简单地服务。 但是,我们最近有一个皱巴巴的popup窗口:这些报告中的一些使用了大量的Javascript进行dynamic分组/sorting,并且用户想要将这个“完成”版本的报告下载到Excel中。 我有一个function正常的Javascript函数:

var uri = 'data:application/vnd.ms-excel;base64,'; var template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">'; template += '<head></head>'; template += '<body><table>{table}</table></body></html>'; var base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))); }; var format = function(s, c) { return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }); }; var ctx = {worksheet: name || 'Worksheet', table: daBody}; window.location.href = uri + base64(format(template, ctx)); 

我发现IE不支持window.btoa,所以我解决了这个问题,但是现在当我尝试在Excel中打开数据时出现以下错误:

传递给系统调用的数据区域太小。

我相信,尽pipe有消息,这是由于URI中的base64string太长(我以前见过IE不接受非常长的URL,并且认为这是连接的)。

那么,有没有人有任何其他的方法,我可以在IE中使用这个?

find了一个有效的方法来做到这一点:

  1. 使用jQuery来创build一个表单,收集页面的所有HTML(在Javascript完成后),并将其发布到我的服务器
  2. 在我的服务器上,我创build了一个函数,接受表单后,并返回与“application / msexcel”的返回types
  3. 添加脚本在报告页面的window.load上运行此Javascript

这是非常hacky,但它在所有浏览器中像一个冠军