我用如下方法把DataGridView的数据导入Excel后:
因为我有些字段的值是全数字的并以0开头,Excel默认的情况下会当作数字型,这样会把开头的0去掉。能不能把Excel单元格的类型都设置为文本型??
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 != "")
{
Stream myStream;
myStream = saveFileDialog.OpenFile();
StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312"));
string str = "";
try
{
//写标题
for (int i = 0; i < this.sc_madanDataGridView.ColumnCount; i++)
{
if (i > 0)
{
str += "\t";
}
str += sc_madanDataGridView.Columns[i].HeaderText;
} sw.WriteLine(str);
//写内容
for (int j = 0; j < sc_madanDataGridView.Rows.Count; j++)
{
string tempStr = "";
for (int k = 0; k < sc_madanDataGridView.Columns.Count; k++)
{
if (k > 0)
{
tempStr += "\t";
}
tempStr += sc_madanDataGridView.Rows[j].Cells[k].FormattedValue.ToString();
}
sw.WriteLine(tempStr);
}
sw.Close();
myStream.Close();
}
catch
{
MessageBox.Show(e.ToString());
}
finally
{
sw.Close();
myStream.Close();
}
因为我有些字段的值是全数字的并以0开头,Excel默认的情况下会当作数字型,这样会把开头的0去掉。能不能把Excel单元格的类型都设置为文本型??
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 != "")
{
Stream myStream;
myStream = saveFileDialog.OpenFile();
StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312"));
string str = "";
try
{
//写标题
for (int i = 0; i < this.sc_madanDataGridView.ColumnCount; i++)
{
if (i > 0)
{
str += "\t";
}
str += sc_madanDataGridView.Columns[i].HeaderText;
} sw.WriteLine(str);
//写内容
for (int j = 0; j < sc_madanDataGridView.Rows.Count; j++)
{
string tempStr = "";
for (int k = 0; k < sc_madanDataGridView.Columns.Count; k++)
{
if (k > 0)
{
tempStr += "\t";
}
tempStr += sc_madanDataGridView.Rows[j].Cells[k].FormattedValue.ToString();
}
sw.WriteLine(tempStr);
}
sw.Close();
myStream.Close();
}
catch
{
MessageBox.Show(e.ToString());
}
finally
{
sw.Close();
myStream.Close();
}
对的,但是我加了单引号后是直接在Excel里输出,没有作用。
tempStr +="'" + sc_madanDataGridView.Rows[j].Cells[k].FormattedValue.ToString();
然后
sw.WriteLine(tempStr);
这样写进去,是将一行写到一个单元格里还是多个格里?
{
if (k > 0)
{
tempStr += "\t";
}
tempStr +="'" + sc_madanDataGridView.Rows[j].Cells[k].FormattedValue.ToString();
}
sw.WriteLine(tempStr);比较完整的是这样的。现在写到Excel里显示是“'001001”,当双击单元格后“'”就不见了