First need to add the reference "Microsoft ADO
Ext. 2.8". You can easily add it from COM components.
Add an open Dialog box control on form
Put the following code on Browser button click
events…..
- private void button1_Click_1(object sender, EventArgs e)
- {
- OpenFileDialog fdlg = new OpenFileDialog();
- fdlg.Title = "Select file";
- fdlg.InitialDirectory = @"c:\";
- fdlg.FileName = txtFileName.Text;
- fdlg.Filter = "Excel Sheet(*.xls)|*.xls|All Files(*.*)|*.*";
- fdlg.FilterIndex = 1;
- fdlg.RestoreDirectory = true;
- if (fdlg.ShowDialog() == DialogResult.OK)
- {
- txtFileName.Text = fdlg.FileName;
- Import();
- Application.DoEvents();
- }
- }
This will filter only Excel file from your Machine.
This Excel file can contains more than one Sheet. You need to add another form
to all excel sheets name so that user can select any one excel sheet which he
want to import.
Write the following code on Page Load even of this
form
- private void Select_Tables_Load(object sender, EventArgs e)
- {
- if (!DataTables)
- {
- if (Tables != null)
- {
- for (int tables = 0; tables < Tables.Length; tables++)
- {
- try
- {
- ListViewItem lv = new ListViewItem();
- lv.Text = Tables[tables].ToString();
- lv.Tag = tables;
- lstViewTables.Items.Add(lv);
- }
- catch (Exception ex)
- { }
- }
- }
- }
- else
- {
- if (dtTable.Rows.Count>0)
- {
- for (int tables = 0; tables < dtTable.Rows.Count; tables++)
- {
- try
- {
- ListViewItem lv = new ListViewItem();
- lv.Text = dtTable.Rows[tables][0].ToString();
- lv.Tag = dtTable.Rows[tables][0];
- lstViewTables.Items.Add(lv);
- }
- catch (Exception ex)
- { }
- }
- }
- }
- }
By the following function we can find the total
sheets in Excel file.
- public static string[] GetTableExcel(string strFileName)
- {
- string[] strTables = new string[100];
- Catalog oCatlog = new Catalog();
- ADOX.Table oTable = new ADOX.Table();
- ADODB.Connection oConn = new ADODB.Connection();
- oConn.Open("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + strFileName + "; Extended Properties = \"Excel 8.0;HDR=Yes;IMEX=1\";", "", "", 0);
- oCatlog.ActiveConnection = oConn;
- if (oCatlog.Tables.Count > 0)
- {
- int item = 0;
- foreach (ADOX.Table tab in oCatlog.Tables)
- {
- if (tab.Type == "TABLE")
- {
- strTables[item] = tab.Name;
- item++;
- }
- }
- }
- return strTables;
- }
Following function return a dataset so that you can bind it from Data Grid View
easily.
- public static DataTable GetDataTableExcel(string strFileName, string Table)
- {
- System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + strFileName + "; Extended Properties = \"Excel 8.0;HDR=Yes;IMEX=1\";");
- conn.Open();
- string strQuery = "SELECT * FROM [" + Table + "]";
- System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(strQuery, conn);
- System.Data.DataSet ds = new System.Data.DataSet();
- adapter.Fill(ds);
- return ds.Tables[0];
- }
To see the complete source code you can download
the zip file.