unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls,
System.DateUtils,
cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxContainer,
cxEdit, dxCore, cxDateUtils, dxSkinsCore, dxSkinBlack, dxSkinBlue,
dxSkinBlueprint, dxSkinCaramel, dxSkinCoffee, dxSkinDarkRoom, dxSkinDarkSide,
dxSkinDevExpressDarkStyle, dxSkinDevExpressStyle, dxSkinFoggy,
dxSkinGlassOceans, dxSkinHighContrast, dxSkiniMaginary, dxSkinLilian,
dxSkinLiquidSky, dxSkinLondonLiquidSky, dxSkinMcSkin, dxSkinMoneyTwins,
dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green,
dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinOffice2010Black,
dxSkinOffice2010Blue, dxSkinOffice2010Silver, dxSkinOffice2013White,
dxSkinPumpkin, dxSkinSeven, dxSkinSevenClassic, dxSkinSharp, dxSkinSharpPlus,
dxSkinSilver, dxSkinSpringTime, dxSkinStardust, dxSkinSummer2008,
dxSkinTheAsphaltWorld, dxSkinsDefaultPainters, dxSkinValentine, dxSkinVS2010,
dxSkinWhiteprint, dxSkinXmas2008Blue, cxTextEdit, cxMaskEdit, cxDropDownEdit,
cxCalendar, System.IniFiles, System.Win.ComObj, db, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase,
IdMessageClient, IdSMTPBase, IdSMTP, IdMessage, IdAttachment,
IdAttachmentFile, ShellAPI, System.Zip;

type
Tform1 = class(TForm)
btnSendEmail: TButton;
Label1: TLabel;
beginDate: TcxDateEdit;
endDate: TcxDateEdit;
smtp: TIdSMTP;
msg: TIdMessage;
procedure btnSendEmailClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
ini: TIniFile;
excelApp: Variant;
procedure DataSetToExcel(cds: TDataSet; sheet: Variant);
// function GetFieldLabel(const fieldName: string): string;
public
{ Public declarations }
end;

var
form1: Tform1;

implementation

{$R *.dfm}

uses untDB;

procedure Tform1.btnSendEmailClick(Sender: TObject);
var
ini: TIniFile;
shopname, filename, zipfile: string;
zip: TZipFile;
begin
try
excelApp := CreateOleObject('Excel.Application');
except
MessageDlg('请安装EXCEL', mtInformation, [mbOK], 0);
Exit;
end;
excelApp.Visible := False;
excelApp.WorkBooks.Add;
excelApp.WorkBooks[1].WorkSheets.Add;
excelApp.WorkBooks[1].WorkSheets.Add;
excelApp.WorkBooks[1].WorkSheets[1].name := '收款报表';
excelApp.WorkBooks[1].WorkSheets[2].name := '畅销商品报表';
excelApp.WorkBooks[1].WorkSheets[3].name := '滞销商品报表';
excelApp.WorkBooks[1].WorkSheets[4].name := '客流量报表';
excelApp.WorkBooks[1].WorkSheets[5].name := '销售报表';

ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'config.ini');
try
shopname := ini.ReadString('shop', 'shopName', '');
finally
ini.Free;
end;

// 收款报表
frmDB.qry.Close;
frmDB.qry.SQL.Clear;
frmDB.qry.SQL.Text := 'execute sp_report_saleDate ' +
QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', beginDate.Date)) + ',' +
QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', endDate.Date));
frmDB.qry.open;
if not frmDB.qry.IsEmpty then
begin
DataSetToExcel(frmDB.qry, excelApp.WorkBooks[1].WorkSheets[1]);
end;

// 畅销商品报表
frmDB.qry.Close;
frmDB.qry.SQL.Clear;
frmDB.qry.SQL.Text := 'execute sp_report_saleIndex ' +
QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', beginDate.Date)) + ',' +
QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', endDate.Date));
frmDB.qry.open;
if not frmDB.qry.IsEmpty then
begin
DataSetToExcel(frmDB.qry, excelApp.WorkBooks[1].WorkSheets[2]);
end;

