VFP数据导出到EXCEL技术.docx
- 文档编号:26121683
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:10
- 大小:19.34KB
VFP数据导出到EXCEL技术.docx
《VFP数据导出到EXCEL技术.docx》由会员分享,可在线阅读,更多相关《VFP数据导出到EXCEL技术.docx(10页珍藏版)》请在冰豆网上搜索。
VFP数据导出到EXCEL技术
VFP数据导出到EXCEL技术
VFP数据导出到EXCEL技术
我们都知道在EXCEL中有很多很多的计算公式、灵活多变的计算方式、方便快捷的图表处理、和功能强大的VBA语言,可以说EXCEL可能是最好用的表格处理软件。
我敢说:
微软的产品中大概就EXCEL最好!
但是,怎样用Foxpro快速产生统计表,并将数据送到Excel表格中,从而代替Foxpro的报表工具呢?
我们大家都知道,在VisualFoxpro3.0及以后版本中提供了一个调用OleAutomation的函数CREATEOBJECT,用该函数可以让VisualFoxpro很方便的和其它可以提供OleAutomation服务的程序进行通讯。
而Excel更是一个标准的OleAutomation服务器程序,我们可以在前端将数据传送到后端的Excel服务程序,用后端服务程序进行表格处理,从而弥补VisualFoxpro的不足。
由于历史原因,我们作报表都习惯用Total、Count、Sum或者直接在报表中工具中计算,速度最快的大概也就是Total了,但不知道还有多少人还在坚持使用Total命令进行计算,有没有更好的计算方法呢?
当然有啦!
我在实际使用中积累有一定的经验但愿能给各位起到小小的启发。
假设有一表:
Table1是一个人员档案,里面的表结构如下:
-----字段名--类型及长度---------
编号C,2
部门C,10
姓名C,10
性别C,2
出生日期D
职务C,10
文化程度C,10
内容大概如下
TABLE1.DBF
---------------------------------编号部门姓名性别出生日期职务文化程度---------------------------------1工程部张三男1971-01-11工程师大学本科2销售部李四男1967-02-23经理大学本科3工程部王武1954-03-14技术员大学专科4总经理室赵洁雅女1975-04-05秘书硕士研究生5销售部..1977-05-09销售经理高中6工程部大文1969-03-30总工程师大学专科7销售部..1961-10-10销售经理大学专科8总经理室庄稼1961-10-10总经理大学专科当然实际的数据应该比这里多很多,要不还用统计干吗,我不过是举例说明而已。
我不知道你们在使用SQL语句时有没有用使用函数的习惯,反正我是相
当愿意在SQL中使用函数,我认为使用函数的SQL语句虽然语句长一点,但是可以让你的程序看起来更清晰、简洁。
说道这里我要感谢当初发明出IIF函数那位高人,要没有他(她)我也没有机会在这里罗嗦这么久,在后面提到的快速产生统计表中将大量的运用IIF函数。
也许你会觉得奇怪,你统计的时候用那么多IIF干吗?
别急,下面就让我慢慢的告诉你。
看看我们前面描述的表,我们可能要统计各个部门的“性别|职务|文化程度”等的分布情况,简单一点我给画了一个表个出来,可能表格更能说明白:
各部门人员分布情况表
单位:
人---------------------------------部门|男|女|本科|专科|技术人员|管理人员|秘书---------------------------------工程部|||||||销售部|||||||总经理室|||||||||||||||||||||---------------------------------上面这张表说复杂也不复杂,但是用常给的处理方法可能也要耗掉我们不少的时间,因为你不得不针对不同的项目进行单独反复的计算,可能还要生成一大堆的临时表真烦!
下面的计算公司可让你轻松完成上面的表格,当然程序还是要写的不可能什么也不动不想就能达到的,立即输入下列程序:
第一步:
转换
Select部门,;
iif(性别='男',1,0)as男,;
iif(性别='女',1,0)as女,;
iif(文化程度='大学本科',1,0)as大学本科,;
iif(文化程度='大学专科',1,0)as大学专科,;
iif(inlist(职务,'工程师','技术员','总工程师'),1,0)as技术人员,;
iif(inlist(职务,'总经理','经理','销售经理'),1,0)as管理人员,;iif(inlist(职务,'总经理','经理','销售经理'),1,0)as管理人员,;iif(inlist(职务,'秘书'),1,0)as秘书;
fromtableintocursorquery1
第二步:
转换并计算
Select部门as部门,;
sum(男)as男,;
sum(女)as女,;
sum(大学本科)as大学本科,;
sum(大学专科)as大学专科,;
sum(技术人员)as技术人员,;
sum(管理人员)as管理人员,;
sum(管理人员)as管理人员,;
sum(秘书)as秘书;
fromquery1intocursorquery1;
groupby部门
不要以为我把“fromquery1intocursorquery1”写错了,这样写的语句确实可以使用。
到这一步,统计表就计算出来了,不信用BROWSE看看。
往下面我们应该说说怎样把现在统计出的数据输出到EXCEL中了(当然什么样子的数据都可以)。
首先用CreateObject函数建立一个Excelautomation对象,程序如下:
localexcel,o
definewindowsWaitWinat0,0size10,60system;
font'timesnewroman',12;
title'提示'closefloatzoom&&用于处理提示信息的窗口
movewindowswaitWincenter
actiwindowswaitwin
setcolortow+/n
clear
excel=createobject('excel.application')
iftype('excel')='U'&&未能产生EXCEL对象
'启动EXCEL失败...'
releasewindowsWaitWin
return
endif
ReportTitle='XXXX公司人员分布情况'
ExcelFile="xls1.xls"
excel.caption=ReportTitel
selectquery1
ifnotfile(ExcelFile)
exportto(ExcelFile)typexls
endif
excel.workbooks.open(ExcelFile)
o=excel.activeworkbook.activesheet&&用对象代替这么长的一串字o.cells(1,1).value=ReportTitle
*
*第一行是标题,故从第二行开始
scanforrecno()>1&&每一行
'正在将数据转换到Excel表格中...',recno()
fori=1tofcount()&&每一列
fld=field(i)
iftype(fld)='C'&&如果字段太宽,Excel可能不能正确接受数据o.cells(recno()+3,i).value=trim(&fld)
else
o.cells(recno()+3,i).value=&fld
endif
endfor
endscan
o.cells(1,1).select
excel.ActiveWindow.windowstate=2
excel.ActiveWorkbook.save()
excel.visible=.t.
clear
startTime=time()
setcursoroff
*
*等待Excel处理完毕后再继续
*
dowhile.t.
@1,4say'已启动后台Excel表格处理程序,处理中...'
@2,4say'Ctrl+End继续处理...'
@4,4say'开始时间:
'
starttime
@5,4say'现在时间:
'
time()
&&VFP会在此等待,除非你从EXCEL中退出或按下Ctrl+End键ifinkey(0.5)=23ortype('o.name')='U'
exit
endif
enddo
setcursoron
releaseo,excel
releaseFindWindow
'处理完毕...'
=inkey(0.5)
releasewindowsWaitWin
endnote
VFP调用EXCEL的补充方法
佳帆网站工作室大文
下面是我使用VFPCALLEXCEL的部分例子:
这是本人从书本上抄的片断和我的小小经验,可以让你很方便的在VFP中调用EXCEL,所有的例程我都试验过。
用VisualFoxpro设计用Excel表格的程序
利用OLEAutomation设计Excel应用程序
Excel支持的对象说明:
(a)VBA对象:
对象名称意义
ApplicationExcel应用程序对象
WorkBooksExcel活页薄对象
(b)所使用的Method
对象名称Method执行意义
ApplicationCells设定或传回来某个网格的内容
Range传回或设定某一个范围的网格
Charts传回或设定活页簿的单一统计表
Quit结束ExcelApplication
Save激活存储文件对话框
WorkBooksAdd新增一个工作簿
ChartsAdd新增一个统计图
(c)所使用的Property
对象名称Property设定意义
ApplicationVisible是否现实再SCREEN上.T.,.F.
Value传回或者设定存储文件的内容
ActiveSheet回应ExcelApplication执行工作表对象
实例说明:
启动Excel:
MyExcel=CreateObject('Excel.Application')&&建立Excel对象
MyExcel.Visible=.T.&&让Excel对象再屏幕上显示出来
如何增加工作簿:
MyExcel.WorkBooks.Add&&在Excel对象中增加一份工作簿(WorkBook)如何在工作簿中增加Sheet(工作表)
MyExcel.Sheets.Add&&增加工作表(在当前工作簿中)
如何删除工作表
MyExcel.ActiveWorkBooks.Sheets
(1).Delete&&把工作簿中的BOOK
(1)删除
向指定的工作簿中的工作表(Sheet)中存储数据
*Excel.applicationObject
*Excel.application.ActiveWorkBookProperty
*WorkBOoksObject
*WorkBOoksObject的AddMethod.
*Sheets对象
*Sheets(Index)对象指定索引工作表
*Excel.Application对象的CellsMethod结合Value属性
Example:
CLEARALL
SETPATHTOSYS(2004)+'SAMPLESDATE'
USECUSTOMER
MYEXCEL=CREATEOBJEXT('EXCEL.APPLICATION')
MYEXCEL.VISIBLE=.T.
MYEXCEL.WORKBOOKS.ADD
MYEXCEL.ACTIVEWORKBOOK.SHEETS
(1).CELLS(1,1).VALUE='客户编号'MYEXCEL.ACTIVEWORKBOOK.SHEETS
(1).CELLS(1,2).VALUE='公司行号'SELECTCUSTOMER
R=2
C=1
GOTOTOP
FORI=1TO20
MYEXCEL.ACTIVEWORKBOOK.SHEETS
(1).CELLS(R,C).VALUE=CUSTOMER.CUST_IDMYEXCEL.ACTIVEWORKBOOK.SHEETS
(1).CELLS(R,C+1).VALUE=CUSTOMER.COMPANYR=R+1
SKIP
ENDFOR
调整单元格宽度:
MYEXCEL.ACTIVEWORKBOOK.SHEETS
(1).CELLS(1,1).columnwidth=30
调整单元格对齐方式:
MYEXCEL.ACTIVEWORKBOOK.SHEETS
(1).CELLS(1,1).horizontalalig=11为默认方式,2为左对齐,3为中对齐,4为右对齐。
如何将数据存储:
MYEXCEL.SAVE()
注:
可以用Save(FileName)指定预存储文件名,则可不用激活SAVEAS窗口如何打印表格:
MYEXCEL.ActiveWorkBook.PrintOut&&默认打印增个Sheet
如何指定打印表格:
MYEXCEL.ActiveWorkBook.PrintOut(1,1,1,.T.)&&默认打印增个SheetPrintOut有四个参数
A.数值:
表示指定的工作簿中进行打印的Sheet的开始编号
B.数值:
表示指定的工作簿中进行打印的Sheet的结束编号
C.打印分数.
D.是否进行Preview,.T.,预览,.F.打印
如何产生统计图
CURROW=MYEXCEL.ACTIVESHEET.ROWS.COUNT
RANGESTRING='A1:
'+'B'+ALLTRIM(STR(CURROW))
MYEXCEL.RANGE(RANGESTRING).SELECT
MYEXCEL.CHARTS.ADD
结束EXCEL
MYEXCEL.QUIT
EXCEL.ActiveWindow.SelectedSheets.PrintPreview&&预览打印
EXCEL.ActiveWorkbook.SaveAs("C:
MyDocumentsBook1.xls")&&另存为EXCEL.ActiveWorkbook.Close&&关闭一个工作表,如果有修改则提示EXCEL.ActiveWorkbook.Close(.t.)&&提示另存为
EXCEL.ActiveWorkbook.Close(.f.)&&关闭一个工作表不用提示是否存盘
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VFP 数据 导出 EXCEL 技术
![提示](https://static.bdocx.com/images/bang_tan.gif)