zoukankan      html  css  js  c++  java
  • c# winform DataGridView导出数据到Excel中,可以导出当前页和全部数据

    准备工作就是可以分页的DataGridView,和两个按钮,一个用来导出当前页数据到Excel,一个用来导出全部数据到Excel

    没有使用SaveFileDialog,但却可以弹出保存对话框来

    先做导出当前页数据到Excel的

    DataGridView命名为dataGridView1

     1 //按下导出按钮  
     2 private void button7_Click(object sender, EventArgs e)  
     3 {  
     4     print(dataGridView1);  
     5 }  
     6 public void print(DataGridView dataGridView1)  
     7 {  
     8     //导出到execl  
     9     try  
    10     {  
    11         //没有数据的话就不往下执行  
    12         if (dataGridView1.Rows.Count == 0)  
    13             return;  
    14         //实例化一个Excel.Application对象  
    15         Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();  
    16   
    17         //让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写  
    18         excel.Visible = false;  
    19                   
    20         //新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错  
    21     excel.Application.Workbooks.Add(true);                
    22         //生成Excel中列头名称  
    23         for (int i = 0; i < dataGridView1.Columns.Count; i++)  
    24         {  
    25             excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;  
    26         }  
    27         //把DataGridView当前页的数据保存在Excel中  
    28         for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)  
    29         {  
    30             for (int j = 0; j < dataGridView1.Columns.Count; j++)  
    31             {  
    32                 if (dataGridView1[j, i].ValueType == typeof(string))  
    33                 {  
    34                     excel.Cells[i + 2, j + 1] = "'" + dataGridView1[j, i].Value.ToString();  
    35                 }  
    36                 else  
    37                 {  
    38                     excel.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString();  
    39                 }  
    40             }  
    41         }  
    42   
    43         //设置禁止弹出保存和覆盖的询问提示框  
    44         excel.DisplayAlerts = false;  
    45         excel.AlertBeforeOverwriting = false;  
    46   
    47         //保存工作簿  
    48         excel.Application.Workbooks.Add(true).Save();  
    49         //保存excel文件  
    50         excel.Save("D:" + "\KKHMD.xls");  
    51                       
    52         //确保Excel进程关闭  
    53         excel.Quit();  
    54         excel = null;  
    55   
    56     }  
    57     catch (Exception ex)  
    58     {  
    59         MessageBox.Show(ex.Message, "错误提示");  
    60     }  
    61 }  
    View Code

    导出从数据库中查询到的所有的数据到Excel中

     1 #region 导出全部数据到Excel中,可弹出保存对话框,但没用SaveFileDialog  
     2   
     3 public void printAll(System.Data.DataTable dt)  
     4 {  
     5     //导出到execl  
     6     try  
     7     {  
     8         //没有数据的话就不往下执行  
     9         if (dt.Rows.Count == 0)  
    10             return;  
    11         //实例化一个Excel.Application对象  
    12         Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();  
    13   
    14         //新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错  
    15         excel.Application.Workbooks.Add(true);  
    16   
    17         //让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写  
    18         excel.Visible = false;  
    19         //生成Excel中列头名称  
    20         for (int i = 0; i < dt.Columns.Count; i++)  
    21         {  
    22             excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;//输出DataGridView列头名  
    23         }  
    24   
    25         //把DataGridView当前页的数据保存在Excel中  
    26         if (dt.Rows.Count > 0)  
    27         {  
    28             for (int i = 0; i < dt.Rows.Count; i++)//控制Excel中行,上下的距离,就是可以到Excel最下的行数,比数据长了报错,比数据短了会显示不完  
    29             {  
    30                 for (int j = 0; j < dt.Columns.Count; j++)//控制Excel中列,左右的距离,就是可以到Excel最右的列数,比数据长了报错,比数据短了会显示不完  
    31                 {  
    32                     string str = dt.Rows[i][j].ToString();  
    33                     excel.Cells[i + 2, j + 1] = "'" + str;//i控制行,从Excel中第2行开始输出第一行数据,j控制列,从Excel中第1列输出第1列数据,"'" +是以string形式保存,所以遇到数字不会转成16进制  
    34                 }  
    35             }  
    36         }  
    37         //设置禁止弹出保存和覆盖的询问提示框  
    38         excel.DisplayAlerts = false;  
    39         excel.AlertBeforeOverwriting = false;  
    40   
    41         //保存工作簿,值为false会报错  
    42         excel.Application.Workbooks.Add(true).Save();  
    43         //保存excel文件  
    44         excel.Save("D:" + "\KKHMD.xls");  
    45   
    46         //确保Excel进程关闭  
    47         excel.Quit();  
    48         excel = null;  
    49   
    50     }  
    51     catch (Exception ex)  
    52     {  
    53         MessageBox.Show(ex.Message, "错误提示");  
    54     }  
    55 }  
    56 private void button1_Click(object sender, EventArgs e)  
    57 {  
    58     printAll(dt);  
    59 }  
    60  
    61 #endregion  
    View Code

    这不是最好的版本,无论是功能上还是效率上,至少没用SaveFileDialog的话,控制不到取消保存按钮,一旦点击了取消保存,则软件重起之前一直都不能再使用导出功能,只能是手动杀掉进程中的Excel.exe,进程中的Excel.exe也是没有在程序里进行关闭的,所以是使用一次导出功能,就会在进程中多生成一次Excel.exe

  • 相关阅读:
    Door Frames CodeForces
    POJ 3090 Visible Lattice Points (ZOJ 2777)
    从斐波那契到矩阵快速幂
    Recursive sequence (矩阵快速幂)2016ACM/ICPC亚洲区沈阳站
    c++ 类实现 AVL树容器(包含迭代器)
    c++ 链表类的实现(包含迭代器)
    HDU
    【几何+模拟】二次元变换 计蒜客
    【bfs+链式向前星】防御僵尸(defend)计蒜客
    deque in Python
  • 原文地址:https://www.cnblogs.com/zgrh/p/11130261.html
Copyright © 2011-2022 走看看