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;
浙公网安备 33010602011771号