因为淘宝客户的一个小需求,写了一个“基于delphi 7的excel数据导入导出”小工具。为了抛砖引玉,将这个小工具分享出来。希望对初学者和用得到的朋友有点点小小的帮助。oracle数据库连接,注意中文编码问题。导入excel,可以将values的插入值用“()”、“,”拼接实现批量导入(实例:insert into table(a,b,c) values('aa','bb','cc'),('a1','a2','a3'),('b1','b2','b3')...('c1','c2','c3');
工具技术应用:Delphi 7 + mysql (或者mariaDB 10.3);
数据操作:导入excel、导出为text文件(导出excel雷同导入,可以自己加工一下10分钟搞定);
实现控件:ado:adoConnection连接、adoquery(select查询)、adocommand(SQL操作语句)、其他(按钮、edit、label);
源码:
一、MariaDB数据表SQL脚本:
CREATE TABLE `test` (
`id` INT(10) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
`code` VARCHAR(16) NOT NULL,
`name` VARCHAR(24) NOT NULL,
`state` INT(1) NOT NULL DEFAULT '1',
`systime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=56
;
二、导入excel代码:
2.1 打开按钮:
if dlgOpen1.Execute then
begin
edt2.Text := dlgOpen1.FileName;
end;
2.2 导入excel按钮:
procedure TToolsFrm.pnl3Click(Sender: TObject);
// uses Comobj; //
// Excel 导入到数据库 //
// bentti 2020.01.01 23:46:11 //
var
ExcelApp:variant;
InserSQL:string;
ResultList:TStringList;
ii,j:integer;
vvOpenSQL,vvSaveSQL:string;
myfloat:double;
begin
ExcelApp:=CreateOleObject('Excel.Application');
ExcelApp.visible:=False;
ExcelApp.workbooks.open(Edt2.Text);
//自适应宽度
ExcelApp.worksheets[1].Cells.EntireColumn.AutoFit; //整个表所有列
j:=2; //假定标题在第一行
with cmdTemp do
begin //修改数据表名、字段名
InserSQL:='insert into test(code,name) values';
ii :=ExcelApp.WorkSheets[1].UsedRange.Rows.Count-1;
vvSaveSQL :='';
while ExcelApp.worksheets[1].cells[j,1].text<>'' do
begin
CommandText := InserSQL + '('''+ExcelApp.worksheets[1].cells[j,1].text +''','''+ExcelApp.worksheets[1].cells[j,2].text +''');' ;
try
cmdTemp.Execute;
Application.ProcessMessages;
except
Application.MessageBox('导入excel球员数据发生错误,请与管理员联系!','提示信息',16)
end;
j:=j+1;
end;
end;
ExcelApp.Activeworkbook.close(false);
ExcelApp.quit;
ExcelApp:=unassigned;
with qryData do
begin
close;
sql.Clear;
sql.Text :='select * from test where state=1 order by systime desc';
Active :=True;
end;
end;
三、导出text文件:
3.1、打开数据:
with qryText do
begin
close;
sql.Clear;
sql.Text :='select * from test where state=1 order by systime desc';
try
Active :=True;
except
Application.MessageBox('打开数据发生错误,请与管理员联系!','提示信息',16)
end;
end;
3.2、设定保存文件路径:
if dlgSave1.Execute then
begin
edt3.Text :=dlgSave1.FileName;
end;
3.3、导出text编码:
procedure TToolsFrm.pnl5Click(Sender: TObject);
var
vOutText:textfile;
vOutData:string;
begin
assignfile(vOutText,edt3.Text);
rewrite(vOutText);
qryText.First ;
while not qryText.Eof do
begin
vOutData:=qryText.Fields[0].AsString +' '+ qryText.Fields[1].AsString ;
writeln(vOutText,vOutData);
qryText.Next ;
end;
closefile(vOutText);
Application.MessageBox('text文件成功导出。','提示信息',48)
end;
源码奉上,有问题留言或者微信:bentti。