通过Javascript在Excel中打开HTML页面

通过Javascript在Excel中打开HTML页面,javascript,excel,Javascript,Excel,我们有以HTML生成的报告,我们的用户经常在Excel中打开这些报告,我们通过使用内容类型提供足够简单的服务。然而,我们最近出现了一个褶皱弹出窗口:其中一些报告使用大量Javascript进行动态分组/排序,用户希望将此“完成”版本的报告下载到Excel中。我有一个功能强大的Javascript函数: var uri = 'data:application/vnd.ms-excel;base64,'; var template = '<html xmlns:o="urn:schemas-m

我们有以HTML生成的报告,我们的用户经常在Excel中打开这些报告,我们通过使用内容类型提供足够简单的服务。然而,我们最近出现了一个褶皱弹出窗口:其中一些报告使用大量Javascript进行动态分组/排序,用户希望将此“完成”版本的报告下载到Excel中。我有一个功能强大的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));
var uri='数据:application/vnd.ms-excel;base64';
var模板=“”;
模板+='';
模板+='{table}';
var base64=函数{
返回窗口.btoa(unescape(encodeURIComponent));
};
var格式=函数(s,c){
返回s.replace(/{(\w+)}/g,函数(m,p){返回c[p];});
};
var ctx={工作表:名称| |'工作表',表:daBody};
window.location.href=uri+base64(格式(模板,ctx));
我发现IE不支持window.btoa,所以我解决了这个问题,但现在我在尝试在Excel中打开数据时出现以下错误:

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

尽管有这样的消息,我相信这是由于URI中的base64字符串太长造成的(我过去看到IE不接受非常长的URL,并且相信这是连接的)


那么,有没有人可以在IE中使用其他方法来实现这一点?

找到了一种有效的方法:

  • 使用jQuery创建表单,收集页面的所有HTML(在 Javascript完成)并将其发布到我的服务器
  • 在我的服务器上,我创建了一个函数,该函数采用post格式并返回它 返回类型为“application/msexcel”
  • 添加了在报告页面的window.load上运行此Javascript的脚本

  • 它相当粗糙,但在所有浏览器中都像champ一样工作

    URL/I的实际限制(尤其是在使用IE时)约为2k个字符。正确…因此,需要另一种选择。我调查了ActiveX,但我们为各种web用户提供服务,坚持要求他们都允许使用ActiveX并将我们添加到他们的受信任列表中要求有点高。作为一种解决方法,您可以在DOM中附加一个表单,然后使用POST通过服务器将表数据发送到客户端。蒂姆:我想您在这方面做得不错。是时候玩弄和测试了。我有一个类似的问题要解决。使用ASP.NET MVC4,我将转换后的xml发送回Excel,并希望在Excel中显示它。我有它的Chrome和FF工作,但不能让IE或Safari工作。在Javascript中(对于FF/Chrome的情况),我输入document.createElement(“a”),并将其下载设置为文件名,将其href设置为“data:…”uri。这会弹出“打开/保存”对话框,几乎一切正常[FF I Excel提示文件格式不同于扩展名]。在ASP.NET MVC4/VS2012中,我有一个类似的问题需要解决,我会发回xml(通过ajax成功函数),并希望在Excel中显示它--即打开“打开/保存文件”对话框。我让它为Chrome和FF工作[使用带有“下载”属性的“a”元素],但无法让IE或Safari工作。对于IE/Safari,我尝试了一个window.open('data:…')。Safari没有发生任何事情[甚至没有错误]。我设法让IE10打开一个新选项卡,但它只显示数据:application/vnd.ms excel,。。。。在地址栏中。有什么帮助吗?将我的解决方案发布在:\