// 滞销商品报表
frmDB.qry.Close;
frmDB.qry.SQL.Clear;
frmDB.qry.SQL.Text := 'execute sp_report_saleIndex2 ' +
QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', beginDate.Date)) + ',' +
QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', endDate.Date));
frmDB.qry.open;
if not frmDB.qry.IsEmpty then
begin
DataSetToExcel(frmDB.qry, excelApp.WorkBooks[1].WorkSheets[3]);
end;

// 客流量报表
frmDB.qry.Close;
frmDB.qry.SQL.Clear;
frmDB.qry.SQL.Text := 'execute sp_report_tcac ' +
QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', beginDate.Date)) + ',' +
QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', endDate.Date));
frmDB.qry.open;
if not frmDB.qry.IsEmpty then
begin
DataSetToExcel(frmDB.qry, excelApp.WorkBooks[1].WorkSheets[4]);
end;

// 销售报表
try
frmDB.qry.Close;
frmDB.qry.SQL.Clear;
frmDB.qry.SQL.Text := 'execute sp_report_all ' +
QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', beginDate.Date)) + ',' +
QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', endDate.Date));
frmDB.qry.open;
if not frmDB.qry.IsEmpty then
begin
DataSetToExcel(frmDB.qry, excelApp.WorkBooks[1].WorkSheets[5]);
end;
except
on E: Exception do
ShowMessage(E.Message);
end;

// 保存为EXCEL文件
filename := ExtractFilePath(Application.ExeName) + shopname + '销售数据.xls';
if FileExists(filename) then
DeleteFile(filename);
excelApp.ActiveWorkbook.SaveAs(filename);
excelApp.ActiveWorkbook.Saved := true;
excelApp.WorkBooks.Close;
excelApp.Quit;

// 压缩excel文件
zipfile := ExtractFilePath(Application.ExeName) + shopname + '销售数据.zip';
if FileExists(zipfile) then
DeleteFile(zipfile);
zip := TZipFile.Create;
zip.Open(zipfile, TZipMode.zmWrite); //准备要压缩为 001.zip
zip.Add(filename, shopname + '销售数据.xls'); //参1是要压缩的文件; 参2是要使用的文件名; 参数3可指定压缩算法
zip.Free;

// 发送电子邮件
ShellExecute(handle, 'open', PChar(ExtractFilePath(Application.ExeName) +
'gmail.vbs'), nil, nil, SW_HIDE);
end;

procedure Tform1.DataSetToExcel(cds: TDataSet; sheet: Variant);
var
j, x: integer;

begin
// 标题行
for j := 0 to cds.FieldCount - 1 do
begin
sheet.Cells[1, j + 1].Value := ini.ReadString('fields', cds.Fields[j].FieldName, cds.Fields[j].FieldName);
end;

// 设置为文本格式
sheet.Cells.NumberFormatLocal := '@ ';

// 导数据
cds.DisableControls;
try
x := 2;
cds.First;
while not cds.Eof do
begin
for j := 0 to cds.FieldCount - 1 do
begin
sheet.Cells[x, j + 1] := Trim(cds.Fields[j].Text);
end;
x := x + 1;
cds.Next;
end;
finally
cds.EnableControls;
end;
end;

procedure Tform1.FormDestroy(Sender: TObject);
begin
ini.Free;
end;

procedure Tform1.FormShow(Sender: TObject);
begin
beginDate.Date := StartOfTheDay(Date);
endDate.Date := EndOfTheDay(Date);
ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'config.ini');
end;

end.

