zoukankan      html  css  js  c++  java
  • WinForm开发中,将Excel文件导入到DataGridView中时,获取Excel中所有表格的名称。

    在一次将Excel文件导入到DataGridView中时发现以前的代码都是讲excel中的表名写死了的,都是Sheet1$,要是想导入第二个的话,那就是Sheet2$了,写死了的话,就没有办法将Excel中的第二个表格导入了。于是就做了一个下拉列表,在里面写了N多个Sheet1$、Sheet2$、Sheet3$......SheetN$,当时自以为把问题完美的解决了,但是后来发现原来Excel文件中的表格也是可以自己命名的,谁规定非得叫Sheet1$之类的了?我完全可以叫他xiaoqiang啊,于是问题出来了,之前的办法还是没有从根本上解决这个问题。后来就想,应该先把导入的Excel文件中的所有表格的名字都取到,然后绑定到一个下拉列表中,在让用户自己去选择要导入那个表里面的数据,这样一来的话,问题不就解决了吗?于是上网找资料,还真被我找到了。下面把代码贴出来:

    这个方法是用来获取导入的那个Excel文件中的所有的表的名称的,他返回的是一张表,这张表中存储的关于这个Excel中的所有表的相关信息,狠丰富的,里面有一个字段叫做Table_Name,这个字段存储的就是Excel中所有表的名称,我们返回这个表格以后,就可以用一个循环来获取这个Table_Name字段中的数据了不是?这个方法的参数是要导入的那个Excel文件的路径,当我们用OpenFileDialog控件打开Excel文件的时候,用它的对象的FileName属性就能获取路径了,这个做开发的地球人都知道吧?
            /// <summary>
            /// 获取Excel中表的名称
            /// </summary>
            /// <param name="p_ExcelFile">Excel的路径</param>
            /// <returns></returns>
            public static DataTable GetExcelTableName(string p_ExcelFile)
            {
                try
                {
                    if (System.IO.File.Exists(p_ExcelFile))
                    {
                        OleDbConnection _ExcelConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0\";Data Source=" + p_ExcelFile);
                        _ExcelConn.Open();
                        DataTable _Table = _ExcelConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                        _ExcelConn.Close();
                        return _Table;
                    }
                    return null;
                }
                catch
                {
                    return null;
                }
            }

    当把上面的方法写在类中以后,就是去调用它了,我们在OpenFileDialog 控件的打开事件中去调用上面的这个方法就可以了。

                OpenFileDialog openFileDialog = new OpenFileDialog();
                openFileDialog.Filter = "Excel文件 (*.xls)|*.xls";
                openFileDialog.FilterIndex = 0;
                openFileDialog.RestoreDirectory = true;
                //openFileDialog..CreatePrompt = true;
                openFileDialog.Title = "请选择要导入的Excel文件";
                //openFileDialog.ShowDialog();
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    //获取Excel中各表的名称,并绑定到下拉列表中
                    fileName = openFileDialog.FileName;
                    DataTable _Table = GetExcelTableName(fileName);
                    string tableName = _Table.Rows[0]["Table_Name"].ToString();

                    //在绑定前先将下拉列表清空 cboExcelName是下拉列表的名称,即:comBobox控件
                    cboExcelName.Items.Clear();

                    //然后我们用一个循环将上面那个方法中返回来的table中的Table_Name这个字段的数据读取出来,绑定到控件上。
                    for (int i = 0; i != _Table.Rows.Count; i++)
                    {
                        cboExcelName.Items.Add((_Table.Rows[i]["Table_Name"].ToString()));
                    }
                    cboExcelName.SelectedIndex = 0;
                    btnInput.Enabled = true;
                 }

    嗯,做到这里就OK了,这样就顺利的把Excel中的表名都获取到了,也绑定到了comBobox控件中了,只要用户选择一下要导入哪个表的数据,那就可以直接导入相应的表中的数据了。

  • 相关阅读:
    zabbix--完整安装攻略
    python--8大排序(原理+代码)
    python--二分法查找
    celery生产者-消费者
    python--基础知识点梳理(之数据结构)
    mysql--事务详解
    python--基础知识点梳理(三)深浅拷贝、进线协程、os和sys、垃圾回收机制、读文件的三种方式
    python--基础知识点梳理(二)面向对象
    python--基础知识点梳理(一)数据类型、迭代生成装饰器、函数
    java 集合
  • 原文地址:https://www.cnblogs.com/blackbean/p/1904122.html
Copyright © 2011-2022 走看看