網上有不少這種方法,本人只是針對本身的系統來實現的sql
//導入excel表 private void ImportTSMenu_Click(object sender, EventArgs e) { OpenFileDialog openFD = new OpenFileDialog(); openFD.Filter = "Excel文件|*.xls"; if (openFD.ShowDialog(this.Owner) == DialogResult.OK) { string strFilename = openFD.FileName; if (!File.Exists(strFilename)) { MessageBox.Show("文件不存在,請從新選擇文件!"); return; } //string strConn = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + strFilename + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'"; string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strFilename + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'"; //關於OleDB鏈接Excel的Extended Properties(擴展屬性)HDR=YES; IMEX=2 //HDR=Yes,這表明第一行是標題,不作爲數據使用 ,若是用HDR=NO,則表示第一行不是標題,作爲數據來使用。系統默認的是YES //參數Excel 8.0 對於Excel 97以上到2003版本都用Excel 8.0,2007或2010的都用Extended Properties=Excel 12.0 //IMEX 有三種模式: //當 IMEX=0 時爲「匯出模式」,這個模式開啓的 Excel 檔案只能用來作「寫入」用途。 //當 IMEX=1 時爲「匯入模式」,這個模式開啓的 Excel 檔案只能用來作「讀取」用途。 //當 IMEX=2 時爲「連結模式」,這個模式開啓的 Excel 檔案可同時支援「讀取」與「寫入」用途。 OleDbDataAdapter oldAda = new OleDbDataAdapter("select * from [Sheet1$]", strConn); DataSet ds = new DataSet(); oldAda.Fill(ds); //C#導入execl 找不到可安裝的 ISAM,若是是Office2003版本 //string strConn = "Provider=Microsoft.Jet.Oledb.4.0; Data Source=" + excelFile + ";Extended Properties=‘Excel 8.0; HDR=YES; IMEX=1’"; //若是是2007以上 //string strCon = "Provider=Microsoft.ACE.OLEDB.12.0;data source=" + filePath + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'"; DataTable dt = ds.Tables[0]; InsertData(dt); //this.FTLucky_Load(sender, e); GetData(); } }
下面有for循環一條條插入到數據庫可能效率不高,應該有批量導入的,好像sql是用SqlBulkCopy,至於access的話,因爲時間緊,且要求不高,就暫時用for代替了數據庫
#region 三、將excel數據插入到數據庫 /// <summary> /// 將DataTable的數據插入到數據庫 /// </summary> /// <param name="dt">excel數據</param> private void InsertData(DataTable dt) { try { oledCon = sqlHelper.OledCon(); oledCon.Open(); string strInsert = ""; for (int i = 0; i < dt.Rows.Count; i++) { strInsert = "insert into Information([UserName],[Phone]) values('" + dt.Rows[i][0] + "','" + dt.Rows[i][1] + "')"; oledCmd = new OleDbCommand(strInsert, oledCon); oledCmd.ExecuteNonQuery(); } MessageBox.Show("導入成功!"); } catch (Exception ex) { MessageBox.Show("導入出錯,緣由:" + ex.Message.ToString()); } finally { oledCon.Dispose(); oledCon.Close(); } } #endregion