C#datagrid生成Excel文件

先项目\添加引用\COM
Microsoft  Office  xx.x  Object  Library
再:
不能写using Excel;要写成using Microsoft.Office.Interop.Excel;

导出当前页 数据到Excel

DataGridView命名为dataGridView1

#region 导出当前页到Excel中   
  
//按下导出按钮   
private   void  button7_Click( object  sender, EventArgs e)  
{  
    print(dataGridView1);  
}  
public   void  print(DataGridView dataGridView1)  
{  
    //导出到execl   
    try   
    {  
        //没有数据的话就不往下执行   
        if  (dataGridView1.Rows.Count == 0)  
            return ;  
        //实例化一个Excel.Application对象   
        Microsoft.Office.Interop.Excel.Application excel = new  Microsoft.Office.Interop.Excel.Application();  
  
        //让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写   
        excel.Visible = false ;  
                  
        //新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错   
    excel.Application.Workbooks.Add(true );                
        //生成Excel中列头名称   
        for  ( int  i = 0; i < dataGridView1.Columns.Count; i++)  
        {  
            excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;  
        }  
        //把DataGridView当前页的数据保存在Excel中   
        for  ( int  i = 0; i < dataGridView1.Rows.Count – 1; i++)  
        {  
            for  ( int  j = 0; j < dataGridView1.Columns.Count; j++)  
            {  
                if  (dataGridView1[j, i].ValueType ==  typeof ( string ))  
                {  
                    excel.Cells[i + 2, j + 1] = “‘”  + dataGridView1[j, i].Value.ToString();  
                }  
                else   
                {  
                    excel.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString();  
                }  
            }  
        }  
  
        //设置禁止弹出保存和覆盖的询问提示框   
        excel.DisplayAlerts = false ;  
        excel.AlertBeforeOverwriting = false ;  
  
        //保存工作簿   
        excel.Application.Workbooks.Add(true ).Save();  
        //保存excel文件   
        excel.Save(“D:”  +  “\\KKHMD.xls” );  
                      
        //确保Excel进程关闭   
        excel.Quit();  
        excel = null ;  
  
    }  
    catch  (Exception ex)  
    {  
        MessageBox.Show(ex.Message, “错误提示” );  
    }  
}  
 
#endregion   

 

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

 

#region 导出全部数据到Excel中,可弹出保存对话框,但没用SaveFileDialog   
  
public   void  printAll(System.Data.DataTable dt)  
{  
    //导出到execl   
    try   
    {  
        //没有数据的话就不往下执行   
        if  (dt.Rows.Count == 0)  
            return ;  
        //实例化一个Excel.Application对象   
        Microsoft.Office.Interop.Excel.Application excel = new  Microsoft.Office.Interop.Excel.Application();  
  
        //新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错   
        excel.Application.Workbooks.Add(true );  
  
        //让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写   
        excel.Visible = false ;  
        //生成Excel中列头名称   
        for  ( int  i = 0; i < dt.Columns.Count; i++)  
        {  
            excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;//输出DataGridView列头名   
        }  
  
        //把DataGridView当前页的数据保存在Excel中   
        if  (dt.Rows.Count > 0)  
        {  
            for  ( int  i = 0; i < dt.Rows.Count; i++) //控制Excel中行,上下的距离,就是可以到Excel最下的行数,比数据长了报错,比数据短了会显示不完   
            {  
                for  ( int  j = 0; j < dt.Columns.Count; j++) //控制Excel中列,左右的距离,就是可以到Excel最右的列数,比数据长了报错,比数据短了会显示不完   
                {  
                    string  str = dt.Rows[i][j].ToString();  
                    excel.Cells[i + 2, j + 1] = “‘”  + str; //i控制行,从Excel中第2行开始输出第一行数据,j控制列,从Excel中第1列输出第1列数据,”‘” +是以string形式保存,所以遇到数字不会转成16进制   
                }  
            }  
        }  
        //设置禁止弹出保存和覆盖的询问提示框   
        excel.DisplayAlerts = false ;  
        excel.AlertBeforeOverwriting = false ;  
  
        //保存工作簿,值为false会报错   
        excel.Application.Workbooks.Add(true ).Save();  
        //保存excel文件   
        excel.Save(“D:”  +  “\\KKHMD.xls” );  
  
        //确保Excel进程关闭   
        excel.Quit();  
        excel = null ;  
  
    }  
    catch  (Exception ex)  
    {  
        MessageBox.Show(ex.Message, “错误提示” );  
    }  
}  
private   void  button1_Click( object  sender, EventArgs e)  
{  
    printAll(dt);  
}  
 
#endregion   



本文固定链接: http://www.ntxz.net/?p=496 | 周忞 | 吉心的记事本



该日志由 吉心 于2009年11月30日发表在 懒得分类, 旧版博客 分类下, 你可以发表评论
在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: C#datagrid生成Excel文件 | 周忞 | 吉心的记事本

C#datagrid生成Excel文件:等您坐沙发呢!

发表评论

您必须 [ 登录 ] 才能发表留言!