最近在做一個項目,客戶要求必須實作把他們的Excel資料導入到資料庫中。.對于一個菜鳥來說以前也沒做過這一方面,做這個畢竟很頭痛。無奈隻有在網上找資料了,搜了許多,菜鳥也試了幾個,還是不太理想,最後終于找到一個,加上自己的實踐和修改,最終實作了這個功能。現把它介紹如下,希望能給正在尋找此方面的朋友能有一定的幫助! 1.控件:openDialog(openDialog1),TExcelApplication(ExcelApplication1),TExcelWorkbook(ExcelWorkbook1),TExcelWorksheet(ExcelWorksheet1)和TADOTable(tblTa) 前提說明: 在sql server中建一個表,以對應excel中的資料,但是經過菜鳥實踐建表時也應該注意兩點,一是表中的字段必須有個id是自動增長的,否則等資料多時或資料中有空資料時容易出現錯誤:” 鍵列資訊不足或不正确。更新影響到多行”
2.是表中的字段對應的類型也注意。字段當有小數點時,字段的類型應該為float,其他的字段類型最好同意用string.
3 代碼詳解: procedure TForm1.Button1Click(Sender: TObject); var i,j:integer; ExcelApplication1:TExcelApplication;//控件中有說明 ExcelWorksheet1:TExcelWorksheet;// 控件中有說明 ExcelWorkbook1:TExcelWorkbook;// 控件中有說明 filename: string; begin if opendialog1.Execute then begin opendialog1.DefaultExt:='xls'; try ExcelApplication1:=TExcelApplication.Create(Application); ExcelWorksheet1:=TExcelWorksheet.Create(Application); ExcelWorkbook1:=TExcelWorkbook.Create(Application); ExcelApplication1.Connect; except Application.Messagebox('Excel沒有安裝!', 'Hello', MB_ICONERROR + mb_Ok); Abort; end; Try ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Open(opendialog1.FileName,Emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,0)); ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]); ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _worksheet); Except Exit; end; i:=2;//開始導入行數 //j :=100;//預設導入總行數 j := ExcelApplication1.Rows.Count; try tblTA.Open; //要導入的表 while i<=j do begin if trim(ExcelWorksheet1.cells.item[i,1])<>'' then //這個是用于判斷某行是否為空 begin tblTA.AppendRecord([ ExcelWorksheet1.Cells.Item[i,1],/.//代表excel中第一行的資料 ExcelWorksheet1.Cells.Item[i,2],/.//代表excel中第二行的資料 ExcelWorksheet1.Cells.Item[i,3], // 代表excel中第三行的資料 ExcelWorksheet1.Cells.Item[i,4], //代表excel中第四行的資料 . //ExcelWorksheet1.Cells.Item[i,5],.//……… //ExcelWorksheet1.Cells.Item[i,6],//………… //ExcelWorksheet1.Cells.Item[i,7],.//…………. //ExcelWorksheet1.Cells.Item[i,8],//…………. //ExcelWorksheet1.Cells.Item[i,9],//………….. //ExcelWorksheet1.Cells.Item[i,10],// 代表excel中第十行的資料 ExcelWorksheet1.Cells.Item[i,11]//第i行第3列.// 代表excel中第十一行的資料 ]); end else Break; Inc(i); end; finally tblTA.close; tblTA.Open; showMessage('資料導入完畢!'); end; try ExcelApplication1.Disconnect; ExcelApplication1.Quit; ExcelApplication1.Free; ExcelWorksheet1.Free; ExcelWorkbook1.Free; except showMessage('關閉出錯!'); end; end; end; 4.心裡體會: 菜鳥以最笨的辦法,還是解決了問題,誰讓我笨呢,笨人隻有用最笨的辦法了,(*^__^*) 嘻嘻……,但無論如何還是實作了這個東東,心裡也是挺高興的.