Delphi TXLSReadWriteII导出Excel
TXLSReadWriteII导出Excle (有点复杂,可以自己简化一下,直接从项目中抓取的) procedure TformSubReport.DataToExcel(_Item: Integer; _Obj: TObject); //导出Excle var i, j, k: Integer; aVendorObj: TVendor; aEnterpriseObj: TEnterprise; aXlsObj: TXLSReadWriteII; aFileName: AnsiString; aCarRec: PCarRec; aOnLine: AnsiString; aRecordCount: Integer; //Excel数据条数 aEnterpriseCount: Integer; //统计企业有多少行 + 合计一行 aBookmark: Integer; //记录运营商的起始位置 aMergedCell: TMergedCell; aFontIndex: Integer; aStampTime: AnsiString; aVendorName: AnsiString; begin if _Item = 1 then _Obj := nil; aRecordCount := 0; aEnterpriseCount := 0; SaveDialog1.InitialDir := ExtractFilePath(ParamStr(0)); SaveDialog1.DefaultExt := 'xls'; SaveDialog1.Filter := 'Excel文件(*.xls)|*.xls|所有文件(*.*)|*.*'; aStampTime := FormatDateTime('yyyymmddhhnnss', Now); SaveDialog1.FileName := aStampTime; if not SaveDialog1.Execute then Exit; aFileName := SaveDialog1.FileName; if aFileName = '' then Exit; aXlsObj := TXLSReadWriteII.Create(nil); try aXlsObj.Sheets[0].NameWideString('统计报表' + aStampTime); //工作表命名 with aXlsObj.Formats.Add do //定义格式一 begin aFontIndex := aXlsObj.Fonts.AddIndex; aXlsObj.Fonts[aFontIndex].Name := '黑体'; aXlsObj.Fonts[aFontIndex].Size := 14; aXlsObj.Fonts[aFontIndex].Color := xcRed; //字体颜色无效。shit HorizAlignment := chaCenter; VertAlignment := cvaCenter; FillPatternForeColor := xcLilac; end; with aXlsObj.Formats.Add do //定义格式二 begin HorizAlignment := chaCenter; VertAlignment := cvaCenter; end; case _item of 1:begin aXlsObj.Sheets[0].WriteWideString(0, 0, 1, '运营商名称'); aXlsObj.Sheets[0].WriteWideString(1, 0, 1, '企业名称'); aXlsObj.Sheets[0].WriteWideString(2, 0, 1, '轨迹数总数'); aXlsObj.Sheets[0].WriteWideString(3, 0, 1, '超速报警总数'); aXlsObj.Sheets[0].WriteWideString(4, 0, 1, '车辆总数'); aXlsObj.Sheets[0].WriteWideString(5, 0, 1, '在线车辆总数'); aXlsObj.Sheets[0].WriteWideString(6, 0, 1, '在线率(%)'); end; else begin aXlsObj.Sheets[0].WriteWideString(0, 0, 1, '序号'); aXlsObj.Sheets[0].WriteWideString(1, 0, 1, '运营商名称'); aXlsObj.Sheets[0].WriteWideString(2, 0, 1, '企业名称'); aXlsObj.Sheets[0].WriteWideString(3, 0, 1, '定位时间'); aXlsObj.Sheets[0].WriteWideString(4, 0, 1, '车牌号码'); aXlsObj.Sheets[0].WriteWideString(5, 0, 1, '轨迹数'); aXlsObj.Sheets[0].WriteWideString(6, 0, 1, '超速报警数'); aXlsObj.Sheets[0].WriteWideString(7, 0, 1, '疲劳驾驶报警数'); aXlsObj.Sheets[0].WriteWideString(8, 0, 1, '是否在线'); end; end; if _Obj = nil then begin for i := 0 to FVendorHash.Count - 1 do begin aVendorObj := FVendorHash[i]; if aVendorObj = nil then Continue; aBookmark := aEnterpriseCount; aEnterpriseCount := 0; for j := 0 to aVendorObj.EnterpriseHash.Count - 1 do begin aEnterpriseObj := aVendorObj.EnterpriseHash[j]; if aEnterpriseObj = nil then Continue; if _Item = 1 then begin inc(aRecordCount); inc(aEnterpriseCount); aXlsObj.Sheets[0].WriteWideString(0, aRecordCount, 2, aVendorObj.DataRec.VendorName); aXlsObj.Sheets[0].AsWideString[1, aRecordCount] := aEnterpriseObj.DataRec.EnterpriseName; aXlsObj.Sheets[0].AsFloat[2, aRecordCount] := aEnterpriseObj.TotalInfo.TotalGpsCount; aXlsObj.Sheets[0].AsFloat[3, aRecordCount] := aEnterpriseObj.TotalInfo.TotalOverAlarm; aXlsObj.Sheets[0].AsFloat[4, aRecordCount] := aEnterpriseObj.TotalInfo.TotalCarCount; aXlsObj.Sheets[0].AsFloat[5, aRecordCount] := aEnterpriseObj.TotalInfo.TotalOnLine; aXlsObj.Sheets[0].AsFloat[6, aRecordCount] := aEnterpriseObj.TotalInfo.OnlineRate; end else begin for k := 0 to aEnterpriseObj.CarHash.Count - 1 do begin aCarRec := aEnterpriseObj.CarHash[k]; if _Item = 2 then //在线 begin if not aCarRec.IsLine then Continue; aOnLine := '在线'; end else if _Item = 3 then //离线 begin if aCarRec.IsLine then Continue; aOnLine := '离线'; end else if _Item = 4 then //所有 begin if aCarRec.IsLine then aOnLine := '在线' else aOnLine := '离线'; end; inc(aRecordCount); inc(aEnterpriseCount); aXlsObj.Sheets[0].AsInteger[0, aRecordCount] := aRecordCount; aXlsObj.Sheets[0].AsWideString[1, aRecordCount] := aVendorObj.DataRec.VendorName; aXlsObj.Sheets[0].AsWideString[2, aRecordCount] := aEnterpriseObj.DataRec.EnterpriseName; aXlsObj.Sheets[0].AsWideString[3, aRecordCount] := DateTimeToStr(aCarRec.ReportDate); aXlsObj.Sheets[0].AsWideString[4, aRecordCount] := aCarRec.RegistrationNO; aXlsObj.Sheets[0].AsFloat[5, aRecordCount] := aCarRec.GpsCount; aXlsObj.Sheets[0].AsFloat[6, aRecordCount] := aCarRec.OverSpeedAlarmCount; aXlsObj.Sheets[0].AsFloat[7, aRecordCount] := aCarRec.DriverFatigueAlarmCount; aXlsObj.Sheets[0].AsWideString[8, aRecordCount] := aOnLine; end; end; end; if _Item = 1 then //小计 begin Inc(aRecordCount); Inc(aEnterpriseCount); aXlsObj.Sheets[0].WriteWideString(0, aRecordCount, 2, aVendorObj.DataRec.VendorName); aXlsObj.Sheets[0].WriteWideString(1, aRecordCount, 2, '小计'); aXlsObj.Sheets[0].AsFloat[2, aRecordCount] := aVendorObj.TotalInfo.TotalGpsCount; aXlsObj.Sheets[0].AsFloat[3, aRecordCount] := aVendorObj.TotalInfo.TotalOverAlarm; aXlsObj.Sheets[0].AsFloat[4, aRecordCount] := aVendorObj.TotalInfo.TotalCarCount; aXlsObj.Sheets[0].AsFloat[5, aRecordCount] := aVendorObj.TotalInfo.TotalOnLine; aXlsObj.Sheets[0].AsFloat[6, aRecordCount] := aVendorObj.TotalInfo.OnlineRate; aMergedCell := aXlsObj.Sheets[0].MergedCells.Add; aMergedCell.Col1 := 0; aMergedCell.Row1 := aBookmark + 1; aMergedCell.Col2 := 0; aMergedCell.Row2 := aBookmark + aEnterpriseCount; //这里的值是对应Excel中最后一行的地址 end; end; end else if _Obj is TVendor then begin for j := 0 to TVendor(_Obj).EnterpriseHash.Count - 1 do begin aEnterpriseObj := TVendor(_Obj).EnterpriseHash[j]; if aEnterpriseObj = nil then Continue; for k := 0 to aEnterpriseObj.CarHash.Count - 1 do begin aCarRec := aEnterpriseObj.CarHash[k]; if _Item = 2 then //在线 begin if not aCarRec.IsLine then Continue; aOnLine := '在线'; end else if _Item = 3 then //离线 begin if aCarRec.IsLine then Continue; aOnLine := '离线'; end else if _Item = 4 then //所有 begin if aCarRec.IsLine then aOnLine := '在线' else aOnLine := '离线'; end; inc(aRecordCount); aXlsObj.Sheets[0].AsInteger[0, aRecordCount] := aRecordCount; aXlsObj.Sheets[0].AsWideString[1, aRecordCount] := TVendor(_Obj).DataRec.VendorName; aXlsObj.Sheets[0].AsWideString[2, aRecordCount] := aEnterpriseObj.DataRec.EnterpriseName; aXlsObj.Sheets[0].AsWideString[3, aRecordCount] := DateTimeToStr(aCarRec.ReportDate); aXlsObj.Sheets[0].AsWideString[4, aRecordCount] := aCarRec.RegistrationNO; aXlsObj.Sheets[0].AsFloat[5, aRecordCount] := aCarRec.GpsCount; aXlsObj.Sheets[0].AsFloat[6, aRecordCount] := aCarRec.OverSpeedAlarmCount; aXlsObj.Sheets[0].AsFloat[7, aRecordCount] := aCarRec.DriverFatigueAlarmCount; aXlsObj.Sheets[0].AsWideString[8, aRecordCount] := aOnLine; end; end; end else if _Obj is TEnterprise then begin aVendorObj := FVendorHash.ValueOf(IntToStr(TEnterprise(_Obj).DataRec.VendorID)); if aVendorObj = nil then Exit; aVendorName := aVendorObj.DataRec.VendorName; for k := 0 to TEnterprise(_Obj).CarHash.Count - 1 do begin aCarRec := TEnterprise(_Obj).CarHash[k]; if _Item = 2 then //在线 begin if not aCarRec.IsLine then Continue; aOnLine := '在线'; end else if _Item = 3 then //离线 begin if aCarRec.IsLine then Continue; aOnLine := '离线'; end else if _Item = 4 then //所有 begin if aCarRec.IsLine then aOnLine := '在线' else aOnLine := '离线'; end; inc(aRecordCount); aXlsObj.Sheets[0].AsInteger[0, aRecordCount] := aRecordCount; aXlsObj.Sheets[0].AsWideString[1, aRecordCount] := aVendorName; aXlsObj.Sheets[0].AsWideString[2, aRecordCount] := TEnterprise(_Obj).DataRec.EnterpriseName; aXlsObj.Sheets[0].AsWideString[3, aRecordCount] := DateTimeToStr(aCarRec.ReportDate); aXlsObj.Sheets[0].AsWideString[4, aRecordCount] := aCarRec.RegistrationNO; aXlsObj.Sheets[0].AsFloat[5, aRecordCount] := aCarRec.GpsCount; aXlsObj.Sheets[0].AsFloat[6, aRecordCount] := aCarRec.OverSpeedAlarmCount; aXlsObj.Sheets[0].AsFloat[7, aRecordCount] := aCarRec.DriverFatigueAlarmCount; aXlsObj.Sheets[0].AsWideString[8, aRecordCount] := aOnLine; end; end; if (_Item = 1) and (_Obj = nil) then //汇总 begin Inc(aRecordCount); aXlsObj.Sheets[0].WriteWideString(0, aRecordCount, 2, '汇总'); aXlsObj.Sheets[0].AsInteger[1, aRecordCount] := FTotalEnterpriseCount; aXlsObj.Sheets[0].AsFloat[2, aRecordCount] := FTotalInfo.TotalGpsCount; aXlsObj.Sheets[0].AsFloat[3, aRecordCount] := FTotalInfo.TotalOverAlarm; aXlsObj.Sheets[0].AsFloat[4, aRecordCount] := FTotalInfo.TotalCarCount; aXlsObj.Sheets[0].AsFloat[5, aRecordCount] := FTotalInfo.TotalOnLine; aXlsObj.Sheets[0].AsFloat[6, aRecordCount] := FTotalInfo.OnlineRate; end; aXlsObj.Filename := aFileName; aXlsObj.Write; Information(Format('导出文件'+#13#10+'%s'+#13#10 +'成功!', [aFileName])); finally aXlsObj.Free; end; end;
Delphi TXLSReadWriteII导出Excel的更多相关文章
- Delphi TXLSReadWriteII 导出EXCEL
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- Delphi DBGridEh导出Excel
unit Unit_DBGridEhToExcel; interface uses SysUtils, Variants, Classes, Graphics, Controls, Forms, Ex ...
- Delphi+DBGrid导出Excel
uses ComObj; //DBGrid:指定的DBGrid;SaveFileName:要保存的文件名 function ExportDBGrid(DBGrid: TDBGrid; SaveFile ...
- delphi cxgrid导出excel去除货币符号
版本 : devexpress 13.1.4 打开 包在ExpressExportLibary目录中. 修改FCells.SetCellDataCurrency为FCells.SetCellData ...
- Delphi 数据导出到Excel
好多办公软件特别是财务软件,都需要配备把数据导出到Excel,下面就来介绍两种数据导出方法 1.ADODB导出查询结果(此方法需要安装Excel) 2.二维表数据导出(根据Excel文件结构生成二进制 ...
- CxGrid导出Excel时清除颜色的设置
CxGrid导出Excel时清除颜色的设置 (2011-04-25 16:33:23) 转载▼ 标签: it 分类: Delphi http://www.radxe.com/?p=170 cxgrid ...
- C#使用Aspose.Cells导出Excel简单实现
首先,需要添加引用Aspose.Cells.dll,官网下载地址:http://downloads.aspose.com/cells/net 将DataTable导出Xlsx格式的文件下载(网页输出) ...
- 利用poi导出Excel
import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.r ...
- [django]数据导出excel升级强化版(很强大!)
不多说了,原理采用xlwt导出excel文件,所谓的强化版指的是实现在网页上选择一定条件导出对应的数据 之前我的博文出过这类文章,但只是实现导出数据,这次左思右想,再加上网上的搜索,终于找出方法实现条 ...
随机推荐
- 剑指Offer 42. 和为S的两个数字 (其他)
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 题目 ...
- 4.App非功能测试总结
移动app测试的另一重要方面是移动app的非功能需求.移动app在推出市场或进行进一步开发前,移动测试员有许多需要测试的问题. 早期开发阶段要进行的第一个测试应该是实用性测试.通常是由alpha用户或 ...
- linux下安装mysql解决乱码、时间差、表的大小写问题
编辑vi /etc/mysql/my.cnf,有的则是:/etc/my.cnf,加入 [client]default-character-set=utf8mb4 [mysql]default-char ...
- python 不同进程间通信
from multiprocessing import Process,Queue import os def f (qq): qq.put([42,None,'hello']) #将列表传入队列qq ...
- 基于Jmeter的 性能测试
目标:对南通大学计算机学院网站开展性能测试:(url:http://cs.ntu.edu.cn/) 首先下载jmeter的zip压缩包,解压后进入bin目录,由于我使用的系统是win10,所以要双击执 ...
- LG1337 [JSOI2004]平衡点 / 吊打XXX
题意 题目描述 如图:有n个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.图中X处就是公共的绳结.假设绳子是完全弹性的(不会造成能量损失),桌子足够高(因而重物不 ...
- PythonStudy——汇编语言 Assembly Language
汇编语言 汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指令的操 ...
- 算法分析(2)——大O和大Θ
当一个软件遇到了性能瓶颈时,首要的改进是软件功能重构,适当删除可能拖垮系统的业务需求.客户对“实时”相当感兴趣,然而又有几个使用者能够真正清楚什么地方应该是实时的?这一点同样体现在其它行业,生厂商想要 ...
- js 函数问题
replace() is not a function 1,情景描述:做项目的时候想把内容的某些字符给替换成另外一些字符 2,replace用法:replace() 方法用于在字符串中用一些字符替换另 ...
- Xtrabackup的安装与使用
Xtrabackup的安装与使用 1. XtraBackup 简介 XtraBackup(PXB) 工具是 Percona 公司用 perl 语言开发的一个用于 MySQL 数据库物理热备的备份工具, ...