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文件,所谓的强化版指的是实现在网页上选择一定条件导出对应的数据 之前我的博文出过这类文章,但只是实现导出数据,这次左思右想,再加上网上的搜索,终于找出方法实现条 ...
随机推荐
- eval函数解析json数据时加上圆括号的原因
var temp = eval("(" + data + ")"); //解析json数据 json是以”{}”的方式来开始以及结束的,在JS中,“{}”会被当 ...
- PHP涉及的所有英文单词
PHP涉及的所有英文单词拦路虎 PHP再火,也会让一部同学心生畏惧,因为看到编辑器中那一串串英文单词,担心自己英文不好,从而对能学会PHP的决心产生动摇.其实大可不必,英文在学习PHP过程中真的连级别 ...
- webpack配置(入口出口)
const path=require('path'); //是node.js的path模块 //单入口,单出口 module.exports={ // 入口文件 entry:{ entry:'./sr ...
- Ubuntu Desktop 编译 ffmpeg (简略的写写)
关于ffmpeg FFmpeg是一個自由軟體,可以執行音訊和視訊多種格式的錄影.轉檔.串流功能,包含了libavcodec——這是一個用於多個專案中音訊和視訊的解碼器函式庫,以及libavformat ...
- JAVA常用设计模式(一、抽象工厂模式)
抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最 ...
- Arch Linux 独特的包管理器相关名词解释及用法对照
https://wiki.archlinux.org/index.php/PacmanPacman包管理器是Arch Linux的主要特色之一.它结合了简单的二进制包格式和易于使用的构建系统.pacm ...
- Python基础:一、编程语言分类
编程语言主要从以下几个角度进行分类: 编译型和解释型 静态语言和动态语言 强类型语言和弱类型语言 编译型语言和解释型语言 编译和解释的区别是什么? 编译器是把源程序的每一条语句都编译成机器语言,并保存 ...
- kali 2018.2版本运行破解版burpsuite时候的问题。
最近重装了kali虚拟机,装完之后把burp拷到里面发现运行不了了,折腾了下才解决,问题主要是由于java环境造成的. 系统默认是以java10运行burp的,但是java10好像是不支持 -X ...
- Delphi2009之TImage
TPngImage原来是SourceFroge上的一个开源项目,现在突然消失了,为什么呢?Nick 在他的博客上写到:TPNGImage被CodeGear/Embarcadero收购了,现在直接就是D ...
- 被称为“开发者神器”的GitHub,到底该怎么用?
被称为“开发者神器”的GitHub,到底该怎么用? 原文:https://baijiahao.baidu.com/s?id=1594232691312740966&wfr=spider& ...