excel 的一些操作的更多相关文章

  1. 如何在没有安装微软Excel环境下操作Excel文件?

    在以前接触的项目中,由于很多客户对微软Excel的操作比较熟练,客户经常要求系统支持对Excel文件的读写.用.NET传统方法对Excel进行读写时,往往会涉及到不同版本兼容的问题,导致在本地测试一切 ...

  2. 利用C#实现对excel的写操作

    一.COM interop 首先我们要了解下何为COM Interop,它是一种服务,可以使.NET Framework对象能够与COM对象通信.Visual Studio .NET 通过引入面向公共 ...

  3. NET平台下的Excel编程|C#操作Excel|Application和ApplicationClass的联系和区别

    NET平台下的Excel编程|C#操作Excel|Application和ApplicationClass的联系和区别 1. Interop含义Interop是互操作的含义.Microsoft.Off ...

  4. 使用Python对Excel进行读写操作

    学习Python的过程中,我们会遇到Excel的读写问题.这时,我们可以使用xlwt模块将数据写入Excel表格中,使用xlrd模块从Excel中读取数据.下面我们介绍如何实现使用Python对Exc ...

  5. 在MFC中对Excel的一些操作

    首先要在程序中加载CExcel.h和CExcel.cpp文件,这里面包装了很多函数和对Excel文件的操作,下面所有程序中的m_excel都是类CExcel的对象,如: private: _Appli ...

  6. vbs中对excel的常用操作

    使用QTP自动化测试中,用到对excel的读写操作,这里把一些常用对excel操作的方法进行了归纳,总结.(对excel格式设置的常用操作这里没有进行总结.) Function DataToExcel ...

  7. PDF文件转换成Excel表格的操作技巧

    我们都知道2007以上版本的Office文档,是可以直接将文档转存为PDF格式文档的.那么反过来,PDF文档可以转换成其他格式的文档吗?这是大家都比较好奇的话题.如果可以以其他格式进行保存,就可以极大 ...

  8. Python对excel表格的操作.

    参考博客: https://blog.csdn.net/lmj19851117/article/details/78814721 ####一.excel的读取操作xlrd#### import xlr ...

  9. Python—对Excel进行读写操作

    学习Python的过程中,我们会遇到Excel的读写问题.通过搜索得知,我们可以使用xlwt module将数据写入Excel表格,使用xlrd module从Excel读取数据.下面介绍如何实现使用 ...

  10. Excel操作类库最常用到的4种开源项目与MS Excel类库写操作对比分析性能

    4种开源Excel读写类库与MS Excel类库写操作对比 软件开发过程中,经常需要将数据保存为.xls或.xlsx文件.之前发现微软提供的Microsoft.Office.Interop.Excel ...

随机推荐

  1. BZOJ 3747 POI2015 Kinoman

    因为上午没有准备够题目,结果发现写完这道题没题可写了QAQ 又因为这道题范围是100w,我写了发线段树,以为要T,上午就花了一个小时拼命卡常数 结果下午一交居然过了QAQ 我们考虑枚举L,求最大R使得 ...

  2. SQLite入门与分析(三)---内核概述(2)

    写在前面:本节是前一节内容的后续部分,这两节都是从全局的角度SQLite内核各个模块的设计和功能.只有从全局上把握SQLite,才会更容易的理解SQLite的实现.SQLite采用了层次化,模块化的设 ...

  3. 数据库存储安全之(MD5+盐)加密

    一般系统数据库密码加密方式: MD5后存入数据库 SHA1 Hash后存入数据库 缺点:黑客可以通过密码暴力破解获取密码信息,具体做法是将常用密码进行Hash后做成一个字典, 破解的时候,只需要查字典 ...

  4. 退出myeclipse 8.5配置中心

    用myeclipse 8.5没多久,进入软件中心下载插件,找不到退出按钮,唉,木想到就是一图标.

  5. itoa函数的实现(不同进制)

    2013-07-08 17:12:30 itoa函数相对于atoi函数,比较简单,还是要注意考虑的全面. 小结: 一下几点需要考虑: 对负数,要加上负号: 考虑不同进制,根据要求进行处理:对不同的进制 ...

  6. android 电容屏(三):驱动调试之驱动程序分析篇

    平台信息: 内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博 ...

  7. python中的commands模块,执行出错:'{' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    最近发现了python的commands模块,查看了下源码,使用的popen封装的,形成三个函数getstatus(), getoutput(), getstatusoutput() 源码如下: de ...

  8. WPF程序中处理Windows消息

    首先通过WindowInteropHelper类,我们可以获取WPF Window的Handle. WindowInteropHelper helper = new WindowInteropHelp ...

  9. 阿里云主机安装Memcached

    http://www.zyuns.com/?page_id=354 前言最近发现阿里云主机在使用中,并发访问量稍大,页面加载速度就很慢.于是学习了一些服务器优化的文章,决定安装Memcached,优化 ...

  10. apache开源项目--OpenMeetings

    OpenMeetings是一个多语言可定制的视频会议和协作系统.它支持音频.视频,能让你查看每个与会者的桌面.OpenMeetings还包含一个白板,通过白板可以导入各种格式的图片和涂鸦. 在线演示: ...