1

我们使用的是不同的框架,我不能使用 .NET GridView。我们有不同的集合类型和专门的网格。(不继承自 .NET 控件)我需要将数据从 Web 导出到 MS-Excel。这是代码。

   Me.Response.Clear()
   Me.Response.ContentEncoding = System.Text.Encoding.GetEncoding(1254)
   Me.Response.AddHeader("Content-Disposition", "Attachment;filename=Calls.xls")
   Me.Response.AddHeader("Content-type", "application/ms-excel")
            For n As Integer = 0 To Calls.Count - 1
                Me.Response.Write(Calls(n).ID & Chr(9))
                Me.Response.Write(Calls(n).ID & Chr(9))
                Me.Response.Write(Calls(n).DateCreated & Chr(9))
                Me.Response.Write(Calls(n).Employee.Name & Chr(9))
                Me.Response.Write(Calls(n).NetDurationInText & Chr(9))
                Me.Response.Write(Calls(n).Result.Name & Chr(9))
                Me.Response.Write(vbCrLf)
                If n Mod 50 = 0 Then
                    Me.Response.Flush()
                End If
            Next
    Me.Response.End()

但是在排数超过2000-3000之后,网站反应很慢。尽管我每 50 行刷新一次,但 2k-3k 行大约需要 5 分钟。我尝试每 100-200 行刷新一次,还尝试将字符串直接写入 Response(我的意思是 Response.Write("") )当我调试时,它循环并且所有时间都在“for循环”中传递。

有没有比这种方式更快地导出数据的更好主意?

注意:“Calls”是继承自 System.Collections.CollectionBase 的集合

4

2 回答 2

0

如果关闭,请发表评论,我将删除。我是 C#,所以我可能会误解。在您的代码中,看起来您正在构建整个 srtBl,然后再编写它。

    For n As Integer = 0 To Calls.Count - 1
        Me.Response.Write(Calls(n).ID & Chr(9))
        Me.Response.Write(Calls(n).DateCreated & Chr(9))
        Me.Response.Write(Calls(n).Employee.Name & Chr(9))
        Me.Response.Write(Calls(n).Customer.Link.Name & Chr(9))
        Me.Response.Write(Calls(n).Vendor.Link.Name & Chr(9))
        Me.Response.Write(Calls(n).Result.Name & Chr(9))
        Me.Response.Write(vbCrLf)
        If n Mod 50 = 0 Then
            Me.Response.Flush()
        End If
    Next
    Me.Response.End()
于 2012-08-17T13:24:32.713 回答
0

我发现了问题。这与我的收藏有关。我可以说这是我发现的将数据导出到 excel 的最佳方式。

于 2012-08-17T14:00:58.617 回答