将Excel的数据导入DataGridView中(转)

Posted 绛河

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Excel的数据导入DataGridView中(转)相关的知识,希望对你有一定的参考价值。

https://www.cnblogs.com/lhxhappy/archive/2008/11/26/1341873.html

/// <summary>

        /// 点击按钮导入数据

        /// 作者:lhxhappy

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void button1_Click(object sender, EventArgs e)

        {

            //打开一个文件选择框

            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Title = "Excel文件";

            ofd.FileName = "";

            ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);//为了获取特定的系统文件夹,可以使用System.Environment类的静态方法GetFolderPath()。该方法接受一个Environment.SpecialFolder枚举,其中可以定义要返回路径的哪个系统目录

            ofd.Filter = "Excel文件(*.xls)|*.xls";

            ofd.ValidateNames = true;     //文件有效性验证ValidateNames,验证用户输入是否是一个有效的Windows文件名

            ofd.CheckFileExists = true;  //验证路径有效性

            ofd.CheckPathExists = true; //验证文件有效性





            string strName = string.Empty;

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

            {

                strName = ofd.FileName;

            }



            if (strName == "")

            {

                MessageBox.Show("没有选择Excel文件!无法进行数据导入");

                return;

            }

            //调用导入数据方法

            EcxelToDataGridView(strName, this.hpGridView1);

        }

Excel数据导入方法

/// <summary>

        /// Excel数据导入方法

        /// 作者:lhxhappy

        /// </summary>

        /// <param name="filePath"></param>

        /// <param name="dgv"></param>

        public void EcxelToDataGridView(string filePath,DataGridView dgv)

        {

            //根据路径打开一个Excel文件并将数据填充到DataSet中

            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + filePath + ";Extended Properties =\'Excel 8.0;HDR=NO;IMEX=1\'";//导入时包含Excel中的第一行数据,并且将数字和字符混合的单元格视为文本进行导入

            OleDbConnection conn = new OleDbConnection(strConn);

            conn.Open();

            string strExcel = "";

            OleDbDataAdapter myCommand = null;

            DataSet ds = null;

            strExcel = "select  * from   [sheet1$]";

            myCommand = new OleDbDataAdapter(strExcel, strConn);

            ds = new DataSet();

            myCommand.Fill(ds, "table1");



            //根据DataGridView的列构造一个新的DataTable

            DataTable tb = new DataTable();

            foreach (DataGridViewColumn dgvc in dgv.Columns)

            {

                if (dgvc.Visible && dgvc.CellType != typeof(DataGridViewCheckBoxCell))

                {

                    DataColumn dc = new DataColumn();

                    dc.ColumnName = dgvc.DataPropertyName;

                    //dc.DataType = dgvc.ValueType;//若需要限制导入时的数据类型则取消注释,前提是DataGridView必须先绑定一个数据源那怕是空的DataTable

                    tb.Columns.Add(dc);

                }

            }



            //根据Excel的行逐一对上面构造的DataTable的列进行赋值

            foreach (DataRow excelRow in ds.Tables[0].Rows)

            {

                int i = 0;

                DataRow dr = tb.NewRow();

                foreach (DataColumn dc in tb.Columns)

                {

                    dr[dc] = excelRow[i];

                    i++;

                }

                tb.Rows.Add(dr);

            }

            //在DataGridView中显示导入的数据

            dgv.DataSource = tb;

        }

 

以上是关于将Excel的数据导入DataGridView中(转)的主要内容,如果未能解决你的问题,请参考以下文章

将Excel的数据导入DataGridView中(转)

C#winform 将excel中的数据导入到datagridview中

将数据从(大)文件 Excel 导入 datagridview,然后导入数据库 - 为啥插入数据库需要这么长时间并且不能保存所有数据?

Winform excel导入问题

C# 将excel导入到DataGridView上 (可以对数据进行操作)

如何将datagridview中数据导出