以OLE方式建立与Excel连接
unit UExcel_Sum; interface //在接口部分定义使用系统的程序单元文件 uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, DBTables, StdCtrls, Buttons, Grids, DBGrids, OleServer, Excel2000,ExtCtrls, DBCtrls; //如果安装Delphi时,指定的不是Office 2000(如Office 97) //则应指定Excel97,而不是Excel2000 type TForm1 = class(TForm) //如下定义本窗体使用的组件 TitleLabel: TLabel; DataSource1: TDataSource; Query1: TQuery; //查询组件,完成数据库查询和工作量统计 DBGrid1: TDBGrid; Query1SUMOF: TFloatField; Query1SUMOF2: TFloatField; Query1SUMOF3: TFloatField; Query1BDEDesigner: TStringField; YearComboBox: TComboBox; //定义保存动态年度的组合框,供用户选择 SeasonComboBox: TComboBox; //定义供用户选择季度、半年、全年的组合框 SeasonBtn: TBitBtn; PrintBtn: TBitBtn; YearBtn: TBitBtn; CloseBtn: TBitBtn; DBNavigator1: TDBNavigator; procedure CloseBtnClick(Sender: TObject); //定义事件处理过程, procedure FormCreate(Sender: TObject); procedure YearComboBoxChange(Sender: TObject); procedure SeasonComboBoxChange(Sender: TObject); procedure PrintBtnClick(Sender: TObject); private { Private declarations } //定义私有的全局变量,供各过程使用 year1,date1:string; month1,month2:string; XLApp:Variant; public { Public declarations } end; var Form1: TForm1; implementation uses ComObj; {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); //在窗体建立的过程中,获取计算机系统的当前时钟,并存入组合框中形成年度选择串 var Year, Month, Day:Word; //定义年、月、日变量 Present:TDateTime; i:integer; begin Present:= Now; //使用Now函数,获取系统日期和时间 DecodeDate(Present, Year, Month, Day); //分解从系统获取的时间,即拆成年、月、日时间串 YearComboBox.items.clear; YearComboBox.itemindex:=0; YearComboBox.text:=inttostr(Year); //指定当前年份 for i:=1 to 6 do begin YearComboBox.items.add(inttostr(year)); //形成年度下拉列表,从当前时间开始,最多6年 year:=year-1; end; year1:=YearComboBox.text; //设置当前年份 month1:='01/01/'; month2:='12/31/'; date1:=''''+month1+year1+''' and '''+month2+year1+''''; //形成查询条件的时间区间, Query1.Close; Query1.sql.clear; Query1.sql.Add('Select 名称,sum(数量),sum(次数),sum(参加人次) from GongZuoLiang where 时间 between '+date1+' group by 名称 order by 名称'); //形成查询统计的SQL语句 Query1.open; //从数据库统计数据 end; procedure TForm1.SeasonComboBoxChange(Sender: TObject); //当用户重新选择季度后,调用本过程。 begin if SeasonComboBox.text='一季度' then //当用户选择季度后,确定查询的月、日起止区间 begin month1:='01/01/'; month2:='03/31/'; end; if SeasonComboBox.text='二季度' then begin month1:='04/01/'; month2:='06/30/'; end; if SeasonComboBox.text='三季度' then begin month1:='07/01/'; month2:='09/30/'; end; if SeasonComboBox.text='四季度' then begin month1:='10/01/'; month2:='12/31/'; end; if SeasonComboBox.text='上半年' then //选择上半年后,确定查询的起止日期 begin month1:='01/01/'; month2:='06/30/'; end; if SeasonComboBox.text='全年' then //选择全年后,确定查询的起止日期 begin month1:='01/01/'; month2:='12/31/'; end; date1:=''''+month1+year1+''' and '''+month2+year1+''''; //重新合成动态查询的年、月、日的起止区间 Query1.Close; Query1.sql.clear; Query1.sql.Add('Select 名称,sum(数量),sum(次数),sum(参加人次) from GZLiang where 时间 between '+date1+' group by 名称 order by 名称'); //根据新的条件,生成新的SQL语句 Query1.open; end; procedure TForm1.YearComboBoxChange(Sender: TObject); //当用户重新选择年度后,调用本过程。 begin year1:=YearComboBox.text; date1:=''''+month1+year1+''' and '''+month2+year1+''''; //根据用户选择的年度,重新生成查询条件 Query1.Close; Query1.sql.clear; Query1.sql.Add('Select 名称,sum(数量),sum(次数),sum(参加人次) from GongZuoLiang where 时间 between '+date1+' group by 名称 order by 名称'); //根据新的查询条件,动态生成新的SQL语句 Query1.open; end; procedure TForm1.PrintBtnClick(Sender: TObject); {当用户单击打印按钮后,调用该过程。其功能是:根据当前的查询条件,重新从数据库中查询和统计各项目的工作量,并将其存入Excel中,此外,可根据用户的需要对其进行修改、保存、打印等操作。} var i,j,k:integer; Range1:Variant; begin Query1.close; Query1.Open; j:=Query1.RecordCount; //获取查询和统计的记录总数,如果查询记录数>0,则启动Excel,拷贝数据输出和报表 if j>0 then begin k:=j+1; XLApp:=CreateOleObject('Excel.Application'); //建立一个Excel应用的OLE对象 XLApp.Visible:=true; //使得Excel对象可视 XLApp.Application.caption:='工作量统计'; //设置Excel应用的标题 XLApp.Workbooks.add(xlWBatWorkSheet); //在Excel中,增加一个空白页 XLApp.Workbooks[1].WorkSheets[1].name:='工作量统计'; //设置工作簿中的工作表的名字 Range1:=XLApp.Workbooks[1].WorkSheets['工作量统计'].Range['A1:E'+inttostr(k)]; //设置工作表的存取范围 Range1.Borders.LineStyle:=xlContinuous; //在工作表的范围内,增加表格线 //如下几行是设置工作表的表头 XLApp.Range('A1'):=' 序号 '; XLApp.Range('B1'):=' 项 目 名 称 '; XLApp.Range('C1'):=' 数量 '; XLApp.Range('D1'):=' 次数'; XLApp.Range('E1'):='参加人次'; for i:=2 to j+1 do //第1行为标题,从第2行起为表格的正式内容一次循环,填写一行表格的数据 begin XLApp.cells[i,1]:=IntToStr(i-1); XLApp.cells[i,2]:=Query1.fields[0].AsString; //依次将字段值存入表中的各列 XLApp.cells[i,3]:=Query1.fields[1].value; XLApp.cells[i,4]:=Query1.fields[2].value; XLApp.cells[i,5]:=Query1.fields[3].value; Query1.next; end; //for i:=2 XLApp.Workbooks[1].WorkSheets[1].printout; //完成表格生成后,打印输出 end; // if j>0 XLApp.quit; //释放OLE对象的Excel end; procedure TForm1.CloseBtnClick(Sender: TObject); //当用户单击了关闭按钮后,调用该过程 begin close; //关闭窗体,终止应用程序的执行 end; end.
以OLE方式建立与Excel连接相关推荐
- VS用OLE方式对Excel进行读写操作
OLE技术(Object Linking and Embedding,对象连接与嵌入)OLE是一种面向对象的技术,利用这种技术可开发可重复使用的软件组件(COM). 一.Excel对象模型. Appl ...
- 以OLE方式读写EXCEL的C++类【转载】
◆C++中的[L"https://msdn.microsoft.com/library"]. 这个是C++标准规定的写法.详见以下链接: http://bbs.csdn.net/t ...
- LINQ TO SQL中还是用传统的连接串方式建立DbContext更好些
首先,在LINQTOSQL中可以这样建立一个dbcontext private TEntity GetOriginal(TEntity entity) { ...
- 通过OleDB连接方式,访问Access,Excel数据库.
通过OleDB连接方式,访问Access,Excel数据库. OleDbConnectionStringBuilder oleConStr = new OleDbConnectionStringBui ...
- SSIS 错误代码 DTS_E_OLEDB_EXCEL_NOT_SUPPORTED 没有可用的 OLE DB 访问接口 SSIS 的 64 位版本中不支持 Excel 连接管理器...
在Server 2008 R2的系统中,使用SQL安装包的BIDS(vs 08 shell)开发SSIS,按例子建好一个后,提示" SSIS 错误代码 DTS_E_OLEDB_EXCEL_N ...
- 一个excel文档里复制黏贴另外表单跟着变动_利用Excel连接Power BI,实现PPT报告自动输出...
文/HALI就职于汽车行业战略部门 专注汽车市场信息情报收集和分析 因为工作需要,每月周期性的更新数据和撰写PPT 报告成为繁重的劳动.结果是很多时间花费在数据处理上,真正的分析工作,往往只能草草收 ...
- excel 连接 mysql_使用 Excel 进行连接 - Azure SQL Database SQL Managed Instance | Microsoft Docs...
您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 将 Excel 连接到 ...
- 【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—实践篇
1. 查看系统网络配置和当前TCP状态 在定位并处理应用程序出现的网络问题时,了解系统默认网络配置是非常必要的.以x86_64平台Linux kernelversion 2.6.9的机 ...
- ESP8266 wifi模块连接上了热点之后 与服务器建立了tcp连接并进入了透传模式,如果关掉热点wifi模块的tcp连接没有切断,为什么
ESP8266 wifi模块连接上了热点之后 与服务器建立了tcp连接并进入了透传模式,如果关掉热点wifi模块的tcp连接没有切断,为什么? 这个是很多开发者在第一次使用ESP8266模块是会出现的 ...
最新文章
- MLPerf基准测试再发榜,浪潮AI服务器刷新18项纪录
- 编写规范--Web前端开发修炼之道
- 最大公约数(Greatest_Common_Divisor)
- SAP Fiori里两种锁机制(lock)的实现
- ASP.NET Core 2.0 : 二. 开发环境
- Strom小实例,大小写转换
- java 正则表达式 替换括号,Java正则表达式:如何替换方括号内的所有字符?
- 10 有关业务/事件类型WQ在年2021的号码范围不存在
- 用winformz时间格式不正确_霜冻不可怕,用生态防寒布正确预防减少损失
- Web前端三大主流框架是什么?Web前端前景与就业形势
- (8)Powershell中变量的定义和使用
- OO思想(只留做自己看理解)
- 探索在Android中使用Emoji Font的方法
- WIN7护眼颜色设置
- CQC认证与3C认证的区别是什么
- 什么叫智能服务器sn,一篇文章告诉你何为服务器端车牌智能识别
- 手机打开html没有图片,网页看不到图片怎么办?图片打不开的解决办法
- 微信公众号页面中监听手机“返回”,并回到公众号里
- 不会用PS、Excel更改证件照颜色没关系,用Word更改不用1分钟!
- 星球前线 | Libra最大的竞争对手是什么?Calibra高管给出答案