第三方组件:XLSReadWriteII.v.5.20.67_XE3

实例源码如下:

  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7. Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  8. XLSSheetData5, XLSReadWriteII5,
  9. Vcl.StdCtrls, Vcl.ComCtrls, RzLabel;
  10.  
  11. type
  12. TForm1 = class(TForm)
  13. XLSReadWriteII51: TXLSReadWriteII5;
  14. Label1: TLabel;
  15. Edit1: TEdit;
  16. Button1: TButton;
  17. pb: TProgressBar;
  18. Label2: TLabel;
  19. Edit2: TEdit;
  20. procedure Button1Click(Sender: TObject);
  21. procedure FormCreate(Sender: TObject);
  22. private
  23. { Private declarations }
  24. public
  25. { Public declarations }
  26. end;
  27.  
  28. var
  29. Form1: TForm1;
  30.  
  31. implementation
  32. uses strUtils,
  33. XLSDbRead5, Xc12Manager5, Xc12Utils5, XLSUtils5,
  34. Xc12DataStyleSheet5, XLSFormattedObj5, Xc12DataWorksheet5;
  35. {$R *.dfm}
  36.  
  37. type
  38. TDelFlags = set of (dfDelBefore, dfDelAfter);
  39.  
  40. function Delstr(var ms: String; endstr: String; Flags: TDelFlags;
  41. bself: Boolean = True): String;
  42. var
  43. l: Integer;
  44. begin
  45. l := length(endstr);
  46. if dfDelBefore in Flags then
  47. begin
  48. if bself then
  49. begin
  50. Result := copy(ms, 1, pos(endstr, ms) + l - 1);
  51. Delete(ms, 1, pos(endstr, ms) + l - 1);
  52. end
  53. else
  54. begin
  55. Result := copy(ms, 1, pos(endstr, ms) - 1);
  56. Delete(ms, 1, pos(endstr, ms) - 1);
  57. end;
  58. end
  59. else
  60. begin
  61. if bself then
  62. begin
  63. Result := copy(ms, pos(endstr, ms), length(ms));
  64. Delete(ms, pos(endstr, ms), length(ms));
  65. end
  66. else
  67. begin
  68. Result := copy(ms, pos(endstr, ms) + l, length(ms));
  69. Delete(ms, pos(endstr, ms) + l, length(ms));
  70. end;
  71. end;
  72. end;
  73.  
  74. function Matchstrings(Source, pattern: String): Boolean;
  75. var
  76. pSource: array[0..255] of Char;
  77. pPattern: array[0..255] of Char;
  78. function MatchPattern(element, pattern: PChar): Boolean;
  79. function IsPatternWild(pattern: PChar): Boolean;
  80. begin
  81. Result := StrScan(pattern, '*') <> nil;
  82. if not Result then
  83. Result := StrScan(pattern, '?') <> nil;
  84. end;
  85. begin
  86. if 0 = StrComp(pattern, '*') then
  87. Result := True
  88. else if (element^ = Chr(0)) and (pattern^ <> Chr(0)) then
  89. Result := False
  90. else if element^ = Chr(0) then
  91. Result := True
  92. else
  93. begin
  94. case pattern^ of
  95. '*':
  96. if MatchPattern(element, @pattern[1]) then
  97. Result := True
  98. else
  99. Result := MatchPattern(@element[1], pattern);
  100. '?':
  101. Result := MatchPattern(@element[1], @pattern[1]);
  102. else
  103. if element^ = pattern^ then
  104. Result := MatchPattern(@element[1], @pattern[1])
  105. else
  106. Result := False;
  107. end;
  108. end;
  109. end;
  110. begin
  111. StrPCopy(pSource, Source);
  112. StrPCopy(pPattern, pattern);
  113. Result := MatchPattern(pSource, pPattern);
  114. end;
  115.  
  116. procedure FindFiles(ASourceDir, SearchFileType: String; var List: TStrings);
  117. var
  118. FileRec: TSearchrec;
  119. Sour: String;
  120. begin
  121. Sour := ASourceDir;
  122. if Sour[length(Sour)] <> '\' then
  123. Sour := Sour + '\';
  124. if FindFirst(Sour + '*.*', faAnyfile, FileRec) = 0 then
  125. {循环}
  126. repeat
  127. if ((FileRec.Attr and faDirectory) <> 0) then
  128. begin
  129. if (FileRec.Name <> '.') and (FileRec.Name <> '..') then //找到目录
  130. begin
  131. FindFiles(Sour + FileRec.Name, SearchFileType, List);
  132. end;
  133. end
  134. else //找到文件
  135. begin
  136. {拷贝所有类型的文件}
  137. if Matchstrings(LowerCase(FileRec.Name), SearchFileType) then
  138. begin
  139. List.Add(Sour + FileRec.Name);
  140. end; {拷贝所有类型的文件}
  141. end;
  142. until FindNext(FileRec) <> 0;
  143. FindClose(FileRec);
  144. end; {从磁盘中搜索指定类型的所有文件}
  145.  
  146. procedure SetCellFontStyle(ACell: TXLSCell; AFontStyle: TFontStyles);
  147. var
  148. CellFontStyle : TXc12FontStyles;
  149. begin
  150. CellFontStyle:=[];
  151.  
  152. if fsBold in AFontStyle then CellFontStyle:=CellFontStyle+[xfsBold];
  153. if fsItalic in AFontStyle then CellFontStyle:=CellFontStyle+[xfsItalic];
  154. if fsStrikeOut in AFontStyle then CellFontStyle:=CellFontStyle+[xfsStrikeOut];
  155.  
  156. ACell.FontStyle := CellFontStyle;
  157.  
  158. if fsUnderline in AFontStyle then ACell.FontUnderline:=xulSingle;
  159. end;
  160.  
  161. procedure TForm1.Button1Click(Sender: TObject);
  162. var
  163. txtList: TStrings;
  164. i: Integer;
  165. XLS3: TXLSReadWriteII5;
  166. sFileName: string;
  167. sQuezi: string;
  168. sTitle: string;
  169. sBanci: string;
  170. sRiqi: string;
  171. firstRow: Integer;
  172. row: Integer;
  173. readTxt: TStringList;
  174. xlsFileName: string;
  175. zhenwen: string;
  176. j: Integer;
  177. aline: string;
  178. pNnum,kNum: Integer;
  179. eNum: Integer;
  180. AFullXLSXFilePath: string;
  181. AURLOrPath: string;
  182. AText: string;
  183. ATooltip: string;
  184. sNewCellFormat : AxUCString;
  185. begin
  186. button1.Enabled:=false; button1.Caption:='正在生成';
  187.  
  188. xlsFileName:=Edit2.Text;
  189.  
  190. txtList:=TStringlist.Create ;
  191. findfiles(edit1.Text,'*.txt',txtList);
  192.  
  193. if txtList.Count=0 then Exit;
  194.  
  195. pb.Position:=0;
  196. pb.Max:=txtlist.Count;
  197.  
  198. XLS3 := TXLSReadWriteII5.Create(nil);
  199.  
  200. AFullXLSXFilePath:=xlsFileName;
  201. if UpperCase(ExtractFileExt(AFullXLSXFilePath))='.XLSX' then
  202. XLS3.Version:=xvExcel2007
  203. else
  204. XLS3.Version:=xvExcel97;
  205.  
  206. // XLS3.DirectWrite:=false;
  207.  
  208. XLS3[0].AsString[0, 0] := '日期';
  209. XLS3[0].AsString[1, 0] := '版次';
  210. XLS3[0].AsString[2, 0] := '标题';
  211. XLS3[0].AsString[3, 0] := '缺字';
  212. XLS3[0].AsString[4, 0] := '文件名';
  213.  
  214. XLS3[0].AsString[5, 0] := '生成时间';
  215.  
  216. XLS3[0].Cell[0,0].FontStyle:=[xfsBold];
  217. XLS3[0].Cell[1,0].FontStyle:=[xfsBold];
  218. XLS3[0].Cell[2,0].FontStyle:=[xfsBold];
  219. XLS3[0].Cell[3,0].FontStyle:=[xfsBold];
  220. XLS3[0].Cell[4,0].FontStyle:=[xfsBold];
  221. XLS3[0].Cell[5,0].FontStyle:=[xfsBold];
  222.  
  223. XLS3[0].Columns[0].PixelWidth:=100;
  224. XLS3[0].Columns[1].PixelWidth:=80;
  225. XLS3[0].Columns[2].PixelWidth:=250;
  226. XLS3[0].Columns[3].PixelWidth:=300;
  227. XLS3[0].Columns[4].PixelWidth:=300;
  228. XLS3[0].Columns[5].PixelWidth:=130;
  229.  
  230. XLS3[0].Columns[0].HorizAlignment:=chaLeft; //对齐方式
  231.  
  232. //
  233.  
  234. sRiqi:=''; sBanci:='';sTitle:='';sQuezi:='';sFileName:='';
  235.  
  236. firstRow:=0;row:=0; kNum:=0;
  237. readTxt:=TStringList.Create;
  238.  
  239. try
  240.  
  241. // row:=1;
  242.  
  243. for i := 0 to txtList.Count-1 do
  244. begin
  245. pb.Position:=i+1;
  246. application.ProcessMessages ;
  247.  
  248. readTxt.LoadFromFile(txtList[i]);
  249.  
  250. sRiqi:=readTxt.Values['<日期>'];
  251. sBanci:=readTxt.Values['<版次>'];
  252. sTitle:=readTxt.Values['<正题>'];
  253.  
  254. pNnum:=0; sQuezi:=''; eNum:=0;
  255.  
  256. for j := 0 to readTxt.Count-1 do
  257. begin
  258. application.ProcessMessages;
  259. aline:=readTxt.Strings[j];
  260.  
  261. kNum:=pos('□',aline);
  262. if kNum>0 then
  263. begin
  264. inc(pNnum);
  265.  
  266. //
  267. if length(aline)>=16 then
  268. begin
  269. if sQuezi='' then
  270. begin
  271. sQuezi:=aline;
  272. sQuezi:='('+inttostr(pNnum)+')'+copy(sQuezi,kNum-6,20);
  273. end
  274. else
  275. begin
  276. eNum:=posEx('□',aline,kNum);
  277.  
  278. if eNum-eNum=1 then
  279. begin
  280. kNum:=eNum;
  281. dec(pNnum);
  282. end
  283. else
  284. begin
  285. kNum:=eNum;
  286. sQuezi:=sQuezi+slinebreak+'('+inttostr(pNnum)+')'+copy(aline,kNum-6,20);
  287. end;
  288.  
  289. end;
  290.  
  291. end
  292. else
  293. begin
  294. if sQuezi='' then
  295. sQuezi:='('+inttostr(pNnum)+')'+copy(aline,kNum-6,20)
  296. else
  297. sQuezi:=sQuezi+slinebreak+'('+inttostr(pNnum)+')'+copy(aline,kNum-6,20);
  298. end;
  299.  
  300. end;
  301.  
  302. end;//for j end
  303.  
  304. readTxt.Clear ;
  305.  
  306. if ''<>trim(sQuezi) then inc(row);
  307.  
  308. kNum:=0; eNum:=0; pNnum:=0;
  309.  
  310. //showmessage(sQuezi);
  311.  
  312. // if row=0 then
  313.  
  314. if ''<>trim(sQuezi) then
  315. begin
  316. XLS3[0].AsString[0, row] := sRiqi;
  317. XLS3[0].AsString[1, row] :=sBanci;
  318. XLS3[0].AsString[2, row] := sTitle;
  319. XLS3[0].Cell[2,row].ShrinkToFit:=false;
  320. XLS3[0].Cell[2,row].WrapText:=true;
  321.  
  322. XLS3[0].AsString[3, row] := sQuezi;
  323. XLS3[0].Cell[3,row].FontSize:=12;
  324. XLS3[0].Cell[3,row].ShrinkToFit:=false;
  325. XLS3[0].Cell[3,row].WrapText:=true;
  326.  
  327. // XLS3[0].Cell[4,row].FontStyle:=Xc12DataStyleSheet5.TXc12FontStyles.
  328. XLS3[0].AsString[4, row] :=extractfilename(txtList[i]);
  329.  
  330. AURLOrPath:=txtList[i];
  331. AText:=XLS3[0].AsString[4, row];
  332. ATooltip:=AURLOrPath;
  333. XLS3[0].MakeHyperlink(4,row,AURLOrPath,AText,ATooltip); //超链接
  334.  
  335. //日期和时间格式
  336. sNewCellFormat:='';
  337. // sNewCellFormat := ExcelStandardNumFormats[XLS_NUMFMT_STD_TIME]; //XLS_NUMFMT_STD_DATE , XLS_NUMFMT_STD_TIME
  338. // sNewCellFormat := 'dd/mm/yyyy hh:mm';
  339. sNewCellFormat := 'dd/mm/yyyy hh:mm:SS';
  340. //sNewCellFormat := 'hh:mm' ;
  341. // sNewCellFormat := 'hh:mm:SS';
  342.  
  343. XLS3[0].AsDateTime[5,row]:=now;
  344. if sNewCellFormat<>'' then
  345. XLS3[0].Cell[5,row].NumberFormat:=sNewCellFormat;
  346.  
  347. end;
  348.  
  349. sQuezi:='';
  350.  
  351. end;//for i end
  352. XLS3.SaveToFile(xlsFileName);
  353.  
  354. if pb.Max=pb.Position then
  355. begin
  356. showmessage('生成完毕!');
  357.  
  358. end;
  359.  
  360. finally
  361. freeandnil(txtlist);
  362. freeandnil(readtxt);
  363. freeandnil(XLS3);
  364. button1.Enabled:=true; button1.Caption:='生成清单';
  365. end;
  366.  
  367. end;
  368.  
  369. procedure TForm1.FormCreate(Sender: TObject);
  370. begin
  371. edit1.Clear ;
  372. edit2.Clear ;
  373.  
  374. edit1.Text:='C:\Users\Administrator\Desktop\test';
  375. edit2.Text:='C:\Users\Administrator\Desktop\test\xx.xls';
  376. end;
  377.  
  378. end.

  

