C#中 dataGridView和DataTable 导出Excel的方法

  1. /// <summary>   
  2. /// 将DataGridView 数据导出到Excel(当页)   
  3. /// </summary>   
  4. /// <param name="dataGridView1"></param>   
  5. public void print(DataGridView dataGridView1)   
  6. {   
  7.     //导出到execl      
  8.     try  
  9.     {   
  10.         //没有数据的话就不往下执行      
  11.         if (dataGridView1.Rows.Count == 0)   
  12.             return;   
  13.         //实例化一个Excel.Application对象      
  14.         Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();   
  15.   
  16.         //让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写      
  17.         excel.Visible = false;   
  18.   
  19.         //新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错      
  20.         excel.Application.Workbooks.Add(true);   
  21.         //生成Excel中列头名称      
  22.         for (int i = 0; i < dataGridView1.Columns.Count; i++)   
  23.         {   
  24.             excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;   
  25.         }   
  26.         //把DataGridView当前页的数据保存在Excel中      
  27.         for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)   
  28.         {   
  29.             for (int j = 0; j < dataGridView1.Columns.Count; j++)   
  30.             {   
  31.                 if (dataGridView1[j, i].ValueType == typeof(string))   
  32.                 {   
  33.                     excel.Cells[i + 2, j + 1] = "'" + dataGridView1[j, i].Value.ToString();   
  34.                 }   
  35.                 else  
  36.                 {   
  37.                     excel.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString();   
  38.                 }   
  39.             }   
  40.         }   
  41.   
  42.         //设置禁止弹出保存和覆盖的询问提示框      
  43.         excel.DisplayAlerts = false;   
  44.         excel.AlertBeforeOverwriting = false;   
  45.   
  46.         //保存工作簿      
  47.         excel.Application.Workbooks.Add(true).Save();   
  48.         //保存excel文件      
  49.         excel.Save("D:" + "//KKHMD.xls");   
  50.   
  51.         //确保Excel进程关闭      
  52.         excel.Quit();   
  53.         excel = null;   
  54.   
  55.     }   
  56.     catch (Exception ex)   
  57.     {   
  58.         MessageBox.Show(ex.Message, "错误提示");   
  59.     }   
  60. }   
  61.   
  62. /// <summary>   
  63. ///  将DataGridView 数据导出到Excel(所有)   
  64. /// </summary>   
  65. /// <param name="dt"></param>   
  66. public void printAll(DataTable dt)   
  67. {   
  68.     //导出到execl      
  69.     try  
  70.     {   
  71.         //没有数据的话就不往下执行      
  72.         if (dt.Rows.Count == 0)   
  73.             return;   
  74.         //实例化一个Excel.Application对象      
  75.         Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();   
  76.   
  77.         //新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错      
  78.         excel.Application.Workbooks.Add(true);   
  79.   
  80.         //让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写      
  81.         excel.Visible = false;   
  82.         //生成Excel中列头名称      
  83.         for (int i = 0; i < dt.Columns.Count; i++)   
  84.         {   
  85.             excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;//输出DataGridView列头名      
  86.         }   
  87.   
  88.         //把DataGridView当前页的数据保存在Excel中      
  89.         if (dt.Rows.Count > 0)   
  90.         {   
  91.             for (int i = 0; i < dt.Rows.Count; i++)//控制Excel中行,上下的距离,就是可以到Excel最下的行数,比数据长了报错,比数据短了会显示不完      
  92.             {   
  93.                 for (int j = 0; j < dt.Columns.Count; j++)//控制Excel中列,左右的距离,就是可以到Excel最右的列数,比数据长了报错,比数据短了会显示不完      
  94.                 {   
  95.                     string str = dt.Rows[i][j].ToString();   
  96.                     excel.Cells[i + 2, j + 1] = "'" + str;//i控制行,从Excel中第2行开始输出第一行数据,j控制列,从Excel中第1列输出第1列数据,"'" +是以string形式保存,所以遇到数字不会转成16进制      
  97.                 }   
  98.             }   
  99.         }   
  100.         //设置禁止弹出保存和覆盖的询问提示框      
  101.         excel.DisplayAlerts = false;   
  102.         excel.AlertBeforeOverwriting = false;   
  103.   
  104.         //保存工作簿,值为false会报错      
  105.         excel.Application.Workbooks.Add(true).Save();   
  106.         //保存excel文件      
  107.         excel.Save("D:" + "//KKHMD.xls");   
  108.   
  109.         //确保Excel进程关闭      
  110.         excel.Quit();   
  111.         excel = null;   
  112.   
  113.         
                }
                catch (Exception ex)
                {
  114.                 MessageBox.Show("任务未完成原因为:/n" + ex.Message, "错误提示");
                }
                finally
                {
                    //确保Excel进程关闭 
                    excel.Workbooks.Close();
                    excel.Application.Quit();
                    excel.Quit();
                    string str = Convert.ToString(excel);
                    KillProcess(str);
  115.                 excel = null;
                    GC.Collect();
                }
            }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值