基于delphi的excel数据导入导出

       因为淘宝客户的一个小需求,写了一个“基于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。      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值