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. linux网络环境配置

    第一种方法: (red hat) (1)用root身份登录,运行setup命令进入到text mode setup utility 对网络进行配置,这里可以进行ip,子网掩码,默认网关,dns的设置. ...

  2. http://jingyan.baidu.com/article/7908e85c74d85faf491ad260.html

    http://jingyan.baidu.com/article/7908e85c74d85faf491ad260.html

  3. UIALertView的基本用法与UIAlertViewDelegate对对话框的事件处理方法

    首先,视图控制器必须得实现协议UIAlertViewDelegate中的方法,并指定delegate为self,才能使弹出的Alert窗口响应点击事件. 具体代码如下: ViewController. ...

  4. 如何修改linux系统主机名称

    完成目标: 修改centos 7系统的主机名称 使用命令: hostnamectl [root@ossec-server ~]# hostnamectl --help hostnamectl [OPT ...

  5. sudo: ./sd_fusing.sh:找不到命令

    1. -----

  6. Python各种模块下载及安装配置

    方式1 在Python官网https://www.python.org/或者是github搜索进行下载 ,解压缩之后通过命令提示符进入已经解压缩文件夹根目录,输入下面的命令: python setup ...

  7. 告诉你一个真实的OpenStack:都谁在用,用来干什么?

    告诉你一个真实的OpenStack:都谁在用,用来干什么? OpenStack基金会近日发布的双年调查报告显示,开源云计算软件OpenStack正在进入主流企业市场,但该项目依然面临较难部署和管理的老 ...

  8. 对redis客户端jedis2.8.0的进一步封装

    jedis2.8.0的进一步封装: 1.序列化存储对象 2.结合spring,创建redis连接池 3.提供了基础的单个实体操作,有序list操作和一对多关系list的操作,对list提供了分页的封装 ...

  9. LeetCode Product of Array Except Self (除自身外序列之积)

    题意:给一个序列nums,要求返回一个序列ans,两序列元素个数相同,ans第i个元素就是除了nums[i]之外所有的数相乘之积. 思路:时间O(n),额外空间O(0). 第一次扫一遍,处理nums[ ...

  10. ♫【jQuery插件】图片放大镜

    JQZoom