XLSreadWriteII基本操作(sheet增加、删除、读、写)

一、声明变量:
XLS:TxlsreadWriteII5;

二、使用:
XLS:=TXLSReadWriteII5.Create(nil);
XLS.Filename:=ExtractFilePath(Application.ExeName)+'Report\903月结明细表.xls';//输出格式模板
XLS.Read;
XLS.Filename:=fn;//目标文件
XLS.Write;
三、引入模板,对sheet进行写、增、删

例1:
SaveDialog1.Filter:='*.xls';
SaveDialog1.Execute;
fn:=lowerCase(Trim(SaveDialog1.FileName));
if AnsiEndsStr('.xls',fn)=False then fn:=fn+'.xls';
XLS:=TXLSReadWriteII5.Create(nil);
XLS.Filename:=ExtractFilePath(Application.ExeName)+'Report\903月结明细表.xls';//模板文件
XLS.Read;
XLS.Filename:=fn;//目标文件
XLS.Write;
k:=0;
// XLS.Sheets[0].asstring[5,0]:='押运业务月结汇总表';
Bname:=dm.QcxA.FieldByName('Bname').AsString;
XLS.Sheets[1].asstring[0,1]:=Bname;
XLS.Sheets[1].asstring[3,1]:='月份:'+MON;
XLS.Sheets[1].Name:=copy(Bname,1,6);
i:=3;
j:=1; //shee号
while not dm.QcxA.Eof do
begin
if (i=3) then
begin
//增加一个sheet
XLS.Add;
//将第一个(0)sheet拷贝到第(j)个sheet中
XLS.CopySheet(0,j);

        XLS.Sheets[j].asstring[0,1]:=dm.QcxA.FieldByName('Bname').AsString;
        XLS.Sheets[j].asstring[3,1]:='月份:'+MON;

//给第j个sheet加名字标签
XLS.Sheets[j].Name:=copy(Bname,1,6);

    end;
    XLS.Sheets[j].asstring[0,i]:=intToStr(i-2);
    XLS.Sheets[j].asstring[1,i]:=dm.QcxA.FieldByName('TB_Date').AsString;
    XLS.Sheets[j].asstring[2,i]:=dm.QcxA.FieldByName('TB_Bname').AsString;
    XLS.Sheets[j].AsString[3,i]:=dm.QcxA.FieldByName('TB_Stime').AsString;
    XLS.Sheets[j].AsString[4,i]:=dm.QcxA.FieldByName('TB_ETime').AsString;
    XLS.Sheets[j].AsFloat[5,i]:=dm.QcxA.FieldByName('TB_wxs').AsCurrency;
    XLS.Sheets[j].AsFloat[6,i]:=dm.QcxA.FieldByName('TB_TLen').AsCurrency;
    XLS.Sheets[j].AsFloat[7,i]:=dm.QcxA.FieldByName('TB_Kilm').AsCurrency;
    XLS.Sheets[j].AsFloat[8,i]:=dm.QcxA.FieldByName('TB_Fee').AsCurrency;
    dm.QcxA.Next;
    Inc(i);
    if dm.QcxA.eof then
    begin
          //表格线
          for R := 3 to i-1 do
          begin
                for C := 0 to 8 do XLS.Sheets[j].Range.Items[C,R,C,R].BorderOutlineStyle:=cbsThin;
          end;
          Bname:=dm.QcxA.FieldByName('Bname').AsString;
          XLS.Write;
    end else if copy(Bname,1,6)<>copy(dm.QcxA.FieldByName('Bname').AsString,1,6) then
    begin
          XLS.Sheets[j].Name:=copy(Bname,1,6);

          for R := 3 to i-1 do
          begin
                for C := 0 to 8 do XLS.Sheets[j].Range.Items[C,R,C,R].BorderOutlineStyle:=cbsThin;
          end;

          Bname:=dm.QcxA.FieldByName('Bname').AsString;
          XLS.Write;

          inc(j);
          i:=3;
    end;
end;

//删除第一个sheet:0
XLS.Delete(0,1);
XLS.Write;
//激活第一个工作表:0
// XLS.SelectedTab:=0;
// XLS.Write;
XLS.Free;
Screen.Cursor:=crDefault;
showMEssage('---转换成功!---');
注意:数据写入后,要用XLS.write回写一下

例2:
var
FilePath,ic,fn:string;
// ExlAPP,Sheet,Range:Variant;
Bno,xm4:string;
i,j,z,p,C,R:integer;
// Grid:TstringGrid;
XLS:TXLSReadWriteII5;

