1. TXLSReadWriteII导出Excle (有点复杂,可以自己简化一下,直接从项目中抓取的)
  2.  
  3. procedure TformSubReport.DataToExcel(_Item: Integer; _Obj: TObject); //导出Excle
  4.  
  5. var
  6.  
  7. i, j, k: Integer;
  8.  
  9. aVendorObj: TVendor;
  10.  
  11. aEnterpriseObj: TEnterprise;
  12.  
  13. aXlsObj: TXLSReadWriteII;
  14.  
  15. aFileName: AnsiString;
  16.  
  17. aCarRec: PCarRec;
  18.  
  19. aOnLine: AnsiString;
  20.  
  21. aRecordCount: Integer; //Excel数据条数
  22.  
  23. aEnterpriseCount: Integer; //统计企业有多少行 + 合计一行
  24.  
  25. aBookmark: Integer; //记录运营商的起始位置
  26.  
  27. aMergedCell: TMergedCell;
  28.  
  29. aFontIndex: Integer;
  30.  
  31. aStampTime: AnsiString;
  32.  
  33. aVendorName: AnsiString;
  34.  
  35. begin
  36.  
  37. if _Item = 1 then
  38.  
  39. _Obj := nil;
  40.  
  41. aRecordCount := 0;
  42.  
  43. aEnterpriseCount := 0;
  44.  
  45. SaveDialog1.InitialDir := ExtractFilePath(ParamStr(0));
  46.  
  47. SaveDialog1.DefaultExt := 'xls';
  48.  
  49. SaveDialog1.Filter := 'Excel文件(*.xls)|*.xls|所有文件(*.*)|*.*';
  50.  
  51. aStampTime := FormatDateTime('yyyymmddhhnnss', Now);
  52.  
  53. SaveDialog1.FileName := aStampTime;
  54.  
  55. if not SaveDialog1.Execute then
  56.  
  57. Exit;
  58.  
  59. aFileName := SaveDialog1.FileName;
  60.  
  61. if aFileName = '' then
  62.  
  63. Exit;
  64.  
  65. aXlsObj := TXLSReadWriteII.Create(nil);
  66.  
  67. try
  68.  
  69. aXlsObj.Sheets[0].NameWideString('统计报表' + aStampTime); //工作表命名
  70.  
  71. with aXlsObj.Formats.Add do //定义格式一
  72.  
  73. begin
  74.  
  75. aFontIndex := aXlsObj.Fonts.AddIndex;
  76.  
  77. aXlsObj.Fonts[aFontIndex].Name := '黑体';
  78.  
  79. aXlsObj.Fonts[aFontIndex].Size := 14;
  80.  
  81. aXlsObj.Fonts[aFontIndex].Color := xcRed; //字体颜色无效。shit
  82.  
  83. HorizAlignment := chaCenter;
  84.  
  85. VertAlignment := cvaCenter;
  86.  
  87. FillPatternForeColor := xcLilac;
  88.  
  89. end;
  90.  
  91. with aXlsObj.Formats.Add do //定义格式二
  92.  
  93. begin
  94.  
  95. HorizAlignment := chaCenter;
  96.  
  97. VertAlignment := cvaCenter;
  98.  
  99. end;
  100.  
  101. case _item of
  102.  
  103. 1:begin
  104.  
  105. aXlsObj.Sheets[0].WriteWideString(0, 0, 1, '运营商名称');
  106.  
  107. aXlsObj.Sheets[0].WriteWideString(1, 0, 1, '企业名称');
  108.  
  109. aXlsObj.Sheets[0].WriteWideString(2, 0, 1, '轨迹数总数');
  110.  
  111. aXlsObj.Sheets[0].WriteWideString(3, 0, 1, '超速报警总数');
  112.  
  113. aXlsObj.Sheets[0].WriteWideString(4, 0, 1, '车辆总数');
  114.  
  115. aXlsObj.Sheets[0].WriteWideString(5, 0, 1, '在线车辆总数');
  116.  
  117. aXlsObj.Sheets[0].WriteWideString(6, 0, 1, '在线率(%)');
  118.  
  119. end;
  120.  
  121. else
  122.  
  123. begin
  124.  
  125. aXlsObj.Sheets[0].WriteWideString(0, 0, 1, '序号');
  126.  
  127. aXlsObj.Sheets[0].WriteWideString(1, 0, 1, '运营商名称');
  128.  
  129. aXlsObj.Sheets[0].WriteWideString(2, 0, 1, '企业名称');
  130.  
  131. aXlsObj.Sheets[0].WriteWideString(3, 0, 1, '定位时间');
  132.  
  133. aXlsObj.Sheets[0].WriteWideString(4, 0, 1, '车牌号码');
  134.  
  135. aXlsObj.Sheets[0].WriteWideString(5, 0, 1, '轨迹数');
  136.  
  137. aXlsObj.Sheets[0].WriteWideString(6, 0, 1, '超速报警数');
  138.  
  139. aXlsObj.Sheets[0].WriteWideString(7, 0, 1, '疲劳驾驶报警数');
  140.  
  141. aXlsObj.Sheets[0].WriteWideString(8, 0, 1, '是否在线');
  142.  
  143. end;
  144.  
  145. end;
  146.  
  147. if _Obj = nil then
  148.  
  149. begin
  150.  
  151. for i := 0 to FVendorHash.Count - 1 do
  152.  
  153. begin
  154.  
  155. aVendorObj := FVendorHash[i];
  156.  
  157. if aVendorObj = nil then Continue;
  158.  
  159. aBookmark := aEnterpriseCount;
  160.  
  161. aEnterpriseCount := 0;
  162.  
  163. for j := 0 to aVendorObj.EnterpriseHash.Count - 1 do
  164.  
  165. begin
  166.  
  167. aEnterpriseObj := aVendorObj.EnterpriseHash[j];
  168.  
  169. if aEnterpriseObj = nil then Continue;
  170.  
  171. if _Item = 1 then
  172.  
  173. begin
  174.  
  175. inc(aRecordCount);
  176.  
  177. inc(aEnterpriseCount);
  178.  
  179. aXlsObj.Sheets[0].WriteWideString(0, aRecordCount, 2, aVendorObj.DataRec.VendorName);
  180.  
  181. aXlsObj.Sheets[0].AsWideString[1, aRecordCount] := aEnterpriseObj.DataRec.EnterpriseName;
  182.  
  183. aXlsObj.Sheets[0].AsFloat[2, aRecordCount] := aEnterpriseObj.TotalInfo.TotalGpsCount;
  184.  
  185. aXlsObj.Sheets[0].AsFloat[3, aRecordCount] := aEnterpriseObj.TotalInfo.TotalOverAlarm;
  186.  
  187. aXlsObj.Sheets[0].AsFloat[4, aRecordCount] := aEnterpriseObj.TotalInfo.TotalCarCount;
  188.  
  189. aXlsObj.Sheets[0].AsFloat[5, aRecordCount] := aEnterpriseObj.TotalInfo.TotalOnLine;
  190.  
  191. aXlsObj.Sheets[0].AsFloat[6, aRecordCount] := aEnterpriseObj.TotalInfo.OnlineRate;
  192.  
  193. end
  194.  
  195. else
  196.  
  197. begin
  198.  
  199. for k := 0 to aEnterpriseObj.CarHash.Count - 1 do
  200.  
  201. begin
  202.  
  203. aCarRec := aEnterpriseObj.CarHash[k];
  204.  
  205. if _Item = 2 then //在线
  206.  
  207. begin
  208.  
  209. if not aCarRec.IsLine then Continue;
  210.  
  211. aOnLine := '在线';
  212.  
  213. end
  214.  
  215. else if _Item = 3 then //离线
  216.  
  217. begin
  218.  
  219. if aCarRec.IsLine then Continue;
  220.  
  221. aOnLine := '离线';
  222.  
  223. end
  224.  
  225. else if _Item = 4 then //所有
  226.  
  227. begin
  228.  
  229. if aCarRec.IsLine then
  230.  
  231. aOnLine := '在线'
  232.  
  233. else
  234.  
  235. aOnLine := '离线';
  236.  
  237. end;
  238.  
  239. inc(aRecordCount);
  240.  
  241. inc(aEnterpriseCount);
  242.  
  243. aXlsObj.Sheets[0].AsInteger[0, aRecordCount] := aRecordCount;
  244.  
  245. aXlsObj.Sheets[0].AsWideString[1, aRecordCount] := aVendorObj.DataRec.VendorName;
  246.  
  247. aXlsObj.Sheets[0].AsWideString[2, aRecordCount] := aEnterpriseObj.DataRec.EnterpriseName;
  248.  
  249. aXlsObj.Sheets[0].AsWideString[3, aRecordCount] := DateTimeToStr(aCarRec.ReportDate);
  250.  
  251. aXlsObj.Sheets[0].AsWideString[4, aRecordCount] := aCarRec.RegistrationNO;
  252.  
  253. aXlsObj.Sheets[0].AsFloat[5, aRecordCount] := aCarRec.GpsCount;
  254.  
  255. aXlsObj.Sheets[0].AsFloat[6, aRecordCount] := aCarRec.OverSpeedAlarmCount;
  256.  
  257. aXlsObj.Sheets[0].AsFloat[7, aRecordCount] := aCarRec.DriverFatigueAlarmCount;
  258.  
  259. aXlsObj.Sheets[0].AsWideString[8, aRecordCount] := aOnLine;
  260.  
  261. end;
  262.  
  263. end;
  264.  
  265. end;
  266.  
  267. if _Item = 1 then //小计
  268.  
  269. begin
  270.  
  271. Inc(aRecordCount);
  272.  
  273. Inc(aEnterpriseCount);
  274.  
  275. aXlsObj.Sheets[0].WriteWideString(0, aRecordCount, 2, aVendorObj.DataRec.VendorName);
  276.  
  277. aXlsObj.Sheets[0].WriteWideString(1, aRecordCount, 2, '小计');
  278.  
  279. aXlsObj.Sheets[0].AsFloat[2, aRecordCount] := aVendorObj.TotalInfo.TotalGpsCount;
  280.  
  281. aXlsObj.Sheets[0].AsFloat[3, aRecordCount] := aVendorObj.TotalInfo.TotalOverAlarm;
  282.  
  283. aXlsObj.Sheets[0].AsFloat[4, aRecordCount] := aVendorObj.TotalInfo.TotalCarCount;
  284.  
  285. aXlsObj.Sheets[0].AsFloat[5, aRecordCount] := aVendorObj.TotalInfo.TotalOnLine;
  286.  
  287. aXlsObj.Sheets[0].AsFloat[6, aRecordCount] := aVendorObj.TotalInfo.OnlineRate;
  288.  
  289. aMergedCell := aXlsObj.Sheets[0].MergedCells.Add;
  290.  
  291. aMergedCell.Col1 := 0;
  292.  
  293. aMergedCell.Row1 := aBookmark + 1;
  294.  
  295. aMergedCell.Col2 := 0;
  296.  
  297. aMergedCell.Row2 := aBookmark + aEnterpriseCount; //这里的值是对应Excel中最后一行的地址
  298.  
  299. end;
  300.  
  301. end;
  302.  
  303. end
  304.  
  305. else if _Obj is TVendor then
  306.  
  307. begin
  308.  
  309. for j := 0 to TVendor(_Obj).EnterpriseHash.Count - 1 do
  310.  
  311. begin
  312.  
  313. aEnterpriseObj := TVendor(_Obj).EnterpriseHash[j];
  314.  
  315. if aEnterpriseObj = nil then Continue;
  316.  
  317. for k := 0 to aEnterpriseObj.CarHash.Count - 1 do
  318.  
  319. begin
  320.  
  321. aCarRec := aEnterpriseObj.CarHash[k];
  322.  
  323. if _Item = 2 then //在线
  324.  
  325. begin
  326.  
  327. if not aCarRec.IsLine then Continue;
  328.  
  329. aOnLine := '在线';
  330.  
  331. end
  332.  
  333. else if _Item = 3 then //离线
  334.  
  335. begin
  336.  
  337. if aCarRec.IsLine then Continue;
  338.  
  339. aOnLine := '离线';
  340.  
  341. end
  342.  
  343. else if _Item = 4 then //所有
  344.  
  345. begin
  346.  
  347. if aCarRec.IsLine then
  348.  
  349. aOnLine := '在线'
  350.  
  351. else
  352.  
  353. aOnLine := '离线';
  354.  
  355. end;
  356.  
  357. inc(aRecordCount);
  358.  
  359. aXlsObj.Sheets[0].AsInteger[0, aRecordCount] := aRecordCount;
  360.  
  361. aXlsObj.Sheets[0].AsWideString[1, aRecordCount] := TVendor(_Obj).DataRec.VendorName;
  362.  
  363. aXlsObj.Sheets[0].AsWideString[2, aRecordCount] := aEnterpriseObj.DataRec.EnterpriseName;
  364.  
  365. aXlsObj.Sheets[0].AsWideString[3, aRecordCount] := DateTimeToStr(aCarRec.ReportDate);
  366.  
  367. aXlsObj.Sheets[0].AsWideString[4, aRecordCount] := aCarRec.RegistrationNO;
  368.  
  369. aXlsObj.Sheets[0].AsFloat[5, aRecordCount] := aCarRec.GpsCount;
  370.  
  371. aXlsObj.Sheets[0].AsFloat[6, aRecordCount] := aCarRec.OverSpeedAlarmCount;
  372.  
  373. aXlsObj.Sheets[0].AsFloat[7, aRecordCount] := aCarRec.DriverFatigueAlarmCount;
  374.  
  375. aXlsObj.Sheets[0].AsWideString[8, aRecordCount] := aOnLine;
  376.  
  377. end;
  378.  
  379. end;
  380.  
  381. end
  382.  
  383. else if _Obj is TEnterprise then
  384.  
  385. begin
  386.  
  387. aVendorObj := FVendorHash.ValueOf(IntToStr(TEnterprise(_Obj).DataRec.VendorID));
  388.  
  389. if aVendorObj = nil then
  390.  
  391. Exit;
  392.  
  393. aVendorName := aVendorObj.DataRec.VendorName;
  394.  
  395. for k := 0 to TEnterprise(_Obj).CarHash.Count - 1 do
  396.  
  397. begin
  398.  
  399. aCarRec := TEnterprise(_Obj).CarHash[k];
  400.  
  401. if _Item = 2 then //在线
  402.  
  403. begin
  404.  
  405. if not aCarRec.IsLine then Continue;
  406.  
  407. aOnLine := '在线';
  408.  
  409. end
  410.  
  411. else if _Item = 3 then //离线
  412.  
  413. begin
  414.  
  415. if aCarRec.IsLine then Continue;
  416.  
  417. aOnLine := '离线';
  418.  
  419. end
  420.  
  421. else if _Item = 4 then //所有
  422.  
  423. begin
  424.  
  425. if aCarRec.IsLine then
  426.  
  427. aOnLine := '在线'
  428.  
  429. else
  430.  
  431. aOnLine := '离线';
  432.  
  433. end;
  434.  
  435. inc(aRecordCount);
  436.  
  437. aXlsObj.Sheets[0].AsInteger[0, aRecordCount] := aRecordCount;
  438.  
  439. aXlsObj.Sheets[0].AsWideString[1, aRecordCount] := aVendorName;
  440.  
  441. aXlsObj.Sheets[0].AsWideString[2, aRecordCount] := TEnterprise(_Obj).DataRec.EnterpriseName;
  442.  
  443. aXlsObj.Sheets[0].AsWideString[3, aRecordCount] := DateTimeToStr(aCarRec.ReportDate);
  444.  
  445. aXlsObj.Sheets[0].AsWideString[4, aRecordCount] := aCarRec.RegistrationNO;
  446.  
  447. aXlsObj.Sheets[0].AsFloat[5, aRecordCount] := aCarRec.GpsCount;
  448.  
  449. aXlsObj.Sheets[0].AsFloat[6, aRecordCount] := aCarRec.OverSpeedAlarmCount;
  450.  
  451. aXlsObj.Sheets[0].AsFloat[7, aRecordCount] := aCarRec.DriverFatigueAlarmCount;
  452.  
  453. aXlsObj.Sheets[0].AsWideString[8, aRecordCount] := aOnLine;
  454.  
  455. end;
  456.  
  457. end;
  458.  
  459. if (_Item = 1) and (_Obj = nil) then //汇总
  460.  
  461. begin
  462.  
  463. Inc(aRecordCount);
  464.  
  465. aXlsObj.Sheets[0].WriteWideString(0, aRecordCount, 2, '汇总');
  466.  
  467. aXlsObj.Sheets[0].AsInteger[1, aRecordCount] := FTotalEnterpriseCount;
  468.  
  469. aXlsObj.Sheets[0].AsFloat[2, aRecordCount] := FTotalInfo.TotalGpsCount;
  470.  
  471. aXlsObj.Sheets[0].AsFloat[3, aRecordCount] := FTotalInfo.TotalOverAlarm;
  472.  
  473. aXlsObj.Sheets[0].AsFloat[4, aRecordCount] := FTotalInfo.TotalCarCount;
  474.  
  475. aXlsObj.Sheets[0].AsFloat[5, aRecordCount] := FTotalInfo.TotalOnLine;
  476.  
  477. aXlsObj.Sheets[0].AsFloat[6, aRecordCount] := FTotalInfo.OnlineRate;
  478.  
  479. end;
  480.  
  481. aXlsObj.Filename := aFileName;
  482.  
  483. aXlsObj.Write;
  484.  
  485. Information(Format('导出文件'+#13#10+'%s'+#13#10 +'成功!', [aFileName]));
  486.  
  487. finally
  488.  
  489. aXlsObj.Free;
  490.  
  491. end;
  492.  
  493. end;

  

Delphi TXLSReadWriteII导出Excel的更多相关文章

  1. Delphi TXLSReadWriteII 导出EXCEL

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  2. Delphi DBGridEh导出Excel

    unit Unit_DBGridEhToExcel; interface uses SysUtils, Variants, Classes, Graphics, Controls, Forms, Ex ...

  3. Delphi+DBGrid导出Excel

    uses ComObj; //DBGrid:指定的DBGrid;SaveFileName:要保存的文件名 function ExportDBGrid(DBGrid: TDBGrid; SaveFile ...

  4. delphi cxgrid导出excel去除货币符号

    版本 : devexpress 13.1.4 打开 包在ExpressExportLibary目录中.  修改FCells.SetCellDataCurrency为FCells.SetCellData ...

  5. Delphi 数据导出到Excel

    好多办公软件特别是财务软件,都需要配备把数据导出到Excel,下面就来介绍两种数据导出方法 1.ADODB导出查询结果(此方法需要安装Excel) 2.二维表数据导出(根据Excel文件结构生成二进制 ...

  6. CxGrid导出Excel时清除颜色的设置

    CxGrid导出Excel时清除颜色的设置 (2011-04-25 16:33:23) 转载▼ 标签: it 分类: Delphi http://www.radxe.com/?p=170 cxgrid ...

  7. C#使用Aspose.Cells导出Excel简单实现

    首先,需要添加引用Aspose.Cells.dll,官网下载地址:http://downloads.aspose.com/cells/net 将DataTable导出Xlsx格式的文件下载(网页输出) ...

  8. 利用poi导出Excel

    import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.r ...

  9. [django]数据导出excel升级强化版(很强大!)

    不多说了,原理采用xlwt导出excel文件,所谓的强化版指的是实现在网页上选择一定条件导出对应的数据 之前我的博文出过这类文章,但只是实现导出数据,这次左思右想,再加上网上的搜索,终于找出方法实现条 ...

随机推荐

  1. 指向函数的指针 ------ 函数指针(function pointer)

    函数指针: 指向函数的指针, 首先是一个指针, 这个指针指向一个函数. 函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个指针,它指向函数的代码.一个函数的地址是该函数的进入点,也是调用函数 ...

  2. LINUX系统配置

    LINUX系统配置 Linux 安装jdk方法; Linux Tomcat 安装与配置 Linux redis 安装与配置 (例1) Linux redis安装配置(例2) NGINX 安装 Linu ...

  3. C# 实现CRC16校验

    前言 本文将使用一个NuGet公开的组件技术来实现CRC16校验功能,提供了一些简单的API,来方便的实现. 在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控 ...

  4. cocos2dx开发之util类&方法——字符串替换

    /*将originStr字符串中的searchStr替换成replaceStr*/ std::string str_replace(std::string originStr,std::string ...

  5. PythonStudy——汇编语言 Assembly Language

    汇编语言 汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指令的操 ...

  6. Python调用ffpmeg和ffprobe处理视频文件

    需求: 运营有若干批次的视频.有上千个,视频文件,有mp4格式的,有ts格式的 现在有需要去掉视频文件片头和片尾的批量操作需求. 比如 文件夹A下面的视频去掉片尾10秒 文件夹B下面的视频去掉片头6秒 ...

  7. Jenkins 配置 FindBugs,Checkstyle,PMD 实现代码的静态检查 (14)

    一.插件介绍 FindBugs:静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.利用这个工具,就可以在不实际运行程序的情况对软件进行分析.它可以帮助改进代码的 ...

  8. Hbase rowkey设计+布隆过滤器+STORE FILE & HFILE结构

    Rowkey设计 Rowkey设计原则 Rowkey设计应遵循以下原则: 1.Rowkey的唯一原则 必须在设计上保证其唯一性.由于在HBase中数据存储是Key-Value形式,若HBase中同一表 ...

  9. c# 判断时间是否在 某一时间段内

    protected bool getTimeSpan(string timeStr) { //判断当前时间是否在工作时间段内 string _strWorkingDayAM = "08:30 ...

  10. LiveBindings --- 把对象之间的属性绑定起来

    有了 FireMonkey 框架,它不同于 VCL ,以往的数据感知控件不能放在它上面,所以 XE2 提供了 LiveBindings 功能作为替代方案.另外它也是个通用的基础设施,同样可用于传统的V ...