【发布时间】:2011-01-01 22:09:18
【问题描述】:
在我的 ASP.NET 应用程序中,我需要将 DataTable 编写为对客户的 CSV 响应。除了有数字的列之外,一切正常。
例如:7002136138603600000
但是当我在 Excel 中打开 CSV 时,它以指数格式显示。
类似这样的:7E+18
您能否告诉我需要做什么才能将这些值显示为测试而不是指数格式?
谢谢, 马赫什
【问题讨论】:
标签: asp.net excel csv exponentiation
在我的 ASP.NET 应用程序中,我需要将 DataTable 编写为对客户的 CSV 响应。除了有数字的列之外,一切正常。
例如:7002136138603600000
但是当我在 Excel 中打开 CSV 时,它以指数格式显示。
类似这样的:7E+18
您能否告诉我需要做什么才能将这些值显示为测试而不是指数格式?
谢谢, 马赫什
【问题讨论】:
标签: asp.net excel csv exponentiation
当数字都是数字时,它很容易添加 asc char 32,使用函数来找出数字是否都是数字,如果为真,然后简单地将 asc 32 添加到数字(如果需要,转换为字符串)。 在 microsoft excel 2007 和 windows 7 上测试了 csv 文件,它工作正常,不确定早期版本。
【讨论】:
关于 CSV 数字格式,请在此处查看: http://support.microsoft.com/kb/214233
我确实多次导出到 Excel。只需使用 HtmlTextWriter 将 Gridview 的输出写入字符串生成器即可发送响应。
你可以找到两个这样做的例子:
更多搜索结果:http://www.google.com/search?q=export+gridview+to+excel
所以,我认为最简单的方法是绑定到 GridView 并将其编写为 HTML,就像在其他示例中一样,除非您也出于其他原因需要 CSV。
【讨论】:
你不能用 CSV 做到这一点。用 Excel 试试。在单元格中创建一个值为“7002136138603600000”的电子表格,前面有一个单引号 (') 以表示它是文本。 Excel 将正确显示完整的数字。将其保存为 CSV。重新加载。该数字将以指数格式显示。
您也可以使用 HTML。将命名空间 xmlns:x="urn:schemas-microsoft-com:office:excel" 添加到您的 html 根目录,并将此属性添加到您的 td 元素。
x:str="'7002136138603600000"
Excel 会将其显示为文本。有关更完整的示例,请创建我提到的 Excel 文档并另存为 html。
如果您知道您的客户使用的是 Excel 2003 或更高版本,您也可以使用 XML。
【讨论】:
必须是 CSV 吗?如果是这样,那么您几乎会被 Excel 的默认行为所困扰。
如果它不必是 CSV,那么查看 Excel XML 格式,它可以让您更好地控制显示格式(可以在 Excel 中完成的任何操作都可以在 XML 文件字符串中完成)。当然,这仅在 Office 2003 及更高版本中受支持。
【讨论】:
在文本编辑器中打开文件,您可能会发现数字导出正确。对于一些长数字,Excel 只是默认为指数格式。
【讨论】: