c#使用StreamWriter导出DataGridView数据到excel中的格式问题

寂寞沙洲 2010-10-26 08:49:02
c#使用StreamWriter导出DataGridView数据到excel中的格式问题,代码如下:
private void ExportToExcel(DataGridView dgvGF_IN_INFO)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
saveFileDialog.FilterIndex = 0;
saveFileDialog.RestoreDirectory = true;
saveFileDialog.CreatePrompt = true;
saveFileDialog.Title = "保存为Excel文件";
saveFileDialog.ShowDialog();
if (saveFileDialog.FileName.IndexOf(":") < 0) return; //被点了"取消"
Stream myStream;
myStream = saveFileDialog.OpenFile();
StreamWriter sw =
new StreamWriter(myStream, System.Text.Encoding.GetEncoding(0));
string columnTitle = "";
try
{
//写入列标题
for (int i = 0; i < dgvGF_IN_INFO.ColumnCount; i++)
{
if (i > 0)
{
columnTitle += "\t";
}
columnTitle += dgvGF_IN_INFO.Columns[i].HeaderText;
}
sw.WriteLine(columnTitle);
//写入列内容
for (int j = 0; j < dgvGF_IN_INFO.Rows.Count; j++)
{
string columnValue = "";
for (int k = 0; k < dgvGF_IN_INFO.Columns.Count; k++)
{
if (k > 0)
{
columnValue += "\t";
}
if (dgvGF_IN_INFO.Rows[j].Cells[k].Value == null)
columnValue += "";
else
{
if(k==3)
columnValue += "\'"+dgvGF_IN_INFO.Rows[j].Cells[k].Value.ToString();
else
columnValue += dgvGF_IN_INFO.Rows[j].Cells[k].Value.ToString().Trim();
}

}
sw.WriteLine(columnValue);
}
sw.Close();
myStream.Close();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
sw.Close();
myStream.Close();
}
}
第3列是文本字段,如0998,但导出后,就变成了998(数字格式了),如何保证原来的格式。我试着加单引号"'",但没用,这样会导致excel的单元格中包含'。
还有,如果是日期字段,如何进行日期格式化。
如果不用StreamWriter,用com可以完成,但StreamWriter速度比较快,且不要求装excel。
请高手指点c#使用StreamWriter导出DataGridView数据到excel中的格式问题,谢谢!
...全文
1105 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
寂寞沙洲 2010-11-01
  • 打赏
  • 举报
回复
每人回答了,给分了!
寂寞沙洲 2010-10-31
  • 打赏
  • 举报
回复
支持!up!!
寂寞沙洲 2010-10-29
  • 打赏
  • 举报
回复
如果用:
@"="" + "09988" + @"""

if(k==3)
columnValue += @"=""+dgvGF_IN_INFO.Rows[j].Cells[k].Value.ToString()+@""";
在Excel中出现
+dgvGF_IN_INFO.Rows[j].Cells[k].Value.ToString()+@
wangyue4 2010-10-28
  • 打赏
  • 举报
回复
lz,你的问题我也遇到过,当时还涉及到合并单元格的问题,我最后就写一个含table的html源码,存的时候直接是存成.xls文件就ok了
njw1028 2010-10-28
  • 打赏
  • 举报
回复
@"="" + "09988" + @"""

这都能写错了。^_^
njw1028 2010-10-28
  • 打赏
  • 举报
回复
@""" + "0998" + @"""
peterb 2010-10-28
  • 打赏
  • 举报
回复
寂寞沙洲 2010-10-28
  • 打赏
  • 举报
回复
谢谢,欢迎大家继续讨论!
寂寞沙洲 2010-10-28
  • 打赏
  • 举报
回复
写一个含table的html源码,可惜没这个水平。
phil999 2010-10-27
  • 打赏
  • 举报
回复
sorry,记差了

csv 里没办法,要么用com,要么前面加个 ',然后和客户解释一下,其实这个对于客户来说不算什么,而楼主可以少些很多代码
寂寞沙洲 2010-10-27
  • 打赏
  • 举报
回复
if(k==3)
columnValue += """"+dgvGF_IN_INFO.Rows[j].Cells[k].Value.ToString() + """";
是会编译时直接报错的!
如果用
if(k==3)
columnValue += "\""+dgvGF_IN_INFO.Rows[j].Cells[k].Value.ToString() + "\"";
还是原来的情况:0998,但导出后,就变成了998(数字格式了)
如果用
if(k==3)
columnValue += @"""+dgvGF_IN_INFO.Rows[j].Cells[k].Value.ToString() + @""";
出现:
+dgvGF_IN_INFO.Rows[j].Cells[k].Value.ToString()+@
机器人 2010-10-26
  • 打赏
  • 举报
回复
你的方法导出的其实是csv(逗号分隔的)文件,扩展名为 .csv 的。

按照楼上所说的两边加上双引号就能保证显示。(Excel当做文字列来显示)
wuyq11 2010-10-26
  • 打赏
  • 举报
回复
导出cvs文件,是可以认到前面的0
添加Microsoft.Office.Interop.Excel的引用,使用Excel类操作
使用'
mySheet.Cells(1,9).NumberFormatLocal = "@"
Excel.Range r = mySheet.get_Range(mySheet.Cells[1, 1], mySheet.Cells[1,3]);
r.NumberFormat = "@";
r.NumberForma = "0.00_ "
phil999 2010-10-26
  • 打赏
  • 举报
回复
楼主写出来的是文本文件,Excel打开后显示给我们的是格式化的

0998 写的时候写成 "0998"


if(k==3)
columnValue += """"+dgvGF_IN_INFO.Rows[j].Cells[k].Value.ToString() + """";

110,534

社区成员

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

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

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