【问题标题】:How to generate and send to client Excel report in ASP.NET如何在 ASP.NET 中生成并发送到客户端 Excel 报告
【发布时间】:2013-02-21 03:55:19
【问题描述】:

我对在 ASP.net 中生成/发送 Excel 报告的整个问题不熟悉。

下面的代码有时不适用于大量数据(大型 Excel 报告),但前提是用户(不在我们公司)从他的浏览器请求它。如果我运行它,它总是可以工作的,而且我位于服务器所在的同一栋建筑中。

客户端有 IE9 和 MS Office 2010。客户端没有收到任何错误。客户在漫长的等待时间后根本没有收到报告。似乎超时而没有错误。

是否有其他方法可以替代以下方法,为客户提供大型 Excel 报告?

以下代码中是否有任何可能导致问题的错误?

为客户端生成可在 Excel 客户端打开的报告的最佳=稳健方法是什么?

Response.ContentType = "application/ms-excel" 
Response.AddHeader("Content-Disposition", "attachment; filename=" + ReportName + ".xls") 

Response.Write("<table border =1>") 
For Each ch As ColumnHeaders In arrCh 
    If ch.ColumnName <> "" Then 
            pCh = pCh & "<td><b>" & ch.ColumnName & "</b></td>" 
                    pColCount = pColCount + 1 
                End If 
Next 

If pExtraHeader <> "" Then 
    Response.Write(pExtraHeader) 
End If 
Response.Write("<tr>" & pCh & "</tr>") 
If oSQLDataReader.HasRows Then 
    Do While oSQLDataReader.Read() 
            Response.Write("<tr>") 
                For I = 0 To arrCh.Count - 1 
                    If arrCh(I + 1).columnname <> "" Then 
                        Response.Write("<td>" & strColumnValue & "</td>") 
                        If arrCh.Item(I + 1).isTotal = True Then 
                            arrCh.Item(I + 1).placeholder = CDbl(arrCh.Item(I + 1).placeholder) + CDbl(oSQLDataReader.GetValue(I)) 
                        End If 
                     End If 
                Next 
                Response.Write("</tr>") 
        Loop 

        Dim pTotal As String = "" 
        For Each ch As ColumnHeaders In arrCh 
            If ch.ColumnName <> "" Then 
              pTotal = pTotal & "<td><b>" & strColumnValue & "</b></td>" 
          End If 
        Next 
    Response.Write("<tr>" & pTotal & "</tr>" 

End If 
Response.Write("</table>") 

【问题讨论】:

    标签: asp.net excel


    【解决方案1】:

    这就是所有的代码吗?您是否正在刷新响应并最终确定它?

    除此之外,在 excel 的情况下,还有很多服务器组件可以自动生成一个 excel 工作簿并将文件作为附件返回给客户端(所有处理都在服务器上完成)。

    最后(这始终是不得已的措施)您在服务器上安装了 Excel 自动化。

    查看this answer,这里列出了您可用的不同替代方案。

    【讨论】:

    • Response.End() 在 Response.Write() 之后使用。
    • 这段代码不是我写的,看起来 Response.End() 毕竟不应该使用。它看起来像 context.Response.Flush(); context.ApplicationInstance.CompleteRequest();在非错误情况下应在 Response.Write() 之后使用。你同意吗?
    • 是的,要避免 response.end
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    相关资源
    最近更新 更多