|
发表于 2009-3-30 15:28:51
|
显示全部楼层
很多关于delphi 的书籍上都有怎么把数据库中的数据导出到Excel 里去,可是偶却从没见过它们描述 怎么把 Excel 中的数据反导回数据库中。。。
在网上搜索后也没找到什么解决的方法,于是就自己研究了一下。。
数据库用的是 Paradox 7,搞Delphi 的都知道的数据库。
使用的控件有:
BDE中的TTable,Data Access中的TDataSource,Dialogs中的TOpenDialog和TSaveDialog,Servers中的TExcelApplication、TExcelWorksheet以及TExcelWorkbook
这里只提供静态载入的方法,动态的可根据Excel 的字段名来动态创建数据库的字段来实现。
把Excel中的数据导入数据库,代码分析如下:
procedure TForm1.Button1Click(Sender: TObject);
Var
i,Excel_ROW:integer;
begin
if OpenDialog1.Execute then
begin
if Application.MessageBox('数据量大时导入时间可能较长,请耐心等待!','提示',MB_OKCANCEL+MB_ICONWarning)=IDOK then
try
//清空数据表
Table1.Close;
Table1.TableType:= ttParadox;
Table1.EmptyTable;
Table1.Open;
//连接 Excel
ExcelApplication1.Connect;
//将 Excel 设置为不可视
ExcelApplication1.Visible[0]:=false;
//打开要读取的 Excel 文件
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);
//获取工作表中已用区域数据的行数
Excel_ROW:=ExcelWorkSheet1.UsedRange[1].Rows.Count;
//将 Excel 中的数据写入数据表
for i:=2 to Excel_ROW do
begin
Table1.Append;
Table1.Edit;
Table1.FieldbyName('序号').AsString:=ExcelWorksheet1.Cells.Item[i,1];
Table1.FieldbyName('工号').AsString:=ExcelWorksheet1.Cells.Item[i,2];
Table1.FieldbyName('姓名').AsString:=ExcelWorksheet1.Cells.Item[i,3];
Table1.FieldbyName('部门').AsString:=ExcelWorksheet1.Cells.Item[i,4];
Table1.FieldbyName('日期').AsString:=ExcelWorksheet1.Cells.Item[i,7];
Table1.FieldbyName('星期').AsString:=ExcelWorksheet1.Cells.Item[i,8];
Table1.FieldbyName('上班1').AsString:=ExcelWorksheet1.Cells.Item[i,9];
Table1.FieldbyName('下班1').AsString:=ExcelWorksheet1.Cells.Item[i,10];
Table1.FieldbyName('上班2').AsString:=ExcelWorksheet1.Cells.Item[i,11];
Table1.FieldbyName('下班2').AsString:=ExcelWorksheet1.Cells.Item[i,12];
Table1.FieldbyName('上班3').AsString:=ExcelWorksheet1.Cells.Item[i,13];
Table1.FieldbyName('下班3').AsString:=ExcelWorksheet1.Cells.Item[i,14];
Table1.FieldbyName('请假总计').AsString:=ExcelWorksheet1.Cells.Item[i,17];
Table1.Post;
end;
Application.MessageBox('数据载入成功!','提示',MB_OK);
except
//清空数据表
Table1.Close;
Table1.TableType:= ttParadox;
Table1.EmptyTable;
Table1.Open;
Application.MessageBox('数据读取失败,请查看Excel文件格式是否正确!','提示',MB_OK+MB_ICONWarning);
end;
//关闭 Excel
ExcelApplication1.Quit;
//解除与 Excel 的连接
ExcelApplication1.Disconnect;
end;
end; |
|