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中的格式问题,谢谢!
=====我的尝试:
如果用
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() + @""";
excel单元格会出现:
+dgvGF_IN_INFO.Rows[j].Cells[k].Value.ToString()+@