快速将Datagridview的数据导出到Excel

时间:2025-03-17 15:18:43
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; } }