begin
dm.QcxA.First;
if dm.QcxA.Eof then exit;
SaveDialog1.Filter:='*.xlsx';
SaveDialog1.Execute;
fn:=lowerCase(Trim(SaveDialog1.FileName));
if AnsiEndsStr('.xlsx',fn)=False then fn:=fn+'.xlsx';
XLS:=TXLSReadWriteII5.Create(nil);
XLS.Filename:=ExtractFilePath(Application.ExeName)+'Report\B300开票信息N.xlsx';
XLS.Read;
// ReadCells;//XLS(XLS,Grid);

XLS.Filename:=fn;//目标文件
XLS.Write;
XLS.Sheets[0].asstring[0,1]:='汇总单位:'+copy(RzTreeView1.Selected.Text,5,20);
XLS.sheets[0].AsString[10,1]:='开票年月:'+dm.QcxA.FieldByName('FKMON').AsString;
z:=0;
p:=0;
i:=4;
Bno:='aaasss';
while not dm.QcxA.Eof do
begin
    if dm.QcxA.FieldByName('FPje').AsCurrency>=0 then
    begin
        XLS.Sheets[0].asstring[0,i]:=dm.QcxA.FieldByName('FCID').AsString;
        XLS.Sheets[0].asstring[1,i]:=dm.QcxA.FieldByName('FBNO').AsString;
        XLS.Sheets[0].asstring[2,i]:=dm.QcxA.FieldByName('FBname').AsString;
        XLS.Sheets[0].asstring[3,i]:=dm.QcxA.FieldByName('Fid').AsString;
        XLS.Sheets[0].asstring[4,i]:=dm.QcxA.FieldByName('Fxm4').AsString;//copy(dm.QcxA.FieldByName('Fxm4').AsString,5,30);
        XLS.Sheets[0].asstring[5,i]:=dm.QcxA.FieldByName('Fnote').AsString;
        XLS.Sheets[0].AsFloat[6,i]:=dm.QcxA.FieldByName('FZJE').AsCurrency;
        XLS.Sheets[0].AsFloat[7,i]:=dm.QcxA.FieldByName('FPje').AsCurrency;
        XLS.Sheets[0].asstring[9,i]:=dm.QcxA.FieldByName('FPno').AsString;
        XLS.Sheets[0].asstring[10,i]:=dm.QcxA.FieldByName('Hdate').AsString;
        XLS.Sheets[0].asstring[11,i]:=dm.QcxA.FieldByName('Pindex').AsString;
        Inc(i);
    end;
    dm.QcxA.Next;
end;
IC:=trim(IntToStr(i));
XLS.Sheets[0].AsString[2,i]:='  合计';
XLS.Sheets[0].AsFormula[6,i]:='SUM(G5:G'+IC+')';
XLS.Sheets[0].AsFormula[7,i]:='SUM(H5:H'+IC+')';

// XLS.Sheets[0].AsFormula[8,i]:='SUM(M5:M'+IC+')+SUM(G5:G'+IC+')';
// XLS.Sheets[0].AsFormula[12,i]:='SUM(M5:M'+IC+')';

XLS.Calculate;
XLS.Write;
for R := 4 to i do
begin
    for C := 0 to 10 do XLS.Sheets[0].Range.Items[C,R,C,R].BorderOutlineStyle:=cbsThin;

// XLS.Sheets[0].AsFormula[16,R]:='G'+intToStr(R+1)+'+M'+IntToStr(R+1);

end;
XLS.Write;
XLS.Free;

四、读sheet
var
FilePath,ic,fn:string;
ExlAPP,Sheet,Range:Variant;
BNO,MON,ERBno,Fid1,Fid2,Ix1,Ix2,Je1,Je2,Hdate:string;
Ret,i,kk:integer;
C,R: integer;
XLS:TXLSReadWriteII5;

begin
OpenDialog1.Filter:='excel文件(.xlsx)|.xlsx';
OpenDialog1.Execute();
if not fileexists(OpenDialog1.FileName) then
begin
showmessage('所选文件【'+Opendialog1.FileName+'】不存在!');
exit;
end;
FilePath:=Opendialog1.FileName;
XLS:=TXLSReadWriteII5.Create(nil);
XLS.Filename:=FilePath;
XLS.Read;

{ XLS[0].CalcDimensions;
for R := XLS[0].FirstRow to XLS[0].LastRow do
begin
for C := XLS[0].FirstCol to XLS[0].LastCol do
begin
Grid.Cells[C,R]:=XLS[0].AsString[C,R];
end;
end;
}
MON:=XLS[0].AsString[12,1];//:='业务年月:'+dm.QcxA.FieldByName('P_MON').AsString;

