excel 的一些操作
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 的一些操作的更多相关文章
- 如何在没有安装微软Excel环境下操作Excel文件?
在以前接触的项目中,由于很多客户对微软Excel的操作比较熟练,客户经常要求系统支持对Excel文件的读写.用.NET传统方法对Excel进行读写时,往往会涉及到不同版本兼容的问题,导致在本地测试一切 ...
- 利用C#实现对excel的写操作
一.COM interop 首先我们要了解下何为COM Interop,它是一种服务,可以使.NET Framework对象能够与COM对象通信.Visual Studio .NET 通过引入面向公共 ...
- NET平台下的Excel编程|C#操作Excel|Application和ApplicationClass的联系和区别
NET平台下的Excel编程|C#操作Excel|Application和ApplicationClass的联系和区别 1. Interop含义Interop是互操作的含义.Microsoft.Off ...
- 使用Python对Excel进行读写操作
学习Python的过程中,我们会遇到Excel的读写问题.这时,我们可以使用xlwt模块将数据写入Excel表格中,使用xlrd模块从Excel中读取数据.下面我们介绍如何实现使用Python对Exc ...
- 在MFC中对Excel的一些操作
首先要在程序中加载CExcel.h和CExcel.cpp文件,这里面包装了很多函数和对Excel文件的操作,下面所有程序中的m_excel都是类CExcel的对象,如: private: _Appli ...
- vbs中对excel的常用操作
使用QTP自动化测试中,用到对excel的读写操作,这里把一些常用对excel操作的方法进行了归纳,总结.(对excel格式设置的常用操作这里没有进行总结.) Function DataToExcel ...
- PDF文件转换成Excel表格的操作技巧
我们都知道2007以上版本的Office文档,是可以直接将文档转存为PDF格式文档的.那么反过来,PDF文档可以转换成其他格式的文档吗?这是大家都比较好奇的话题.如果可以以其他格式进行保存,就可以极大 ...
- Python对excel表格的操作.
参考博客: https://blog.csdn.net/lmj19851117/article/details/78814721 ####一.excel的读取操作xlrd#### import xlr ...
- Python—对Excel进行读写操作
学习Python的过程中,我们会遇到Excel的读写问题.通过搜索得知,我们可以使用xlwt module将数据写入Excel表格,使用xlrd module从Excel读取数据.下面介绍如何实现使用 ...
- Excel操作类库最常用到的4种开源项目与MS Excel类库写操作对比分析性能
4种开源Excel读写类库与MS Excel类库写操作对比 软件开发过程中,经常需要将数据保存为.xls或.xlsx文件.之前发现微软提供的Microsoft.Office.Interop.Excel ...
随机推荐
- linux配置防火墙详细步骤(iptables命令使用方法)
通过本教程操作,请确认您能使用linux本机.如果您使用的是ssh远程,而又不能直接操作本机,那么建议您慎重,慎重,再慎重! 通过iptables我们可以为我们的Linux服务器配置有动态的防火墙,能 ...
- Qt: 绘图基础(非常简洁明了,全面)
QPainter 能绘制: point, line, rectangle, ellipse, arc, chord, polygon, pie segment, Bezier curve, QPixm ...
- WPF之小动画二
上一篇文章简单介绍了动画的定义方法和一些控制动画的方法,并没有涉及复杂属性的动画处理方式,本文将继续动画的其它方面的使用. 写在前面(对于一些动画操作时候的建议): 1.如果希望某个元素从显示到消失, ...
- 深入研究Java类加载机制
类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行. 研究类加载机制的第二个目的是让程序能动态的控制类加载,比如热部署等,提高程序的灵活性 ...
- 理解Java对象序列化(二)
关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结.此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制.在撰写本文时,既参考了Th ...
- .net 测试工具类
fluentassertions QuickStart (替换Assert ) https://github.com/dennisdoomen/fluentassertions/wiki Moq ...
- BZOJ2893: 征服王
题解: 裸的上下界最小流是有问题的.因为在添加了附加源之后求出来的流,因为s,t以及其它点地位都是平等的.如果有一个流经过了s和t,那么总可以认为这个流是从s出发到t的满足题意的流. 既然可能存在s到 ...
- spring data jpa入门学习
本文主要介绍下spring data jpa,主要聊聊为何要使用它进行开发以及它的基本使用.本文主要是入门介绍,并在最后会留下完整的demo供读者进行下载,从而了解并且开始使用spring data ...
- C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别
1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...
- 巧用CSS文件愚人节恶搞(转)
明天就是4月1日愚人节了,也就是那个可适度开玩笑.整蛊的日子了.如果你想和那些要上网的朋友或同事开个极客式玩笑,那就来试试这个国外网友Wes Bos分享的 CSS 文件吧. 一.打开浏览器的 Cust ...