繁体   English   中英

将Excel文件导出到浏览器-ASP.Net

[英]Exporting Excel file to the browser - ASP.Net

我正在尝试将从数据表创建的Excel文档导出到浏览器/客户端。 这在文件后面的aspx代码中可以正常工作,但是当我使用MVC将方法移至.cs文件时,该方法不会在浏览器下载栏中生成excel文件,因此响应将以文本和编码字符的形式返回到请求中响应,下面是不生成文件的控制器中的代码(该代码首先将文件保存到硬盘上,该代码可以正常工作,只是不会发送到浏览器)

protected void ExportToExcel_Click(object sender, EventArgs e)
{
    var fromdate = Convert.ToDateTime(DateFrom);
    var todate = Convert.ToDateTime(DateTo);
    var type = ddlTransactionType.SelectedValue;
    var transstatus = P2UFramework.Payment.BrainTree.GetTransactionStatus(type);

    var  transdetails = P2UFramework.Payment.BrainTree.Transactions_ByDate(transstatus, fromdate, todate.AddDays(1));

    //var dt = P2UFramework.Utility.Conversion.ListToDataTable.ToDataTable(transdetails);

    var dt = new DataTable();
    dt.Columns.Add("Date");
    dt.Columns.Add("TransactionId");
    dt.Columns.Add("PatientId");
    dt.Columns.Add("PatientDetails");
    dt.Columns.Add("Email");
    dt.Columns.Add("RxOrderNo");
    dt.Columns.Add("PODOrderNo");
    dt.Columns.Add("OTCOrderNo");
    dt.Columns.Add("BrainTreeTransactionId");
    dt.Columns.Add("Amount");
    dt.Columns.Add("TransactionStatus");


    foreach (var item in transdetails)
    {
        dt.Rows.Add(item.TransactionDate,  item.P2UTransactionId, item.CustomerId, item.CustomerName, item.Email, item.PrescriptionOrderID,
            item.PodOrderID, item.OtcOrderID, item.BrainTreeTransactionId, item.Amount, item.Status);
    }

    // Export to excel
    string outputFile = KwibooCommon.DataExtract.Write(dt, Server.MapPath("~/_Assets/"), KwibooCommon.DataExtract.Format.Excel);

    try
    {
        HttpContext.Current.Response.ClearContent();
        HttpContext.Current.Response.ClearHeaders();
        HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + outputFile.Split('\\').Last());
        HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
        HttpContext.Current.Response.WriteFile(outputFile);
        HttpContext.Current.Response.Flush();
        HttpContext.Current.Response.Close();
    }
    catch (ThreadAbortException ex)
    {
        throw ex;
    }
    finally
    {
        try
        {
            File.Delete(outputFile);
        }
        catch (Exception) { }
    }
}

抢,

您将要在端点之间放置一些图层,并出于多种原因最终读取excel文件。

首先,Excel文件本质上是非常易变的,并不意味着它们是诸如SQL甚至Access之类的具体数据源。

其次,将一系列关注点组合到属于多个类的单个方法中。 根据经验,这将成为您将来维护的噩梦。 特别是如果您是VBA专家,则该excel文件已启用宏,并且您将必须保持其向前发展。

假设您必须依靠excel文件。 至少将其读入访问。 SQL Server Express是免费的,可以轻松地开箱即用地处理.csv导入。 如果需要,VS中的服务器连接向导可以处理.mdb文件。 导入数据,制定计划和自动解决方案以进行维护。 理想情况下,有一项服务可以定期从excel文件中将csv读取到SQL中。

我一直处于不得不开发解决方案的局面。 这不是很有趣,但是有一些方法可以使它变得更好。

有一个提供端点的控制器类,仅此而已。 有一个处理业务逻辑的服务层,还有一个除了从您的数据源读取之外什么都不做的存储库层。 我建议它不是.mdb文件,但如果是.VS,则可以处理它。

希望我给了您有关如何处理情况的简要概述。 请询问您是否有任何特定问题。 我去过那里,很高兴为您提供帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM