快速将Datagridview的数据导出到Excel
public void ExportDataToExcel(DataTable TableName, string FileName)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
//设置文件标题
saveFileDialog.Title = "导出Excel文件";
//设置文件类型
saveFileDialog.Filter = "Microsoft Office Excel 工作簿(*.xls)|*.xls";
//设置默认文件类型显示顺序
saveFileDialog.FilterIndex = 1;
//是否自动在文件名中添加扩展名
saveFileDialog.AddExtension = true;
//是否记忆上次打开的目录
saveFileDialog.RestoreDirectory = true;
//设置默认文件名
saveFileDialog.FileName = FileName;
//按下确定选择的按钮
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
//获得文件路径
string localFilePath = saveFileDialog.FileName.ToString();
//数据初始化
int TotalCount; //总行数
int RowRead = 0; //已读行数
int Percent = 0; //百分比
TotalCount = TableName.Rows.Count;
lblStatus.Text = "共有" + TotalCount + "条数据";
lblStatus.Visible = true;
barStatus.Visible = true;
//数据流
Stream myStream = saveFileDialog.OpenFile();
StreamWriter sw = new StreamWriter(myStream, Encoding.GetEncoding("gb2312"));
string strHeader = "";
//秒钟
Stopwatch timer = new Stopwatch();
timer.Start();
try
{
//写入标题
for (int i = 0; i < TableName.Columns.Count; i++)
{
if (i > 0)
{
strHeader += "\t";
}
strHeader += TableName.Columns[i].ColumnName.ToString();
}
sw.WriteLine(strHeader);
//写入数据
//string strData;
for (int i = 0; i < TableName.Rows.Count; i++)
{
RowRead++;
Percent = (int)(100 * RowRead / TotalCount);
barStatus.Maximum = TotalCount;
barStatus.Value = RowRead;
lblStatus.Text = "共有" + TotalCount + "条数据,已写入" + Percent.ToString() + "%的数据,共耗时" + timer.ElapsedMilliseconds + "毫秒。";
Application.DoEvents();
string strData = "";
for (int j = 0; j < TableName.Columns.Count; j++)
{
if (j > 0)
{
strData += "\t";
}
strData += TableName.Rows[i][j].ToString();
}
sw.WriteLine(strData);
}
//关闭数据流
sw.Close();
myStream.Close();
//关闭秒钟
timer.Reset();
timer.Stop();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally
{
//关闭数据流
sw.Close();
myStream.Close();
//关闭秒钟
timer.Stop();
}
//成功提示
if (MessageBox.Show("导出成功,是否立即打开?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
System.Diagnostics.Process.Start(localFilePath);
}
//赋初始值
lblStatus.Visible = false;
barStatus.Visible = false;
}
}