MON:=copy(MON,Pos(':',MON)+1,7);
if MON<>RzCOmboBox1.Text then
begin
    showmessage('---导入表数据月份与当前月份不一致,不能导入!---');
    KK:=1;
end else Begin
      i:=4;
      Kk:=0;
      ERBno:='';
      dm.Qcom.Close;
      dm.Qcom.SQL.Clear;
      dm.Qcom.SQL.Add('exec DSP_B300FPState :MON,:Fcode');
      dm.Qcom.Parameters.Items[0].Value:=MON;
      dm.Qcom.Parameters.Items[1].Value:=dm.Auser.FCode;
      dm.Qcom.ExecSQL;
      dm.Qcom.Close;
      dm.Qcom.SQL.Clear;

      while trim(XLS[0].asstring[0,i])<>'' do
      begin
          BNO:=XLS[0].AsString[1,i];
          RzLabel1.Caption:='   正在导入:'+BNO;
          dm.CallSP.Close;
          dm.CallSP.ProcedureName:='DSP_B300SaveFPNO';
          dm.CallSP.Parameters.Refresh;
          dm.CallSP.Parameters.ParamByName('@CID').Value:=XLS[0].asstring[0,i];
          dm.CallSP.Parameters.ParamByName('@MON').Value:=MON;
          dm.CallSP.Parameters.ParamByName('@BNO').Value:=BNO;
          Fid1:=XLS[0].asstring[3,i];
          dm.CallSP.Parameters.ParamByName('@Fid1').Value:=isnumber(Fid1);//:=dm.QcxA.FieldByName('P_JE1').AsString;
          dm.CallSP.Parameters.ParamByName('@FxmA').Value:=XLS[0].asstring[4,i];

          Je1:=XLS[0].asString[6,i];
          Je1:=isnumber(Je1);

          dm.CallSP.Parameters.ParamByName('@Je1').Value:=Je1;

          dm.CallSP.Parameters.ParamByName('@Fp1').Value:=XLS[0].asstring[7,i];//:=dm.QcxA.FieldByName('P_ZP1').AsString;
          dm.CallSP.Parameters.ParamByName('@IX1').Value:=isnumber(XLS[0].asstring[8,i]);//:=dm.QcxA.FieldByName('P_ZP1').AsString;

          Fid2:=XLS[0].asstring[9,i];
          dm.CallSP.Parameters.ParamByName('@Fid2').Value:=isnumber(Fid2);//:=dm.QcxA.FieldByName('P_JE2').AsString;
          dm.CallSP.Parameters.ParamByName('@FxmB').Value:=XLS[0].asstring[10,i];

          Je2:=XLS[0].asString[12,i];
          Je2:=isnumber(Je2);

          dm.CallSP.Parameters.ParamByName('@Je2').Value:=Je2;

          dm.CallSP.Parameters.ParamByName('@FP2').Value:=XLS[0].asstring[13,i];//:=dm.QcxA.FieldByName('P_ZP2').AsString;
          dm.CallSP.Parameters.ParamByName('@IX2').Value:=isnumber(XLS[0].asstring[14,i]);
          Hdate:=XLS[0].asstring[15,i];
          if trim(HDate)='' then Hdate:=formatDatetime('YYYY-MM-DD',now);
          dm.CallSP.Parameters.ParamByName('@Hdate').Value:=Hdate;
          dm.CallSP.Parameters.ParamByName('@Fcode').Value:=dm.Auser.FCode;
          dm.CallSP.ExecProc;
          ret:=dm.CallSP.Parameters.Items[0].Value;
          dm.CallSP.Close;
          if ret<>0 then
          begin
              showmessage('---数据导入出错!('+BNO+')['+IntTostr(ret)+']---');
              ERBno:=ERBno+BNO+' ';
              KK:=1;
          end;
          Inc(i);
      end;
End;
Screen.Cursor:=crDefault;
RzLabel1.Caption:='           转换完毕!';
if KK=0 then
BEGIN
     showMEssage('---导入成功!---');
     dm.QcxA.Close;
     dm.QcxA.Open;
END else Begin
    RzLabel1.Caption:='   存在问题的结算行:'+ErBNO;
    showmessage('---导入有错,请检查数据!---');
End;

end;

posted @ 2025-11-17 09:40  阳光山色_码农  阅读(3)  评论(0)    收藏  举报