在delphi中XLSReadWriteII.组件的应用实例(1)的更多相关文章

  1. 在delphi中XLSReadWriteII.组件的应用实例(2)

    第三方组件:XLSReadWriteII.v.5.20.67_XE3 实例源码如下:   unit Unit1; interface uses Winapi.Windows, Winapi.Messa ...

  2. Delphi中For In 语法应用实例

    一.遍历 TStrings var List: TStrings; s: string; begin List := TStringList.Create; List.CommaText := 'aa ...

  3. EhLib DBGridEh组件在Delphi中应用全攻略总结(转)

    EhLib DBGridEh组件在Delphi中应用全攻略总结(转) http://blog.sina.com.cn/s/blog_94b1b40001013xn0.html 优化SQL查询:如何写出 ...

  4. delphi 从 TWebbrowse组件中获取图片

    在 delphi 中使用 TWebbrowse 组件,虽然效率不如用(idhttp之类)模拟操作效率高.但其难度低,上手快,简单粗暴有效. 从网上搜到的处理此问题的文章大多是 ctrl + c 复制到 ...

  5. Delphi中Tlist实例

    http://blog.163.com/jiandande3218@126/blog/static/74728469201132721428194/ Delphi中Tlist实例 2011-04-27 ...

  6. 第七十七篇:ref引用(在vue中引用组件实例)

    好家伙, 为方便理解, 我们先来写一个经典自增一按钮, 再加上一个count清零按钮, Left.vue组件中: <template> <div > <h1>我是L ...

  7. delphi列表视图组件(TListView)使用方法|实例

    TListView 组件以多种形式显示列表的项目,如详细资料.小图标.大图标等形式表示列表中的项目.    列表视图与用TListBox 组件实现的列表框非常相似.不同的是,列表视图可以让用户选择不同 ...

  8. Delphi中使用比较少的一些语法

    本文是为了加强记忆而写,这里写的大多数内容都是在编程的日常工作中使用频率不高的东西,但是又十分重要. ---Murphy 1,构造和析构函数: a,构造函数: 一般基于TComponent组件的派生类 ...

  9. 谈Delphi中SSL协议的应用(好多相关文章)

    摘要:本文主要介绍如何在Delphi中使用SSL协议.一共分为七个部分:(1)SSL协议是什么?(2)Delphi中如何使用SSL协议?(3)SSL客户端编程实例.(4)SSL服务端编程实例.(5)S ...

随机推荐

  1. python int str

    1. int 类型转换 a = "123" b = int(a) b = b+10 print(type(a),a) print(type(b),b) 2. int(num,bas ...

  2. es6学习日记1

    1.let和const ES6新增了let命令,用来声明变量,用法类似于var ,但是声明的变量只在let命令所在代码块内有效. 例如: { let a = 10; var b = 1; } a // ...

  3. 帝国cms自动保存图片

    <?=ECMS_ShowEditorVar("newstext",$ecmsfirstpost==1?"":stripSlashes($r[newstex ...

  4. leetcode 846.Hand of Straights

    对于一个数组中的数分为W组且在每一组内的数是连续存在的. 考虑使用map映射来记录每个数的个数的,并且对于数组中的数进行从小到大的排列的.同时每次需要更新最开始的那个起始数的,可能是以及出现的也可能是 ...

  5. c——二分查找

    思路: 1.输入:数组长度n,待查找的有序数组a[],要找的元素key 2.输出:待查找元素在数组中的位置,若不存在返回-1 3.实现:三个指针,left.mid.right #include< ...

  6. Arch Linux 的休眠设置

    https://wiki.archlinux.org/index.php/Power_management/Suspend_and_hibernate_(简体中文)https://wiki.archl ...

  7. ORA-02275: 此表中已经存在这样的引用约束条件

    问题描述: 针对这个问题,发表一下我的观点.emp表和dept表使用hibernate关联查询时报的错,使用的是非注解形式,和其他一样.他们各自有entity,各自有一个hbm.xml文件,emp表这 ...

  8. 计算apk包的安装之后占用空间以及运行时占用内存

    1.统计结果如下 计算apk安装占用空间大小方式 为了方式apk包运行时出现缓存数据等对空间计算造成影响.应该先进行安装,然后分别计算空间变化 所有apk包安装完毕后再运行 开启两个cmd窗口 第一个 ...

  9. 在C#中如何判断线程当前所处的状态

    在C#中,线程对象Thread使用ThreadState属性指示线程状态,它是带Flags特性的枚举类型对象.   ThreadState 为线程定义了一组所有可能的执行状态.一旦线程被创建,它就至少 ...

  10. Linux中加速访问github

    1. 登录http://tool.chinaz.com/dns/ 2. 查询以下域名映射,并分别取访问速度较快的一个ip github.global.ssl.fastly.net   ->    ...