在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
第三方组件:XLSReadWriteII.v.5.20.67_XE3 实例源码如下: unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, XLSSheetData5, XLSReadWriteII5, Vcl.StdCtrls, Vcl.ComCtrls, RzLabel; type TForm1 = class(TForm) XLSReadWriteII51: TXLSReadWriteII5; Label1: TLabel; Edit1: TEdit; Button1: TButton; pb: TProgressBar; Label2: TLabel; Edit2: TEdit; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses strUtils, XLSDbRead5, Xc12Manager5, Xc12Utils5, XLSUtils5, Xc12DataStyleSheet5, XLSFormattedObj5, Xc12DataWorksheet5; {$R *.dfm} type TDelFlags = set of (dfDelBefore, dfDelAfter); function Delstr(var ms: String; endstr: String; Flags: TDelFlags; bself: Boolean = True): String; var l: Integer; begin l := length(endstr); if dfDelBefore in Flags then begin if bself then begin Result := copy(ms, 1, pos(endstr, ms) + l - 1); Delete(ms, 1, pos(endstr, ms) + l - 1); end else begin Result := copy(ms, 1, pos(endstr, ms) - 1); Delete(ms, 1, pos(endstr, ms) - 1); end; end else begin if bself then begin Result := copy(ms, pos(endstr, ms), length(ms)); Delete(ms, pos(endstr, ms), length(ms)); end else begin Result := copy(ms, pos(endstr, ms) + l, length(ms)); Delete(ms, pos(endstr, ms) + l, length(ms)); end; end; end; function Matchstrings(Source, pattern: String): Boolean; var pSource: array[0..255] of Char; pPattern: array[0..255] of Char; function MatchPattern(element, pattern: PChar): Boolean; function IsPatternWild(pattern: PChar): Boolean; begin Result := StrScan(pattern, '*') <> nil; if not Result then Result := StrScan(pattern, '?') <> nil; end; begin if 0 = StrComp(pattern, '*') then Result := True else if (element^ = Chr(0)) and (pattern^ <> Chr(0)) then Result := False else if element^ = Chr(0) then Result := True else begin case pattern^ of '*': if MatchPattern(element, @pattern[1]) then Result := True else Result := MatchPattern(@element[1], pattern); '?': Result := MatchPattern(@element[1], @pattern[1]); else if element^ = pattern^ then Result := MatchPattern(@element[1], @pattern[1]) else Result := False; end; end; end; begin StrPCopy(pSource, Source); StrPCopy(pPattern, pattern); Result := MatchPattern(pSource, pPattern); end; procedure FindFiles(ASourceDir, SearchFileType: String; var List: TStrings); var FileRec: TSearchrec; Sour: String; begin Sour := ASourceDir; if Sour[length(Sour)] <> '\' then Sour := Sour + '\'; if FindFirst(Sour + '*.*', faAnyfile, FileRec) = 0 then {循环} repeat if ((FileRec.Attr and faDirectory) <> 0) then begin if (FileRec.Name <> '.') and (FileRec.Name <> '..') then //找到目录 begin FindFiles(Sour + FileRec.Name, SearchFileType, List); end; end else //找到文件 begin {拷贝所有类型的文件} if Matchstrings(LowerCase(FileRec.Name), SearchFileType) then begin List.Add(Sour + FileRec.Name); end; {拷贝所有类型的文件} end; until FindNext(FileRec) <> 0; FindClose(FileRec); end; {从磁盘中搜索指定类型的所有文件} procedure SetCellFontStyle(ACell: TXLSCell; AFontStyle: TFontStyles); var CellFontStyle : TXc12FontStyles; begin CellFontStyle:=[]; if fsBold in AFontStyle then CellFontStyle:=CellFontStyle+[xfsBold]; if fsItalic in AFontStyle then CellFontStyle:=CellFontStyle+[xfsItalic]; if fsStrikeOut in AFontStyle then CellFontStyle:=CellFontStyle+[xfsStrikeOut]; ACell.FontStyle := CellFontStyle; if fsUnderline in AFontStyle then ACell.FontUnderline:=xulSingle; end; procedure TForm1.Button1Click(Sender: TObject); var txtList: TStrings; i: Integer; XLS3: TXLSReadWriteII5; sFileName: string; sQuezi: string; sTitle: string; sBanci: string; sRiqi: string; firstRow: Integer; row: Integer; readTxt: TStringList; xlsFileName: string; zhenwen: string; j: Integer; aline: string; pNnum,kNum: Integer; eNum: Integer; AFullXLSXFilePath: string; AURLOrPath: string; AText: string; ATooltip: string; sNewCellFormat : AxUCString; begin button1.Enabled:=false; button1.Caption:='正在生成'; xlsFileName:=Edit2.Text; txtList:=TStringlist.Create ; findfiles(edit1.Text,'*.txt',txtList); if txtList.Count=0 then Exit; pb.Position:=0; pb.Max:=txtlist.Count; XLS3 := TXLSReadWriteII5.Create(nil); AFullXLSXFilePath:=xlsFileName; if UpperCase(ExtractFileExt(AFullXLSXFilePath))='.XLSX' then XLS3.Version:=xvExcel2007 else XLS3.Version:=xvExcel97; // XLS3.DirectWrite:=false; XLS3[0].AsString[0, 0] := '日期'; XLS3[0].AsString[1, 0] := '版次'; XLS3[0].AsString[2, 0] := '标题'; XLS3[0].AsString[3, 0] := '缺字'; XLS3[0].AsString[4, 0] := '文件名'; XLS3[0].AsString[5, 0] := '生成时间'; XLS3[0].Cell[0,0].FontStyle:=[xfsBold]; XLS3[0].Cell[1,0].FontStyle:=[xfsBold]; XLS3[0].Cell[2,0].FontStyle:=[xfsBold]; XLS3[0].Cell[3,0].FontStyle:=[xfsBold]; XLS3[0].Cell[4,0].FontStyle:=[xfsBold]; XLS3[0].Cell[5,0].FontStyle:=[xfsBold]; XLS3[0].Columns[0].PixelWidth:=100; XLS3[0].Columns[1].PixelWidth:=80; XLS3[0].Columns[2].PixelWidth:=250; XLS3[0].Columns[3].PixelWidth:=300; XLS3[0].Columns[4].PixelWidth:=300; XLS3[0].Columns[5].PixelWidth:=130; XLS3[0].Columns[0].HorizAlignment:=chaLeft; //对齐方式 // sRiqi:=''; sBanci:='';sTitle:='';sQuezi:='';sFileName:=''; firstRow:=0;row:=0; kNum:=0; readTxt:=TStringList.Create; try // row:=1; for i := 0 to txtList.Count-1 do begin pb.Position:=i+1; application.ProcessMessages ; readTxt.LoadFromFile(txtList[i]); sRiqi:=readTxt.Values['<日期>']; sBanci:=readTxt.Values['<版次>']; sTitle:=readTxt.Values['<正题>']; pNnum:=0; sQuezi:=''; eNum:=0; for j := 0 to readTxt.Count-1 do begin application.ProcessMessages; aline:=readTxt.Strings[j]; kNum:=pos('□',aline); if kNum>0 then begin inc(pNnum); // if length(aline)>=16 then begin if sQuezi='' then begin sQuezi:=aline; sQuezi:='('+inttostr(pNnum)+')'+copy(sQuezi,kNum-6,20); end else begin eNum:=posEx('□',aline,kNum); if eNum-eNum=1 then begin kNum:=eNum; dec(pNnum); end else begin kNum:=eNum; sQuezi:=sQuezi+slinebreak+'('+inttostr(pNnum)+')'+copy(aline,kNum-6,20); end; end; end else begin if sQuezi='' then sQuezi:='('+inttostr(pNnum)+')'+copy(aline,kNum-6,20) else sQuezi:=sQuezi+slinebreak+'('+inttostr(pNnum)+')'+copy(aline,kNum-6,20); end; end; end;//for j end readTxt.Clear ; if ''<>trim(sQuezi) then inc(row); kNum:=0; eNum:=0; pNnum:=0; //showmessage(sQuezi); // if row=0 then if ''<>trim(sQuezi) then begin XLS3[0].AsString[0, row] := sRiqi; XLS3[0].AsString[1, row] :=sBanci; XLS3[0].AsString[2, row] := sTitle; XLS3[0].Cell[2,row].ShrinkToFit:=false; XLS3[0].Cell[2,row].WrapText:=true; XLS3[0].AsString[3, row] := sQuezi; XLS3[0].Cell[3,row].FontSize:=12; XLS3[0].Cell[3,row].ShrinkToFit:=false; XLS3[0].Cell[3,row].WrapText:=true; // XLS3[0].Cell[4,row].FontStyle:=Xc12DataStyleSheet5.TXc12FontStyles. XLS3[0].AsString[4, row] :=extractfilename(txtList[i]); AURLOrPath:=txtList[i]; AText:=XLS3[0].AsString[4, row]; ATooltip:=AURLOrPath; XLS3[0].MakeHyperlink(4,row,AURLOrPath,AText,ATooltip); //超链接 //日期和时间格式 sNewCellFormat:=''; // sNewCellFormat := ExcelStandardNumFormats[XLS_NUMFMT_STD_TIME]; //XLS_NUMFMT_STD_DATE , XLS_NUMFMT_STD_TIME // sNewCellFormat := 'dd/mm/yyyy hh:mm'; sNewCellFormat := 'dd/mm/yyyy hh:mm:SS'; //sNewCellFormat := 'hh:mm' ; // sNewCellFormat := 'hh:mm:SS'; XLS3[0].AsDateTime[5,row]:=now; if sNewCellFormat<>'' then XLS3[0].Cell[5,row].NumberFormat:=sNewCellFormat; end; sQuezi:=''; end;//for i end XLS3.SaveToFile(xlsFileName); if pb.Max=pb.Position then begin showmessage('生成完毕!'); end; finally freeandnil(txtlist); freeandnil(readtxt); freeandnil(XLS3); button1.Enabled:=true; button1.Caption:='生成清单'; end; end; procedure TForm1.FormCreate(Sender: TObject); begin edit1.Clear ; edit2.Clear ; edit1.Text:='C:\Users\Administrator\Desktop\test'; edit2.Text:='C:\Users\Administrator\Desktop\test\xx.xls'; end; end.
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论