Excel文件導出的操作我們經常用到,但是講一個Excel文檔導入並顯示到界面還是第一次用到。
下面簡單介紹下在C#下如何進行Excel文件的導入操作。
首先添加兩個引用
using System.IO;
using System.Data.OleDb;
添加控件openFileDialog
然後我們需要配置Excel的OleDb連接字符串
public const string OledbConnString = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = {0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'"; //Excel的 OleDb 連接字符串
////// 選擇EXCEL /// private void btn_BrowserExcel_Click(object sender, EventArgs e) { DialogResult dr = this.openFileDialog1.ShowDialog(); if (DialogResult.OK == dr) //判斷是否選擇文件 { this.txtPath.Text = this.openFileDialog1.FileName; this.btn_Import.Enabled = true; } }
////// 執行導入操作 /// private void btn_Import_Click(object sender, EventArgs e) { string path = this.txtPath.Text.Trim(); if (string.IsNullOrEmpty(path)) { MessageBox.Show("請選擇要導入的EXCEL文件。", "信息"); return; } if (!File.Exists(path)) //判斷文件是否存在 { MessageBox.Show("信息", "找不到對應的Excel文件,請重新選擇。"); this.btn_BrowserExcel.Focus(); return; } DataTable excelTbl = this.GetExcelTable(path); //調用函數獲取Excel中的信息 if (excelTbl == null) { return; } DgvImport.DataSource = excelTbl; }
最核心的功能在這裡:
///效果圖:/// 獲取Excel文件中的信息,保存到一個DataTable中 /// /// 文件路徑 ///返回生成的DataTable private DataTable GetExcelTable(string path) { try { //獲取excel數據 DataTable dt1 = new DataTable("excelTable"); string strConn = string.Format(OledbConnString, path); OleDbConnection conn = new OleDbConnection(strConn); conn.Open(); DataTable dt = conn.GetSchema("Tables"); //判斷excel的sheet頁數量,查詢第1頁 if (dt.Rows.Count > 0) { string selSqlStr = string.Format("select * from [{0}]", dt.Rows[0]["TABLE_NAME"]); OleDbDataAdapter oleDa = new OleDbDataAdapter(selSqlStr, conn); oleDa.Fill(dt1); } conn.Close(); return dt1; } catch (Exception ex) { MessageBox.Show("Excel轉換DataTable出錯:" + ex.Message); return null; } }
數據庫查詢數據過程的翻版嗎?
果然知識都是相通的。