《2022年2022年将DataGridView或DataTable导出为Excel支持进度条》由会员分享,可在线阅读,更多相关《2022年2022年将DataGridView或DataTable导出为Excel支持进度条(8页珍藏版)》请在金锄头文库上搜索。
1、将 DataGridView 或 DataTable 导出为 Excel 支持进度条使用说明 : /编程语言 :C# 主要用于Winforms 应用程序的报表导出操作。/使用时,请添加引用微软的Microsoft.Office.Interop.Excel组件/在以前的上传文档基础上增加两个重载方法,共四种参数的重载:/重载方法1:ExportToExcel(System.Data.DataTable dt) /重载方法2:ExportToExcel(DataGridView dgv) /重载方法3:ExportToExcel(System.Data.DataTable dt, Progress
2、Bar pb) /重载方法4:ExportToExcel(DataGridView dgv, ProgressBar pb) /最后两个重载方法支持进度条控件源代码如下 :using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop.Excel; using System.Windows.Forms; namespace DoorControl / / 静态方法 ExportToExcel 提供四种参数的重载/ DataGridView 或 DataTable
3、导出到Excel,可以选择是否添加进度条来查看导出excel进度/ 需要使用进度条时,请在窗体中加入一个ProgressBar 控件progressBar1,并设置progressBar1.Visible=false / public class DataTableToExcel / / 将 DataGridView 转化为 DataTable / / / public static System.Data.DataTable dvtodt(DataGridView dv) System.Data.DataTable dt = new System.Data.DataTable(); Syst
4、em.Data.DataColumn dc; for (int i = 0; i dv .Columns.Count; i+) dc = new System.Data.DataColumn(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - dc.ColumnName = dv.Columnsi.HeaderText.ToString(); dt.Columns.Add(dc); for (int j = 0; j dv .
5、Rows.Count; j+) System.Data.DataRow dr = dt.NewRow(); for (int x = 0; x dv.Columns.Count; x+) drx = dv.Rowsj.Cellsx.Value; dt.Rows.Add(dr); return dt; / / 将 DataGridView 导出为 Excel 文件 (.xls) / / 要导出的DatGridView public static void ExportToExcel(DataGridView dgv) /获得 DataTable System.Data.DataTable dt
6、= dvtodt(dgv); ExportToExcel(dt); / / 将 DataGridView 导出为 excel文件 ,导出过程中显示进度条/ / 要导出的DatGridView / 与dgv 在 同 一 窗 体 的ProgressBar 控 件 ,pb 初 始 化 时Visible=false public static void ExportToExcel(DataGridView dgv, ProgressBar pb) /获得 DataTable System.Data.DataTable dt = dvtodt(dgv); ExportToExcel(dt, pb); /
7、 / 将 DataTable 导出为 Excel 文件 (.xls) / / 要导出的DataTable public static void ExportToExcel(System.Data.DataTable dt) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - if (dt = null) return; Microsoft.Office.Interop.Excel.Application xlApp = new Mi
8、crosoft.Office.Interop.Excel.Application(); if (xlApp = null) MessageBox.Show(无法创建Excel 对象,可能您的电脑未安装Excel); return; System.Windows.Forms.SaveFileDialog saveDia = new SaveFileDialog(); saveDia.Filter = Excel|*.xls; saveDia.Title = 导出为 Excel 文件 ; saveDia.FileName = string.Format(0.xls, DateTime.Now.To
9、String(yyyyMMddHHmmss); if (saveDia.ShowDialog() = System.Windows.Forms.DialogResult.OK & !string.Empty.Equals(saveDia.FileName) Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks; Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBA
10、Template.xlWBA TWorksheet); Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets1;/取得 sheet1 Microsoft.Office.Interop.Excel.Range range = null;long totalCount = dt.Rows.Count; long rowRead = 0; float percent = 0; string fileName = saveDia
11、.FileName; /写入标题for (int i = 0; i dt.Columns.Count; i+) worksheet.Cells1, i + 1 = dt.Columnsi.ColumnName;range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells1, i + 1; /range.Interior.ColorIndex = 15;/ 背景颜色range.Font.Bold = true;/ 粗体range.HorizontalAlignment = Microsoft.Office.Interop.Excel.
12、XlHAlign.xlHAlignCenter;/居中/加边框range.BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, null);/range.ColumnWidth = 4.63;/ 设置列宽/range.EntireColumn.AutoFit();/ 自动
13、调整列宽名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - /r1.EntireRow.AutoFit();/ 自动调整行高 /写入内容for (int r = 0; r dt.DefaultView.Count; r+) for (int i = 0; i 1) range.BordersMicrosoft.Office.Interop.Excel.XlBordersIndex.xlInsideVertical.Weight =
14、Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin; try workbook.Saved = true; workbook.SaveCopyAs(fileName); catch (Exception ex) MessageBox.Show( 导 出 文 件 时 出 错,文 件 可 能 正 被 打 开 ! n + ex.Message); return; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - -
15、 - - - - - - - workbooks.Close(); if (xlApp != null) xlApp.Workbooks.Close(); xlApp.Quit(); int generation = System.GC.GetGeneration(xlApp); System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);xlApp = null; System.GC.Collect(generation); GC.Collect();/ 强行销毁#region 强行杀死最近打开的Excel 进程System.
16、Diagnostics.Process excelProc = System.Diagnostics.Process.GetProcessesByName(EXCEL);System.DateTime startTime = new DateTime(); int m, killId = 0; for (m = 0; m excelProc.Length; m+) if (startTime excelProcm.StartTime) startTime = excelProcm.StartTime; killId = m; if (excelProckillId.HasExited = fa
17、lse) excelProckillId.Kill(); #endregion MessageBox.Show(导出成功 !); / / 将 DataTable 导出为 excel 文件 ,导出过程中显示进度条/ / 要导出的DataTable对象 / 窗体中的 ProgressBar控件 ,pb 初始化时 Visible=false public static void ExportToExcel(System.Data.DataTable dt, ProgressBar pb) if (dt = null) return; 名师资料总结 - - -精品资料欢迎下载 - - - - - -
18、- - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); if (xlApp = null) MessageBox.Show(无法创建Excel 对象,可能您的电脑未安装Excel); return; System.Windows.Forms.SaveFileDialog saveDia = new Sa
19、veFileDialog();saveDia.Filter = Excel|*.xls; saveDia.Title = 导出为 Excel 文件 ; saveDia.FileName = string.Format(0.xls, DateTime.Now.ToString(yyyyMMddHHmmss); if (saveDia.ShowDialog() = System.Windows.Forms.DialogResult.OK & !string.Empty.Equals(saveDia.FileName) Microsoft.Office.Interop.Excel.Workbooks
20、 workbooks = xlApp.Workbooks; Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBA TWorksheet); Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets1;/取得 sheet1 Microsoft.Offi
21、ce.Interop.Excel.Range range = null; long totalCount = dt.Rows.Count; pb.Visible = true;/ 将进度条控件显示pb.Maximum = (int)totalCount;/设置进度条控件的最大值long rowRead = 0; float percent = 0; string fileName = saveDia.FileName; /写入标题for (int i = 0; i dt.Columns.Count; i+) worksheet.Cells1, i + 1 = dt.Columnsi.Colum
22、nName;range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells1, i + 1; /range.Interior.ColorIndex = 15;/ 背景颜色range.Font.Bold = true;/ 粗体range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;/居中/加边框range.BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlCont
23、inuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, null);/range.ColumnWidth = 4.63;/ 设置列宽/range.EntireColumn.AutoFit();/ 自动调整列宽/r1.EntireRow.AutoFit();/ 自动调整行高名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
24、 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - /写入内容for (int r = 0; r dt.DefaultView.Count; r+) for (int i = 0; i 1) range.BordersMicrosoft.Office.Interop.Excel.XlBordersIndex.xlInsideVertical.Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin; try workbook.Saved = true; workbook.SaveCopyAs
25、(fileName); catch (Exception ex) MessageBox.Show( 导 出 文 件 时 出 错,文 件 可 能 正 被 打 开 ! n + ex.Message); return; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - workbooks.Close(); if (xlApp != null) xlApp.Workbooks.Close(); xlApp.Quit(); int gene
26、ration = System.GC.GetGeneration(xlApp); System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);xlApp = null; System.GC.Collect(generation); GC.Collect();/ 强行销毁#region 强行杀死最近打开的Excel 进程System.Diagnostics.Process excelProc = System.Diagnostics.Process.GetProcessesByName(EXCEL);System.DateTime
27、 startTime = new DateTime(); int m, killId = 0; for (m = 0; m excelProc.Length; m+) if (startTime excelProcm.StartTime) startTime = excelProcm.StartTime; killId = m; if (excelProckillId.HasExited = false) excelProckillId.Kill(); #endregion pb.Visible = false;/ 再次将进度条隐藏MessageBox.Show(导出成功 !); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -