delphi读取Excel导入数据库

procedure TFmAutobs.toimportexceldata;
const
BeginRow=2; // hang
BeginClo=1; // lie
var
i,recordnum:integer;
iRow,iCol:Integer;
MsExcel,MsExcelWorkBook,Sheet:Variant;
vNum:Integer;
ExcelRowCount,ExcelColCount:Integer;
b,c,d,e,f,g,h:string;
d1:array [0…10] of string;
// vlist:TStrings;
reg: TPerlRegEx;
strs:TStringList;
vBizName,vDesignerMoney:String;
S,SQLtemp:String;
t1,t2:Double;
procedure readdata;
var
i:Integer;
begin
b := Trim(MsExcel.worksheets[1].cells[iRow,ICol].value); // 订单号
c := Trim(MsExcel.worksheets[1].cells[iRow,ICol+1].value);// 买家实际支付金额
//d := Trim(MsExcel.worksheets[1].cells[ICol,iRow+2].value);//copy(Trim(MsExcel.worksheets[1].cells[ICol,iRow+2].value),2,length(Trim(MsExcel.worksheets[1].cells[ICol,iRow+2].value)));// 订单备注
// d := replacestr(Trim(MsExcel.worksheets[1].cells[ICol,iRow+2].value),‘’‘’,‘’);
d:=StringReplace(Trim(MsExcel.worksheets[1].cells[iRow,ICol+2].value),‘’‘’,‘’,[rfReplaceAll]);
strs.Delimiter := ‘#’;
strs.DelimitedText := d;
for i := 0 to Strs.Count-1 do
begin
if i = 0 then
vBizName :=Strs[i]
else vDesignerMoney := Strs[i];
end;

			reg.Subject := vDesignerMoney;
				reg.RegEx   := '[^\\u4e00-\\u9fa5a]{0,}[0-9]+';//======读取设计师和金额,正则表达式
			 	vNum :=0 ;
		 		while reg.MatchAgain do  //MatchAgain 是下一个
		 		begin
		 		  //d1[vNum] := reg.MatchedExpression;
        d1[vNum]:=reg.MatchedText;
		 		  Inc(vNum);
		 		end;

       e := Trim(MsExcel.worksheets[1].cells[iRow,ICol+3].value);//   店铺名称
       f := Trim(MsExcel.worksheets[1].cells[iRow,ICol+4].value);//   退款金额
       g := Trim(MsExcel.worksheets[1].cells[iRow,ICol+5].value);//   确认收货时间
       h := Trim(MsExcel.worksheets[1].cells[iRow,ICol+6].value);//   打款商家金额
   //    j :=  vUserID;//Trim(MsExcel.worksheets[1].cells[ICol,iRow+7].value);//   用户id
  //     k :=  vUserName;//Trim(MsExcel.worksheets[1].cells[ICol,iRow+8].value);//   用户名
     with autodm do
     begin
       qinserttemp.Close;

       qinserttemp.SQL.Clear;

       SQLtemp:='INSERT INTO [dbo].[tempExceltest] ([b],[c],[d0],[d1],[d2],[e],[f],[g],[h])  VALUES  (:b,:c,:d0,:d1,:d2,:e,:f,:g,:h)';

       qinserttemp.SQL.Add(SQLtemp);

       qinserttemp.Parameters[0].Value:=b;
       qinserttemp.Parameters[1].Value:=c;
       qinserttemp.Parameters[2].Value:=d1[0];
       qinserttemp.Parameters[3].Value:=d1[1];
       qinserttemp.Parameters[4].Value:=d1[2];
       qinserttemp.Parameters[5].Value:=e;
       qinserttemp.Parameters[6].Value:=f;
       qinserttemp.Parameters[7].Value:=g;
       qinserttemp.Parameters[8].Value:=h;

       qinserttemp.ExecSQL;
     end;

       S:=b+','+c+','+d1[0]+','+d1[1]+','+d1[2]+','+e+','+f+','+g+','+h;
    //   S:=b+','+c+','+d+','+e+','+f+','+g+','+h;
    //   vlist.Add(S);
       inc(recordnum);
       listbox1.Items.Add(S) ;
       if (recordnum mod 5000)=0 then listbox1.Items.Clear;
       FmAutobs.caption:=inttostr(recordnum);

end;
begin
if OpenDialog1.Execute then
begin

 // vlist:=TStringList.Create;
  strs:=TStringList.Create;
  reg := TPerlRegEx.Create();
  listbox1.Items.clear;
  autodm.ADOTable1.Close;
  recordnum:=0;
  createtempExceltestTable;
  MsExcel:=CreateOleObject('Excel.application');
  try
  MsExcel.Visible := False;
  MsExcelWorkBook := MsExcel.WorkBooks.Open(Opendialog1.FileName);
  Sheet:=MsExcel.ActiveSheet;
  iRow := BeginRow;
  iCol := BeginClo;
  MsExcel.worksheets[1].Cells.EntireColumn.AutoFit;
  ExcelRowCount := MsExcel.WorkSheets[1].UsedRange.Rows.Count;

// ExcelColCount := MsExcel.WorkSheets[1].UsedRange.Columns.Count;
//MsExcel.WorkSheets[‘sheet1’].
t1:=GetTickCount;
while iRow<=ExcelRowCount do
begin
{opendata(dtTemp,‘biz_order_init’,‘*’,’ where code =‘’‘+Trim(MsExcel.worksheets[1].cells[ICol,iRow].value)+’‘’‘);// and substr(systime,1,10)=’‘’+FormatDatetime(‘yyyy-mm-dd’,now)+‘’‘’);
if dtTemp.RecordCount =0 then
begin }
if (trim(MsExcel.WorkSheets[1].cells[iRow,iCol].value)<> ‘’) then readdata;
iRow:=iRow+1;
end; //while

  t2:=GetTickCount;
  autodm.ADOTable1.TableName:='tempExceltest';
  autodm.ADOTable1.Open;
  FmAutobs.caption:='需要导入数:'+inttostr(ExcelrowCount)+':'+Floattostr((t2-t1)/1000)+'秒'+':已导入记录数:'+inttostr(autodm.ADOTable1.RecordCount);
  showmessage(FmAutobs.Caption);
  showmessage('首行+空行数:'+inttostr(Excelrowcount-recordnum));



 finally
//  vlist.Free;
  strs.Free;
 // reg.Free;
  FreeAndNil(reg);
  MsExcel.Activeworkbook.close(false);
  MsExcel.quit;
  MsExcel:=unassigned;
 end;
end;

end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值