我有一个用MVC编写的3层Web应用程序(数据库,应用程序层,Web层)。
我想使用数据库中的数据在运行时生成Excel文件。
我最初的想法是在Web项目中引用Excel库并在控制器中生成文件。我可以直接将其流式传输到响应中,我可以将该文件视为数据的不同视图。我已经有了一个服务方法,它返回数据库中的数据,就像它在页面上使用一样。
我正在考虑在应用层上生成文件,然后将byte[]
返回到Web层。这里的论点是文件生成是业务逻辑的一部分。
你会做什么?
答案 0 :(得分:1)
excel输出实际上是视图的责任,因此您必须在控制器中执行此操作。模型/应用层只负责数据,而不是它的表示。
如果您使用的是ASP.Net MVC,则可以声明一个ExcelActionResult,它接收视图模型并将其转换为CSV / Excel输出。一些相关信息:
答案 1 :(得分:0)
我同意,这是在BLL(应用层)生成文件的正确方法。在project中查看我们如何完成它。它有点复杂,因为我们的导出/导入模型可插拔,但它可能对你有意义。
首先我们描述了2个接口:
/// <summary>
/// Defines methods and properties for an import provider.
/// </summary>
public interface IImportProvider : IExtension
{
#region Methods
/// <summary>
/// Imports a data.
/// </summary>
/// <param name="data">The data to be imported.</param>
/// <param name="mimeType">The data MIME type.</param>
void Import(byte[] data, string mimeType);
#endregion
}
public interface IExportProvider : IExtension
{
#region Methods
/// <summary>
/// Exports a data.
/// </summary>
/// <param name="mimeType">Contains the data MIME type when this method returns.</param>
/// <returns>The exported date.</returns>
byte[] Export(ref string mimeType);
#endregion
}
我们可以为任何类型的导入/导出格式实现这些接口。因此,我们在BLL(应用层)处理导入/导出数据,然后,在导出的情况下,我们将其发送到表示层(Web层)。表示层按MIME类型解析文件扩展名并返回文件结果:
return File(data, mimeType, String.Format("export.{0}", MimeTypeHelper.GetExtByMimeType(mimeType)));
这样,表示层不需要知道使用了哪种导入/导出格式。表示层所需的全部内容,用于从/向用户接收/发送数据。
答案 2 :(得分:-1)
根据所涉及的格式化数量,我可能会创建一个Reporting Services(RS)报告,并使用RS Web服务从数据库中的数据中获取Excel电子表格。