DataGridViewDataTable导出为Excel,处理了数字字符串的bug
使用说明:
//以前文档存在以下的Bug:数字字符串如部门编号001003将去掉前面的0变成1003.这是不合要求的。
//对以前上传的文档出现的bug表示抱歉,现更正过来,只需将代码
//worksheet.Cells[r + 2, i + 1] = dt.DefaultView[r][i];
//修改为(共需修改2)
//worksheet.Cells[r + 2, i + 1] = “’” + dt.DefaultView[r][i].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
{
    /// <summary>
    /// 静态方法ExportToExcel提供四种参数的重载
    /// DataGridView或DataTable导出到Excel,可以选择是否添加进度条来查看导出excel进度 加单引号”’”,则表示单元格一直是文本,001003显示为001003,而不是1003
    /// 需要使用进度条时,请在窗体中加入一个ProgressBar控件progressBar1,并设置progressBar1.Visible=false
    /// </summary>
    public class DataTableToExcel
    {
        /// <summary>
        /// 将DataGridView转化为DataTable
        /// </summary>
        /// <param name="dv"></param>
        /// <returns></returns>
        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.Columns[i].HeaderText.ToString();
                dt.Columns.Add(dc);
excel字符串是什么            }
            for (int j = 0; j < dv.Rows.Count; j++)
            {
                System.Data.DataRow dr = dt.NewRow();
                for (int x = 0; x < dv.Columns.Count; x++)
                {
                    dr[x] = dv.Rows[j].Cells[x].Value;
                }
                dt.Rows.Add(dr);
            }
            return dt;
        }
        /// <summary>
        /// 将DataGridView导出为Excel文件(.xls)
        /// </summary>
        /// <param name="dgv">要导出的DatGridView</param>
        public static void ExportToExcel(DataGridView dgv)
        {
            //获得DataTable
            System.Data.DataTable dt = dvtodt(dgv);
            ExportToExcel(dt);           
        }
        /// <summary>
        /// 将DataGridView导出为excel文件,导出过程中显示进度条
        /// </summary>
        /// <param name="dgv">要导出的DatGridView</param>
        /// <param name="pb">与dgv在同一窗体的ProgressBar控件,pb初始化时Visible=false</param>
        public static void ExportToExcel(DataGridView dgv, ProgressBar pb)
        {
            //获得DataTable
            System.Data.DataTable dt = dvtodt(dgv);
            ExportToExcel(dt, pb);
        }
        /// <summary>
        /// 将DataTable导出为Excel文件(.xls) 
        /// </summary>
        /// <param name="dt">要导出的DataTable</param>
        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.Worksheets[1];//取得sheet1
                Microsoft.Office.Interop.Excel.Range range = null;
                long totalCount = dt.Rows.Count;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。