none
各位朋友,如何实现多张Excel表的查询统计? RRS feed

  • 问题

  • 如题,由于工作需要,我手头有10多张excel表,都是每年的人事统计数据,因此表的格式是一样的。
    现在想将这10多张表导入到winform中,通过文件菜单导入 。每张导入的表都能显示在单独的tabpage中。好比下图所示:

    然后对这些表进行数据统计,比如可以实现2000年~2009年 姓名=‘张三’这个人的数据统计,然后将统计结果显示在统计界面的datagridview 中 。 不知道DATASET能不能支持多表。

     

    2010年4月26日 16:41

答案

  • 你好!

         DataSet是支持多张表的,可以像访问其他数据一样来访问excel:

    把Excel数据读入DataTable
    public static DataTable ExcelToDataTable(string strExcelFileName, string strSheetName)
    {
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" +"Extended Properties=Excel 5.0;";
    string strExcel = string.Format("select * from [{0}$]", strSheetName);
    DataSet ds = new DataSet();

    using (OleDbConnection conn = new OleDbConnection(strConn))
    {
    conn.Open();
    OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);
    adapter.Fill(ds, strSheetName);
    conn.Close();
    }

    return ds.Tables[strSheetName];
    }

    周雪峰
    2010年4月27日 1:28
    版主

全部回复

  • 你好!

         DataSet是支持多张表的,可以像访问其他数据一样来访问excel:

    把Excel数据读入DataTable
    public static DataTable ExcelToDataTable(string strExcelFileName, string strSheetName)
    {
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" +"Extended Properties=Excel 5.0;";
    string strExcel = string.Format("select * from [{0}$]", strSheetName);
    DataSet ds = new DataSet();

    using (OleDbConnection conn = new OleDbConnection(strConn))
    {
    conn.Open();
    OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);
    adapter.Fill(ds, strSheetName);
    conn.Close();
    }

    return ds.Tables[strSheetName];
    }

    周雪峰
    2010年4月27日 1:28
    版主
  • 非常谢谢版主,导入后期的多表统计怎么实现呢?

    2010年4月28日 9:18
  • 学习了,我以前倒没想到excell可以如数据库一样来访问。看到问题,不妨再多说几句,DataSet包含了多个DataTable,而其实每张表又可以看做是一个dataTable。可将每个excell放在一个dataTable里面,如:

          conn.Open();

          OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel1, strConn);

          adapter.Fill(ds[0], strSheetName1);

           adapter = new OleDbDataAdapter(strExcel2, strConn);

           adapter.Fill(ds[1],strSheetName2);

          conn.Close();

         之后使用DataSet的Merge函数,设置相应参数,就可以实现合并了。

    • 已编辑 络绎 2010年4月28日 9:59 Update some errors
    2010年4月28日 9:59
  • 学习了,我以前倒没想到excell可以如数据库一样来访问。看到问题,不妨再多说几句,DataSet包含了多个DataTable,而其实每张表又可以看做是一个dataTable。可将每个excell放在一个dataTable里面,如:

          conn.Open();

          OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel1, strConn);

          adapter.Fill(ds[0], strSheetName1);

           adapter = new OleDbDataAdapter(strExcel2, strConn);

           adapter.Fill(ds[1],strSheetName2);

          conn.Close();

         之后使用DataSet的Merge函数,设置相应参数,就可以实现合并了。


    客气了啊!大家互相交流啊!
    周雪峰
    2010年4月28日 13:39
    版主
  • 你好!

         不客气啊!都导入到DataSet中就很容易统计了,可以根据你的要求访问或遍历行或列来统计!


    周雪峰
    2010年4月28日 13:47
    版主