none
C#如何从Excel中提取数据到DataGridView中某一列 RRS feed

答案

  • 你好!

    通过 oledb 将 excel  做为数据源,读取 excel 的数据,遍历这些数据将数据添加到 dataGridView 绑定的 DataTable 中

    知识改变命运,奋斗成就人生!
    2009年11月24日 7:31
    版主

全部回复

  • c#读取excel这个应该会把?
    不会去baidu,google,bing。

    读取后的数据你可以保存在一个datatable内,然后绑定到grid中,绑定的时候只设置你需要的列,就可以达到你的目的了。


    family as water
    2009年11月23日 2:09
  • 从Excel中读取的数据,偶只要Excel中特定的一列,然后将这列的相关数据,通过SQL存储过程调用,生成相关的行,绑定到DataTable中,然后再显示在DataGridView中,

    关键是如何提取Excel中这一列?偶使用
    DataSet ds=new DataSet();
    return ds.Tables[0].???

    这一列该如何提取出来咯``?
    2009年11月23日 3:54
  • 你好!
         可以把Excel当成数据源,直接使用OleDbConnection来连接,方式和操作Access数据源类似啊!
    周雪峰
    2009年11月23日 5:08
    版主
  • 版主,偶现在的情况是:

        从Excel表中提取一列(N个数据)作为"物料编码",作为SQL存储过程的"参数",这个参数传递过来的值才是我想要的值(就会有N行的值),这样就构成了一个DataTable表了,然后将这个DataTable表用BindSource绑定DataGridView控件,这样就实现了功能了

       版主可能认为只要把Excel中的数据通过绑定到DataGridView控件,在DataGridView控件中显示即可了

    2009年11月23日 7:06
  • 这是偶写的一段从Excel中提取数据的代码:
    private int GetExcelCon()
            {
                string connection = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = C:\\Documents and Settings\\yangjh\\桌面\\sample.xls;Extended Properties=Excel 8.0";
                OleDbConnection thisconnection = new OleDbConnection(connection);
                string command = "select * from [sheet1$]";
                thisconnection.Open();
                OleDbDataAdapter adapter = new OleDbDataAdapter(command, thisconnection);
                DataSet ds = new DataSet();
                adapter.Fill(ds, "[sheet1$]");
                thisconnection.Close();
                foreach (DataRow Row in ds.Tables[0].Rows)
                {
                    //int RowCount=ds.Tables[0].Rows.Count;//?这段代码不知道该如何写,从DataTable中提取第0列作为参数
                }
            }
    2009年11月23日 7:27
  • 这是偶调用DataTable第0列的参数,执行SQL存储过程的代码:
    private DataTable SampleData
            {
                get
                {
                    string connection = "Server=192.100.3.3;Datasource=AIS20090330165131;uid=sa;pwd=;";
                    SqlConnection thisconntion = new SqlConnection(connection);
                    SqlCommand cmd = thisconntion.CreateCommand();
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "t_StoreAndSale";
                    cmd.CommandTimeout = 0;
                    SqlParameter parameter = new SqlParameter("@FFullNumber", SqlDbType.VarChar, 40);
                    parameter.Direction = ParameterDirection.ReturnValue;
                    parameter.Value = GetExcelCon();
                    cmd.Parameters.Add(parameter);
                    SqlDataAdapter Adapter = new SqlDataAdapter();
                    Adapter.SelectCommand = cmd;
                    DataSet ds = new DataSet();
                    Adapter.Fill(ds);
                    return ds.Tables[0];
                }
            }
    2009年11月23日 7:29
  • 这是偶绑定DataGridView与DataTable的代码:
    private void button1_Click(object sender, EventArgs e)
            {
                BindingSource DataBinding = new BindingSource(this.SampleData,null);
                this.dataGridView1.DataSource = DataBinding;
            }
    2009年11月23日 7:30
  • 你好!foreach (DataRow Row in ds.Tables[0].Rows)
    {
           //用Row[0]就取到第0列的值了,你是这个意思吗?!
    }
    周雪峰
    2009年11月23日 8:26
    版主
  • 取该列的值,有多少行,就调用多少次存储过程,根据这些返回的N行,构造成N行的DataTable,再将该DataTable用BindingSource绑定到DataGridView中,
    请周版主指点:如果偶还描述得不够清楚,偶的QQ:53615728
    随时等候周版主指点

    2009年11月23日 8:31
  • 不用这么客气啊!
    不好意思,我不使用qq啊!
    这是我的MSN:xuefeng1982@live.cn
    周雪峰
    2009年11月23日 9:00
    版主


  • The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年11月23日 23:15
    版主

  • private DataTable SampleData { get { string connection = "Server=192.100.3.3;Datasource=AIS20090330165131;uid=sa;pwd=;"; SqlConnection thisconntion = new SqlConnection(connection); SqlCommand cmd = thisconntion.CreateCommand(); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "t_StoreAndSale"; cmd.CommandTimeout = 0; SqlParameter parameter = new SqlParameter("@FFullNumber", SqlDbType.VarChar, 40); parameter.Direction = ParameterDirection.ReturnValue; parameter.Value = GetExcelCon(); cmd.Parameters.Add(parameter); SqlDataAdapter Adapter = new SqlDataAdapter(); Adapter.SelectCommand = cmd; DataSet ds = new DataSet(); Adapter.Fill(ds); return ds.Tables[0]; } }
    主要是执行存储过程这段,从Excel表中转化成DataTable,从该DataTable表中的某一列提取数据到存储过程去执行,这样的代码该如何写?版主说得很模糊,偶不太明白……
    2009年11月24日 2:09
  • 版主,偶现在的问题是如何使用DataTable中的某一列数据作为参数,传递至存储过程"t_StoreAndSale"中……
    这个问题困扰我N久了

    2009年11月24日 2:10
  • 你好,
    参考下面代码试试。

     private List<string> GetExcelCon()
        {
            string connection = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = C:\\Documents and Settings\\yangjh\\桌面\\sample.xls;Extended Properties=Excel 8.0";
            OleDbConnection thisconnection = new OleDbConnection(connection);
            string command = "select * from [sheet1$]";
            thisconnection.Open();
            OleDbDataAdapter adapter = new OleDbDataAdapter(command, thisconnection);
            DataSet ds = new DataSet();
            adapter.Fill(ds, "[sheet1$]");
            thisconnection.Close();
            List<string> parameters = new List<string>();
            foreach (DataRow Row in ds.Tables[0].Rows)
            {
                parameters.Add(Row[0].ToString());
            }
            return parameters;
        }
    
    
        private DataTable SampleData(string para)
        {
           
                string connection = "Server=192.100.3.3;Datasource=AIS20090330165131;uid=sa;pwd=;";
                SqlConnection thisconntion = new SqlConnection(connection);
                SqlCommand cmd = thisconntion.CreateCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "t_StoreAndSale";
                cmd.CommandTimeout = 0;
                SqlParameter parameter = new SqlParameter("@FFullNumber", SqlDbType.VarChar, 40);
                parameter.Direction = ParameterDirection.ReturnValue;
                parameter.Value =para;
                cmd.Parameters.Add(parameter);
                SqlDataAdapter Adapter = new SqlDataAdapter();
                Adapter.SelectCommand = cmd;
                DataSet ds = new DataSet();
                Adapter.Fill(ds);
                return ds.Tables[0];
           
        }
    
        public DataTable GetAllData()
        {
            List<string> parameters = GetExcelCon();
            DataTable dt = new DataTable();
            foreach (string item in parameters)
            {
                DataTable returnDt = SampleData(item);
                if (returnDt!=null&&returnDt.Rows.Count!=0)
                {
                    dt.Rows.Add(returnDt.Rows[0].ItemArray);
                }
            }
            return dt;
        }
    

    Microsoft Online Community Support
    2009年11月24日 2:37
  • 你好!

    通过 oledb 将 excel  做为数据源,读取 excel 的数据,遍历这些数据将数据添加到 dataGridView 绑定的 DataTable 中

    知识改变命运,奋斗成就人生!
    2009年11月24日 7:31
    版主