【C#机房重构】解剖式学习将dataGridview导出Excel表

前言:

在研究了一天的datagridview之后,又继续研究了将datagridview中的内容导入到excel表的全部代码之后,终于柳暗花明!接下来和我一起来学习吧!

1、因为好多的窗体都会用到将数据导出到Excel,所以,我在UI层建了一个专门用来导数据的类

using System.Data;
using System.Windows.Forms;
namespace UI
{
   public class ExportExcel
    {
        public void RExcel(string name, DataGridView dgv)
        {
            //总可见行数,总可见列数
            int colCount = dgv.Columns.GetColumnCount(DataGridViewElementStates.Visible);
            int rowCount = dgv.Rows.GetRowCount(DataGridViewElementStates.Visible);

            //判断有没有数据
            if (dgv.Rows.Count==0||rowCount==0)
            {
                MessageBox.Show("表中没有数据","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
            else
            {

                SaveFileDialog save = new SaveFileDialog();//用来提示用户保存文件的位置
                save.Filter = "excel files(*.xlsx)|*.xlsx";//获取当前文件筛选器字符串,filter为过滤的意思,表示用户存储的文件类型,对应的是保存类型
                save.Title = "请选择要导出数据的位置";//设置文件对话框的标题
                save.FileName = name + DateTime.Now.ToLongDateString();//保存文件名字

                //如果运行了对话框
                if (save.ShowDialog()==DialogResult.OK) //对话框中的返回值是 OK (通常从一个标有确定按钮发送)。
                {
                    string fileName = save.FileName;
                    //创建Excel对象
                    Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
                    if (excel==null)
                    {
c
                    }
                    //创建Excel工作簿
                    Microsoft.Office.Interop.Excel.Workbook excelBook = excel.Workbooks.Add(true);
                    Microsoft.Office.Interop.Excel.Worksheet wxcelsheet = (Microsoft.Office.Interop.Excel.Worksheet)excelBook.Worksheets[1];
                    //生成字段名称
                    int K = 0;
                    for (int i = 0; i < dgv.ColumnCount; i++)
                    {
                        if (dgv.Columns[i].Visible)//不导出隐藏的列
                        {
                            excel.Cells[1, K + 1] = dgv.Columns[i].HeaderText;//标题
                            K++;
                        }
                    }
                    for (int i = 0; i < dgv.RowCount; i++)
                    {
                        K = 0;

                            for (int j = 0; j < dgv.ColumnCount; j++)
                            {
                                if (dgv.Columns[j].Visible)//不导出隐藏的列
                                { 
                                        excel.Cells[i+2,K+1]= dgv[j, i].Value.ToString(); //内容                                                       
                                }
                            K++;
                        }
                    }
                    try
                    {
                        excelBook.Saved = true;
                        excelBook.SaveCopyAs(fileName);//保存的副本
                        MessageBox.Show("导出成功!");
                    }
                    catch 
                    {
                        MessageBox.Show("导出失败,文件可能正在使用中" ,"提示");
                    }
                }
            }
        }

    }
}

调用时的代码

        private void btnExcel_Click(object sender, EventArgs e)//导出EXCEl按钮
        {
            string name = "李光 ";
            ExportExcel ex = new ExportExcel();
            ex.RExcel(name, dataGridView);
        }

图片解释部分代码:

SaveFileDialog save = new SaveFileDialog();//用来提示用户保存文件的位置,一个框
save.Filter = "excel files(*.xlsx)|*.xlsx";//获取当前文件筛选器字符串,filter为过滤的意思,表示用户存储的文件类型,对应的是保存类型
save.Title = "请选择要导出数据的位置";//设置文件对话框的标题
save.FileName = name + DateTime.Now.ToLongDateString();//保存文件名字
if (save.ShowDialog()==DialogResult.OK) //对话框中的返回值是 OK (通常从一个标有确定按钮发送)

这里写图片描述

图片都是代码对应的位置,在这里补充一下DialogResult枚举类,共有如下成员!
这里写图片描述

可以和messageBox相互结合使用!

后记

向接口那些东西,理解的比较粗浅,在这里,特别大的感受就是,多看帮助文档MSDN,这太有用了,也正验证了米老师的那句话,多看帮助,少走弯路!

猜你喜欢

转载自blog.csdn.net/jerry11112/article/details/81010249