DataGridView或DataTable导出为Excel-处理了数字字符串去掉前面0的问题-支持进度条.doc_第1页
DataGridView或DataTable导出为Excel-处理了数字字符串去掉前面0的问题-支持进度条.doc_第2页
DataGridView或DataTable导出为Excel-处理了数字字符串去掉前面0的问题-支持进度条.doc_第3页
DataGridView或DataTable导出为Excel-处理了数字字符串去掉前面0的问题-支持进度条.doc_第4页
DataGridView或DataTable导出为Excel-处理了数字字符串去掉前面0的问题-支持进度条.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DataGridView或DataTable导出为Excel,处理了数字字符串的bug使用说明:/以前文档存在以下的Bug:数字字符串如部门编号001003将去掉前面的0变成1003.这是不合要求的。/对以前上传的文档出现的bug表示抱歉,现更正过来,只需将代码 /worksheet.Cellsr + 2, i + 1 = dt.DefaultViewri;/修改为(共需修改2处)/worksheet.Cellsr + 2, i + 1 = “” + dt.DefaultViewri.ToString();/加单引号为了表示单元格/一直是文本格式/编程语言:C# 主要用于Winforms应用程序的报表导出操作。/使用时,请添加引用微软的Microsoft.Office.Interop.Excel组件/在以前的上传文档基础上增加两个重载方法,共四种参数的重载:/重载方法1:ExportToExcel(System.Data.DataTable dt)/重载方法2:ExportToExcel(DataGridView dgv)/重载方法3:ExportToExcel(System.Data.DataTable dt, ProgressBar 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 Channels / / 静态方法ExportToExcel提供四种参数的重载 / DataGridView或DataTable导出到Excel,可以选择是否添加进度条来查看导出excel进度 加单引号”,则表示单元格一直是文本,如001003显示为001003,而不是1003 / 需要使用进度条时,请在窗体中加入一个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(); System.Data.DataColumn dc; for (int i = 0; i dv.Columns.Count; i+) dc = new System.Data.DataColumn(); dc.ColumnName = dv.Columnsi.HeaderText.ToString(); dt.Columns.Add(dc); for (int j = 0; j dv.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 = 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); / / 将DataTable导出为Excel文件(.xls) / / 要导出的DataTable public static void ExportToExcel(System.Data.DataTable dt) if (dt = null) return; 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 SaveFileDialog(); 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 workbooks = xlApp.Workbooks; Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet); 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.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.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();/自动调整列宽 /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 = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin; try workbook.Saved = true; workbook.SaveCopyAs(fileName); catch (Exception ex) MessageBox.Show(导出文件时出错,文件可能正被打开!n + ex.Message); return; 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.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 = false) 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; 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 SaveFileDialog(); 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 workbooks = xlApp.Workbooks; Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet); 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; 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.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.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();/自动调整列宽 /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 = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin; try workbook.Saved = true; workbook.SaveCopyAs(fileName); catch (

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论