页面是GV显示数据,怎么把Excel中的数据导入到GV,请高手指教

解决方案 »

  1.   

    http://zhangbq168.blog.163.com/blog/static/2373530520080249454473/(转)
      

  2.   


    string connStr = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = 'C:\Excel.xls';Extended Properties=Excel 8.0";
                    OleDbConnection cnnxls = new OleDbConnection(connStr);
                    OleDbDataAdapter myDa = new OleDbDataAdapter("select * from [Sheet1$]", cnnxls);
                    DataSet ds = new DataSet();
                    myDa.Fill(ds);
                    DataTable dt = ds.Tables[0];代码中你就得到了C盘中Excel.xls文件中第一页的数据了...
    至于将DataTable绑定到GV中,楼主应该会的...
      

  3.   


    /// <summary>
        /// 导入数据到GridView
        /// </summary>
        /// <param name="fileUpload">文件上传控件对象</param>
     /// <param name="filePath">要存放文件的服务器路径</param>
        /// <param name="gridview">目标GridView</param>
        /// <param name="keyColIndex">用于导入的主键列</param>
        /// <returns>返回没有导入的数据DataSet</returns>
        public static DataSet ExcelToGridView(FileUpload fileUpload, string filePath, GridView gridview, int keyColIndex, string strMsg)
        {
          string errMsg = string.Empty;
          DataSet ds = null ;
          try
          {
            if ( ! filePath.EndsWith("\"))
            {
              filePath += "\";
            }
            string fileName = fileUpload.FileName.Replace(".xls", "") + "_" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls";
            string fullFileName = filePath + fileName;
            fileUpload.SaveAs(fullFileName);
            ds = ExcelToGridView(fullFileName, gridview, keyColIndex,errMsg);
            if ( errMsg != string.Empty)
            {
              errMsg += "将数据导入GridView失败." + errMsg ;
            };
          }
          catch (Exception ex)
          {
            errMsg += "上传excel文件失败." ;
          }
          strMsg = errMsg;      return ds ;
        }
      

  4.   

     DataTable Excel_UserInfo = new DataTable();
    string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileInfo.FullName + ";" + "Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;\"";
                    string strExcel = "select * from [sheet1$]";                using (OleDbDataAdapter adaptor = new OleDbDataAdapter(strExcel, strConn))
                    {
                        DataSet ds = new DataSet();
                        adaptor.Fill(ds);
                        Excel_UserInfo = ds.Tables[0];
                    }
    Gridview绑定Excel_UserInfo
      

  5.   

    在用
    DataSet 添加到数据。 
    如:
    foreach (DataRow row in dataTable.Rows)
    {
    //SQL语句数据拼接。
    //执行SQL
    }
      

  6.   

    遍历Excel_UserInfo 插入数据库。
      

  7.   


    既然可以显示了,就说明你得到了DataTable了...
    直接把DataTable中的值存入数据库就OK了啊..
    可以用存储过程,或者是循环DataTable中的DataRow,生成sql语句,放入IList<string>中,循环插入数据库就行了
      

  8.   

    完整全在这了
    <a href='http://blog.csdn.net/ajaxtop/article/details/6670449'>请查阅</a>
      

  9.   

        /// <summary>
        /// 讀取EXCEL
        /// </summary>
        /// <param name="path">EXCEL文件的路徑</param>
        /// <returns></returns>
        public DataSet ReadExcel(string path)
        {
            DataSet ds = new DataSet();
            string strMessage = "";
            try
            {
                string strcon = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + path + ";Extended Properties='Excel 8.0;HRD=no;IMEX=2;'";
                OleDbConnection con = new OleDbConnection(strcon);
                con.Open();
                string strSQL = "select * from [sheet1$]";
                OleDbDataAdapter da = new OleDbDataAdapter(strSQL, con);
                int flag = da.Fill(ds, "excel");
                con.Close();
                return ds;
            }
            catch (Exception ex)
            {
                strMessage = "錯誤訊息:1.可能是要上傳的EXCEL在打開狀態。2.也可能是" + ex.ToString();
                MessageAjaxHelper.showAlert(UpdatePanel1, strMessage);
                return ds;        }
        }将返回的DataSet进行转换 :DataTable dt=ReadExcel(path);
    GridView1.DataSource=dt;
    GridView1.DataBound();
    写入数据库:
    string insertSQL="insert into TableName1(a,b,c) values(";
    然后遍历刚才的dt组合insert语句即可了。不过楼主要注意字段的合法性检测,如年龄要在10-100之间等。最后提醒 office2003和2007的读取字符串不同。我这个是2003格式的。子夜的那个是2007格式的。
      

  10.   

    对了 还要注意要用SQL的事务回滚来提交多条同样式的SQL语句,防止出错。
        /// <summary>
        /// 执行多条SQL语句,实现数据库事务。
        /// </summary>
        /// <param name="SQLStringList">多条SQL语句</param>
        public static int ExecuteSqlTran(List<String> SQLStringList)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                SqlTransaction tx = conn.BeginTransaction();
                cmd.Transaction = tx;
                try
                {
                    int count = 0;
                    for (int n = 0; n < SQLStringList.Count; n++)
                    {
                        string strsql = SQLStringList[n];
                        if (strsql.Trim().Length > 1)
                        {
                            cmd.CommandText = strsql;
                            count += cmd.ExecuteNonQuery();
                        }
                    }
                    tx.Commit();
                    return count;
                }
                catch(Exception ex)
                {
                    tx.Rollback();
                    return 0;
                }
            }
        }