最近在做一个项目,客户要求必须实现把他们的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.心里体会: 菜鸟以最笨的办法,还是解决了问题,谁让我笨呢,笨人只有用最笨的办法了,(*^__^*) 嘻嘻……,但无论如何还是实现了这个东东,心里也是挺高兴的.