导出csv的代码完全正常,就是导出身份证号码时,用excel打开后是科学计数法,如何办?

zsdl00 2010-09-13 11:27:54
导出csv的代码,就是导出身份证号码时,用excel打开后是科学计数法,如何办?
下面是我的代码:

#region 导出电子表格
// StreamWriter 参数说明:
// path:
// The complete file path to write to.
//
// append:
// Determines whether data is to be appended to the file. If the file exists
// and append is false, the file is overwritten. If the file exists and append
// is true, the data is appended to the file. Otherwise, a new file is created.
//
// encoding:
// The character encoding to use.

//导出 DataTable 到 Excel
public static void SaveDataToCVS(DataTable dt, string fileName,out string strmsg)
{
using (StreamWriter sw = new StreamWriter(fileName, false, Encoding.Default))
{
string line;
try
{
foreach (DataRow dr in dt.Rows)
{
line = GenerateLine(dr);
sw.WriteLine(line);
}
strmsg = "OK";
}
catch (Exception)
{
strmsg = "导出EXCEL失败!";
return;
}
}
}

//对定界符和逗号进行处理
private static string GenerateLine(DataRow dr)
{
string retLine = string.Empty; //相当于 "",但是不分配空间
string field = string.Empty;

try
{
foreach (DataColumn dc in dr.Table.Columns)
{
//取字段文本
field = dr[dc.ColumnName].ToString();
//如果存在双引号,就将一个双引号变成两个双引号
if (field.IndexOf('"') >= 0)
{
field = field.Replace("\"", "\"\"");
}

//如果字段中含有逗号或者双引号,就要将这个字段用双引号括起来
if (field.IndexOf(',') >= 0 || field.IndexOf('"') >= 0)
{
field = "\"" + field + "\"";
}

//增加分隔符
retLine += field + ",";
field = string.Empty;
}
//去除最后一个逗号并返回
return retLine.TrimEnd(',');
}
catch (Exception ex)
{
throw(ex);
}
}

#endregion 导出电子表格




这个代码,功能正常,导出的csv格式完全正确。

但是有一个不足,就是导出身份证号码时,用excel打开后是科学计数法。
但是我用文本编辑器打开csv看一下,身份证号是完全正确的,只是用excel打开后,就显示成科学计数法。

我应该如何解决呢?
...全文
3319 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lz00728 2010-09-13
  • 打赏
  • 举报
回复
过来学习,下个项目也要用到
孟子E章 2010-09-13
  • 打赏
  • 举报
回复 1
通用类,全部写出这样这样的格式即可
="123456789123456789123456789",="123456789123456789123456789123456789"
l13873666736 2010-09-13
  • 打赏
  • 举报
回复
好像可能控制格式的
r = (Excel.Range)
r.NumberFormatLocal = "@";
zsdl00 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chazikai24 的回复:]
在身份证号码前面加'符号
[/Quote]

这样可以个别处理,但是我的导出电子表格的代码,是放在一个类中,是一个静态的方法,具有通用性。
可是我不能每个列前面都加上‘号呀,可是我在通用的代码中,无法判断哪个列需要加上’号,哪个列不用加呀。

孟子E章 2010-09-13
  • 打赏
  • 举报
回复 2
如果非要在csv里实现的话。你导出这样的格式即可

="任何内容",="数字内容"

这样打开就好了
孟子E章 2010-09-13
  • 打赏
  • 举报
回复
也可以这样
http://dotnet.aspx.cc/file/Export-Gridview-To-Excel-With-Multi-Sheet.aspx
孟子E章 2010-09-13
  • 打赏
  • 举报
回复
你可以直接导出Excel,设置样式即可

参见代码和例子
http://dotnet.aspx.cc/article/8a4cbf47-b888-4832-3389-ed3a3a3c8aab/read.aspx
http://dotnet.aspx.cc/Exam/OutPutExcel.aspx
chazikai24 2010-09-13
  • 打赏
  • 举报
回复
在身份证号码前面加'符号
zsdl00 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 net_lover 的回复:]
但是只能当作字符串处理的,不能再当数字进行计算的,所以,你导出的时候,应该加上哪些列需要这么处理的选项
[/Quote]

应该加上哪些列需要这么处理的选项

这个选项是什么意思,是不是可以传入一个列名索引的集合,然后判断某一列的索引是否在集合中,如果在,就
在对列内容 ="",我的理解对吗?
wackyboy 2010-09-13
  • 打赏
  • 举报
回复
这得看你的CSV文件干什么用 怎么用吧
只要CSV正常 EXCEL中是科学计数法很正常 因为长的数字都会这样
如果还要用CSV干别的 那跟EXCEL打开就没什么关系了
CSV文件本来就是文本文件
孟子E章 2010-09-13
  • 打赏
  • 举报
回复
但是只能当作字符串处理的,不能再当数字进行计算的,所以,你导出的时候,应该加上哪些列需要这么处理的选项
孟子E章 2010-09-13
  • 打赏
  • 举报
回复
完全没问题的。
ljb3326 2010-09-13
  • 打赏
  • 举报
回复
学习。。。。。。。。。。。
zsdl00 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 net_lover 的回复:]
通用类,全部写出这样这样的格式即可
="123456789123456789123456789",="123456789123456789123456789123456789"
[/Quote]
这样是可以,这个用 excel 打开后,看不到前面的等号,可是等号是确实存在的呀,
如果这个字符参与处理,或者导入到另一个数据库中,好象就有问题了吧。

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