读书人

oledb可否同时读取多个excel文件解决方

发布时间: 2012-05-16 11:12:12 作者: rapoo

oledb可否同时读取多个excel文件
我要同时用到用户上传的5个excel文件,每个文件一个sheet,通过oledb指定sql语句联接这5个表,但是oledb一次只能打开一个文件,这样的话,必须使这5个sheet都在一个excel文件里面,现在能想到的办法就是每次用户上传这5个文件的时候我再在服务器做个加工,将这5个excel的5个sheet拷贝到一个新的excel文件里面,之后再读这个文件。除开这个还有其他办法吗?
顺便问一下大家,将多个excel文件的sheet挪到一个excel文件上,有没有什么比较好的方法,最好有例子,多谢了!!

[解决办法]
用一个dataset。分别读取完5个表后存入这个ds,然后做加工
[解决办法]
貌似不行,打个五个EXCEL要五个线程,你用一个DataSet怎么操作??更不可能同时了
[解决办法]

C# code
//导入excel2007到datagridview  如果LZ想同时导入多个的话 能实现 但是很烦 建议很少一个一个的导入 public void EcxelToDataGridView(string filePath, DataGridView dgv)        {            //根据路径打开一个excel文件并将数据填充到dataset中            string strConn = @"Provider = Microsoft.Ace.OLEDB.12.0; Data Source = " + filePath + "; Extended Properties = 'Excel 12.0;HDR = NO; IMEX=1'";            OleDbConnection conn = new OleDbConnection(strConn);            conn.Open();            string strExcel = "";            strExcel = "select * from [sheet1$]";            DataTable schemaTable = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);            string tableName = schemaTable.Rows[0][2].ToString().Trim();            OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn);            DataSet ds = new DataSet();            myCommand.Fill(ds, "table1");            //根据DataGridView的列构造一个DataTable            DataTable td = ds.Tables[0];            try            {                //MessageBox.Show(td.ToString());                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;                        //MessageBox.Show(dc.ToString());                        td.Columns.Add(dc);                    }                }                //根据excel的行逐一对上面的构造的datatable的列进行赋值                for (int i = 0; i < ds.Tables[0].Rows.Count - 1; i++)                {                    //int j = 0;                    DataRow dr = td.NewRow();                    DataRow excelRow = ds.Tables[0].Rows[i];                    foreach (DataColumn dc in td.Columns)                    {                        dr[dc] = excelRow[i];                        //MessageBox.Show(dr[dc].ToString());                        i++;                    }                    td.Rows.Add(dr);                }                //在datagridview中显示导入的数据                dgv.DataSource = td;            }            catch (Exception)            {                MessageBox.Show("该表已存在你即将导入的excel文件...,请点击清空按钮重新导入...");                return;            }            finally            {                conn.Close();            }        } 

读书人网 >C#

热点推荐