C#数据导出Excel详细示例

C#数据导出Excel详细示例

一、 WinForm中将DataGridView中的数据导出Excel

(以下情况建立在用户已实现绑定DataGridView控件,并能显示数据)

1、首先要为项目添加引用

添加Microsoft.Office.Interop.Excel 引用 如果添加引用的时候不存在该引用可以在网上下载相应的dll文件,

(即Interop.Excel.dll 文件)放在一个目录下  然后添加引用的时候选择浏览 找到目录即可添加完成。

2、在窗体中添加SaveFileDialog控件

3、(如果想在导出过程中添加个进度条提示,则需要此步骤)在窗体上添加一个Panel,  Panel中添加ProgressBar控件 一个label控件

4、在代码中引入名称空间

        using Excel;

 5.(如果不加进度条 此步骤也可省略)在窗体加载事件中书写代码

        private void Form1_Load(object sender, EventArgs e)

        {  

            //panel中放置的是进度条 在导出数据的时候才显示

            panel1.Visible = false;

            //指定其父控件,目的是让Panel透明

            panel1.Parent = this.DataGridView1;

            panel1.BackColor = Color.Transparent;

            lable1.ForeColor = Color.RoyalBlue;

            lable1.BackColor = Color.Transparent;

        }

 6、在保存按钮的事件中书写代码

        (如果不加进度条 把 下面关于panel1 和lable1的代码去掉即可)

         Private void btnSave_Click(object sender, EventArgs e)

         {   

                //如果查询的数据为空 点击导出按钮的提示

               if(dt.Rows.Count==0)

              {

                    Messagebox.Show(“没有数据可供导出" );

                   return;

              }

             else

             {   

                //设置筛选器 为Excel

                saveFileDialog.Filter = "Excel 文件|*.xls";

                //设置筛选器显示的第一项为Excel文件

                saveFileDialog.FilterIndex = 1;

                //设置保存文件对话框的标题

                saveFileDialog.Title = "文件保存路径设置";

                if (saveFileDialog.ShowDialog() ==DialogResult.OK)

                {

                    //获取保存的Excel文件名

                    String strName = saveFileDialog.FileName; 

                    if (strName.Length != 0)

                    {

                        //  定义一个miss实例 方法中的参数用miss表示取默认值

                        System.Reflection.Missing miss = System.Reflection.Missing.Value;

                        //创建一个Excel运行程序的对象,Excel相当于执行程序

                        ApplicationClass excel =newApplicationClass();

                        //如果计算机未安装Excel则Excel为null将不能进行下一步操作

                        if (excel ==null)

                        {

                            MessageBox.Show("无法启动Excel");

                            return;

                        }

                        //让Excel文件不可见

                        excel.Visible = false;

                        panel1.Visible=true;

                       //创建一个Workbooks对象                       

                        Workbooks books = excel.Workbooks;

                        //通过books创建book对象,book相当于Excel文件                       

                        Workbook book = books.Add(miss); //用miss来获取参数的默认值

                        //通过book创建booksheet对象,相当如Excel中的sheet                        

                       Worksheet sheet = (Excel.Worksheet)book.Worksheets[1];//取第一个sheet

                        sheet.Name = "test";

                        //创建range对象指定 一个范围可以对这范围进行设置可以省略

                        Excel.Range range;

                        /*以上是一些基本属性的设置,和基础对象的创建,以下开始向sheet中写入数据*/

                        //sheet中写入dgData中的字段名

                        for (int i = 0; i < dgData.Columns.Count; i++)

                        {

                            //在excel中第一行一列就是 (1,1)而不是(0,0)

                            excel.Cells[1, i + 1] = dgData.Columns[i].DataPropertyName;

                            //为range赋值

                            range = (Excel.Range)excel.Cells[1, i+1];

                            //设置颜色

                            range.Interior.ColorIndex = 15;

                            //字体为粗体

                            range.Font.Bold = true;

                            //上面3行是对导出的EXCEL的标题字段的设置,也可以省略

                        }

                        //写入数值

                       //此处应特别注意  外层循环的次数是dt中的行数,而内层循环的次数是DataGridView中显示的列数 而不是dt中的列数

                        for (int i = 0; i < dt.Rows.Count; i++)

                        {

                            for (int j = 0; j < dgData.Columns.Count; j++)

                            {

                                excel.Cells[i + 2, j + 1] = dt.Rows[i][dgData.Columns[j].DataPropertyName].ToString();

                            }

                            //进度条相关设置

                            this.progressBar1.Maximum = dtChart.Rows.Count;

                            this.progressBar1.Value = i;

                            this.lblProcess.Text = "已导出" + (i * 1f / dtChart.Rows.Count * 100).ToString("0.00") +"%";

                              /*winform的消息循环是一个线程来处理,假如你的某个操作比较耗时,那么消息处理要等你这个耗时操作做完了才能继续,
                             而Application.DoEvents方法就是让应用程序的主线程暂停(来处理运行其它逻辑)而去处理消息队列中的windows消息。
                             像鼠标移动鼠标点击都是windows消息,如果耗时操作一直进行,那么界面就像死锁一样,此处相当于临时终止SaveFileDialog线程 来显示进度条提示*/

                            System.Windows.Forms.Application.DoEvents();                      

                         } 

                       panel1.Visible=false;

                        //保存在指定路径

                        sheet.SaveAs(strName, miss, miss, miss, miss, miss, miss, miss, miss, miss);

                        book.Close(false, miss, miss);

                        books.Close();

                        excel.Quit();

                        //释放相关资源

                        System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);

                        System.Runtime.InteropServices.Marshal.ReleaseComObject(book);

                        System.Runtime.InteropServices.Marshal.ReleaseComObject(books);

                        System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);

                        MessageBox.Show("数据已经成功导出!!");

                    }

                }

                //垃圾回收

                GC.Collect();}

}

如果有做的不好的地方请大家指出,有看不懂的也欢迎大家提问

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值