2014-10-10 32 views
0

我一直在为此苦苦挣扎两周,其中大部分时间都花在等待响应我的支持问题上。我有解决方案,我将在这里发布这个解决方案,希望它能帮助下一个遇到这个问题的人。我会投入很多不必要的细节,以增加下一个发现这个问题的人的几率。从ActiveReports导出Excel时出现错误8

我正在使用MVC5网站,并使用ActiveReports 8 HTML5查看器来显示IList绑定的基于代码的节报告。我已经使用availableExports参数启用了PDF,Word和Excel导出到GrapeCity.ActiveReports.Viewer javascript函数。查看器在页面上正确呈现,并对ActiveReports.ReportSerice.asmx进行预期的调用,它将返回呈现报告所需的信息,包括用于流式传输数据的URL。报告在查看器中显示得很好。到现在为止还挺好。

在我的开发机器上,我可以导出为PDF,Word和Excel。但是,当部署到测试服务器时,Excel导出停止工作,浏览器只显示一个保存文件对话框,试图保存名为ActiveReports.ar8的文件?blahblahblah。通过使用Fiddler进行挖掘,我确定这与从上述报告服务调用返回的URL几乎完全相同,除了一些参数(如“Command = Export”和“ExportFormat = Xls”)之外。

保存此“文件”会生成一个名为ActiveReports.xls的0字节文件。例如,我可以通过删除关键dll(例如GrapeCity.ActiveReports.Export.Pdf)然后询问PDF导出来为其他导出类型模拟此行为。在我看来,ActiveReports(至少从版本8.1.414.0)吞下某些服务器端错误,如缺少dll,并返回404错误代码给客户端。我认为500错误与有关丢失的详细信息将优于通用404.

这使我相信测试服务器上缺少某些东西。由于我在所有ActiveReports dll上设置了“复制本地”,并且我可以看到它们都已成功部署到测试服务器,所以缺少的部分必须是本地机器的GAC中存在的内容,而不是服务器上的内容。

使用Fiddler,我已确定对ActiveReports.ar8?blahblahblah URL的响应具有404的返回码。生成的404响应中的content-disposition标题已设置为“attachment; filename = ActiveReports.xls “,但Content-Type是”text/html“而不是预期的”application/vnd.ms-excel“。这告诉我,在放弃之前,出口至少是通过加工的中途。

防止Excel导出完成的服务器上缺少什么?

回答

1

拼图的缺失部分是DocumentFormat.OpenXml.dll,其副本可在“C:\ Program Files(x86)\ Common Files \ ComponentOne \ ActiveReports 8”文件夹中找到。具有讽刺意味的是,它紧跟在所有GrapeCity.ActiveReports程序集旁边,但没有任何其他程序集使用它的任何迹象,您可以像我一样轻松地查看它,看它是否与该文件夹中的其他东西有关,例如许可证生成器。

将对DocumentFormal.OpenXml.dll的引用添加到Web项目中,并将Copy Local设置为true可确保将dll与其他所有内容一起部署。我的Excel导出工作现在很好。

0

对于您所面临的不便,我们深表歉意。你是对的,当使用Excel导出ActiveReports时,服务器上也需要'DocumentFormat.OpenXml.dll'。我已经提出了要添加到文档中的请求。 感谢您将此通知给我们。

问候

+0

它添加到文档将是有益的,但我希望得到它在计算器上,因为,说实话,这是人们最有可能找到它,如果他们在未来面临着类似的问题。 – Mel 2014-11-06 04:41:47