我正在使用asp.net web应用程序中的response对象创建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()
发布于 2013-07-22 15:21:59
据我所知,这个问题的发生是因为Excel正在读取您的数据并猜测它是什么类型的数据,如果它认为这些数据是包含数字的文本,那么它就会开始应用科学记数法。
据我所知,唯一不会发生这种情况的方法是使用Excel API
并将列强制为特定格式,如下所示:
xlApp.Columns("A:A").Select()
xlApp.Selection.NumberFormat = "@"
注意:这将选择工作表中的列A,然后强制将数字格式设置为文本。
发布于 2014-02-26 07:40:00
嗨,我知道这个问题有点老了,但我只想分享我的想法,如何防止在excel生成的文件中使用科学符号。我尝试过"@“,但在应用.NumberFormat的相应行/列上的单元格上有一个警告图标。它说将数字转换为文本是无效的。
我这里有一个解决方案,我个人用来修复那个警告,你可以用"#“代替"@”。这是示例。
mySheet.Range("A:A").NumberFormat = "#"
我认为使用"@“只适用于文本数据类型,这就是为什么会出现警告。希望这能有所帮助。
https://stackoverflow.com/questions/17791158
复制