Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用响应在asp.net中创建excel文件时防止使用科学记数法_Asp.net_.net_Vb.net - Fatal编程技术网

使用响应在asp.net中创建excel文件时防止使用科学记数法

使用响应在asp.net中创建excel文件时防止使用科学记数法,asp.net,.net,vb.net,Asp.net,.net,Vb.net,我正在使用asp.net web应用程序中的响应对象创建excel文件。一些长数值正在转换为科学记数法。我希望保留我正在使用的代码,因为它可以防止由于数据大小而导致的超时问题。有人能就如何修改现有代码以防止列转换为科学符号提供建议吗 Response.Clear() Response.Buffer = True Response.AddHeader("content-disposition", "attachment;filename=test.csv") Res

我正在使用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()

据我所知,这个问题之所以会发生,是因为Excel正在读取您的数据并猜测它是什么类型的数据,如果它认为这些数据是真正包含数字的文本的数字,那么它就开始应用科学符号

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

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

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

嗨,我知道这个问题有点老了,但我只想与大家分享我关于如何防止excel生成的文件中出现科学符号的想法。我尝试了@,但我应用.NumberFormat的相应行/列上的单元格上有一个警告图标。它说将数字转换为文本是无效的

我这里有一个解决方案,我个人用它作为警告的固定值,你可以用一个代替。这是样品

mySheet.Range("A:A").NumberFormat = "#"
我认为使用@仅表示文本数据类型,这就是为什么会出现警告。
希望这有帮助。

另一种方法是在数字字符串前加一个撇号。e、 g.'0123456这也处理了前导零的截断问题。带前缀的撇号出现在excel列中。有没有办法阻止它出现?-1:从ASP.NET或其他服务器技术使用Office互操作是一个可怕的想法。这些API是为在桌面应用程序中使用而编写的,用于自动化Office一套桌面应用程序。服务器应用程序在许多方面都不同,因此在其中使用Office互操作是一个非常非常糟糕的主意。它也不受Microsoft支持,可能会违反您的Office许可证。请参阅-1:从ASP.NET或其他服务器技术使用Office互操作是一个可怕的想法。这些API是为在桌面应用程序中使用而编写的,用于自动化Office一套桌面应用程序。服务器应用程序在许多方面都不同,因此在其中使用Office互操作是一个非常非常糟糕的主意。它也不受Microsoft支持,可能会违反您的Office许可证。看见