0

我正在使用 asp.net Web 应用程序中的响应对象创建一个 excel 文件。一些长数值正在转换为科学计数法。我想保留我正在使用的代码,因为它可以防止由于数据大小而收到的超时问题。有人可以就如何修改现有代码以防止列转换为科学计数法提供任何建议吗?

    Response.Clear()
    Response.Buffer = True
    Response.AddHeader("content-disposition", "attachment;filename=test.csv")
    Response.Charset = ""
    Response.Cache.SetCacheability(HttpCacheability.NoCache)
    Response.ContentType = "application/vnd.xls"


    Try
        sqlconn.Open()

        Dim dr As SqlDataReader = sqlcmd.ExecuteReader()
        Dim sb As New StringBuilder()
        'Add Header

        For count As Integer = 0 To dr.FieldCount - 1
            If dr.GetName(count) IsNot Nothing Then
                sb.Append(dr.GetName(count))
            End If
            If count < dr.FieldCount - 1 Then
                sb.Append(",")
            End If
        Next
        Response.Write(sb.ToString() & vbLf)
        Response.Flush()
        'Append Data

        While dr.Read()
            sb = New StringBuilder()

            For col As Integer = 0 To dr.FieldCount - 2
                If Not dr.IsDBNull(col) Then
                    sb.Append(dr.GetValue(col).ToString().Replace(",", " "))
                End If
                sb.Append(",")
            Next
            If Not dr.IsDBNull(dr.FieldCount - 1) Then
                sb.Append(dr.GetValue(dr.FieldCount - 1).ToString().Replace(",", " "))
            End If
            Response.Write(sb.ToString() & vbLf)
            Response.Flush()
        End While
        dr.Dispose()
    Catch ex As Exception

    Finally

        sqlconn.Close()
    End Try
    Response.End()
4

2 回答 2

-1

嗨,我知道这个问题有点老了,但我只想分享我的想法,如何防止 Excel 生成的文件中的科学记数法。我已经尝试过“@”,但是我应用了 .NumberFormat 的相应行/列上的单元格上有一个警告图标。它说将数字转换为文本是无效的。

我在这里有一个解决方案,我个人将其用作该警告的固定值,您可以使用“#”而不是“@”。这是示例。

mySheet.Range("A:A").NumberFormat = "#"

我认为使用“@”仅用于文本数据类型,这就是发生警告的原因。希望这可以帮助。

于 2014-02-26T07:40:00.063 回答
-1

据我所知,这个问题正在发生,因为 Excel 正在读取您的数据并猜测它是什么类型的数据,如果它认为它们是真正带有数字的文本的数字,那么它就会开始应用科学记数法。

我知道强制这种情况不发生的唯一方法是使用Excel API并将列强制为特定格式,如下所示:

xlApp.Columns("A:A").Select()
xlApp.Selection.NumberFormat = "@"

注意:这将选择工作表中的 A 列,然后将数字格式强制为文本。

于 2013-07-22T15:21:58.947 回答