1. 程式人生 > >將Excel的數據導入DataGridView中(轉)

將Excel的數據導入DataGridView中(轉)

tac xtend sender 數據導入 ron www. exc wro connect

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中(轉)