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文件,所谓的强化版指的是实现在网页上选择一定条件导出对应的数据 之前我的博文出过这类文章,但只是实现导出数据,这次左思右想,再加上网上的搜索,终于找出方法实现条 ...
随机推荐
- 指向函数的指针 ------ 函数指针(function pointer)
函数指针: 指向函数的指针, 首先是一个指针, 这个指针指向一个函数. 函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个指针,它指向函数的代码.一个函数的地址是该函数的进入点,也是调用函数 ...
- LINUX系统配置
LINUX系统配置 Linux 安装jdk方法; Linux Tomcat 安装与配置 Linux redis 安装与配置 (例1) Linux redis安装配置(例2) NGINX 安装 Linu ...
- C# 实现CRC16校验
前言 本文将使用一个NuGet公开的组件技术来实现CRC16校验功能,提供了一些简单的API,来方便的实现. 在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控 ...
- cocos2dx开发之util类&方法——字符串替换
/*将originStr字符串中的searchStr替换成replaceStr*/ std::string str_replace(std::string originStr,std::string ...
- PythonStudy——汇编语言 Assembly Language
汇编语言 汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指令的操 ...
- Python调用ffpmeg和ffprobe处理视频文件
需求: 运营有若干批次的视频.有上千个,视频文件,有mp4格式的,有ts格式的 现在有需要去掉视频文件片头和片尾的批量操作需求. 比如 文件夹A下面的视频去掉片尾10秒 文件夹B下面的视频去掉片头6秒 ...
- Jenkins 配置 FindBugs,Checkstyle,PMD 实现代码的静态检查 (14)
一.插件介绍 FindBugs:静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.利用这个工具,就可以在不实际运行程序的情况对软件进行分析.它可以帮助改进代码的 ...
- Hbase rowkey设计+布隆过滤器+STORE FILE & HFILE结构
Rowkey设计 Rowkey设计原则 Rowkey设计应遵循以下原则: 1.Rowkey的唯一原则 必须在设计上保证其唯一性.由于在HBase中数据存储是Key-Value形式,若HBase中同一表 ...
- c# 判断时间是否在 某一时间段内
protected bool getTimeSpan(string timeStr) { //判断当前时间是否在工作时间段内 string _strWorkingDayAM = "08:30 ...
- LiveBindings --- 把对象之间的属性绑定起来
有了 FireMonkey 框架,它不同于 VCL ,以往的数据感知控件不能放在它上面,所以 XE2 提供了 LiveBindings 功能作为替代方案.另外它也是个通用的基础设施,同样可用于传统的V ...