主题:VFP的GRID特别显示和操作WORD-EXCEL示例
labxj0769
[专家分:21070] 发布于 2005-11-30 18:43:00
曾有编程爱好者多次求我帮做Word模板,填写资料。当时也找不到资料。只告诉他
要写资料的那一页用EXCEL,因EXCEL的参考资料多。后见他在多个论坛求助,未见解决。
刚好闲点,花点时间研究了一下WORD,终于知道怎样如控制EXCEL一样来控制WORD。
写成例子贴出来与大家共享,都有两方法,一是直接用代码编程创建文档,另是在WORD或
EXCEL中作好模板,用模板创建,添写资料。我中意后者。
另附 GRID 模仿DELPHI的显示
总结以下几点,就可更加发挥:
一、要实现的目的,先在WORD或EXCEL中录制宏。然后根据宏来修改做成VFP的代码。
二、对象的属性不同。
a、WORD ,
1、 凡有selection的为应用程序属性
OleWord=CREATEOBJECT('word.application') &&创建word目标
OleWord.Selection
**** Word多数用它**********
OleWord.quit &&退出word
2、OleWord.Documents
OleWord.Documents.add() &&增加新的word文档,有路径文件名是以它作模板打开
OleWord.Documents.open("D:\test.doc") &&打开指定的文件
OleWord.Documents.close(.F.) &&关闭所有打开的文档不保存,不要.F.,调出对话框
3、页面设置OleWord.ActiveDocument.PageSetup
4、OleWord.ActiveDocument
OleWord.ActiveDocument.Save &&保存
OleWord.ActiveDocument.SaveAs("D:\test.doc") &&最简单的另存
OleWord.ActiveDocument.close &&关闭当前word文档
b、EXCEL
1、凡有selection的为应用程序属性
XLApp=CREATEOBJECT('Excel.application')
XLApp.Selection
XLApp.quit &&退出Excel
2、XLApp.WorkBooks
XLApp.WorkBooks.Add( ) &&增加新的EXCEL,加有路径文件名是以它作模板打开
XLApp.Workbooks.Open("D:\test.xls") && 打开指定工作簿
XLApp.Workbooks.close(.F.) &&关闭所有打开的工作簿不保存,不要.F.,调出对话框
3、页面设置 XLApp.ActiveSheet.PageSetup
4、XLApp.ActiveSheet
********Excel多数用它与Word不同**********
5、XLApp.ActiveWorkbook
XLApp.ActiveWorkbook.Save &&保存
XLApp.ActiveWorkbook.SaveAs("D:\ABC\22.xls") &&另存为
XLApp.ActiveWorkbook.close &&关闭当前工作簿
三、WORD/EXCEL宏与VFP表示方法不同
a、WORD打开
OleWord.Documents.open("D:\test.doc",.F.,.F.,.F.,'456','123',.F.,'','',.F.) &&根据宏函数改,与保存不同方式,456为打开密码,123为只读密码
*宏函数 Documents.Open FileName:="temp.doc", ConfirmConversions:=False, ReadOnly:= _
* False, AddToRecentFiles:=False, PasswordDocument:="456", PasswordTemplate _
* :="123", Revert:=False, WritePasswordDocument:="123", WritePasswordTemplate _
* :="", Format:=wdOpenFormatAuto
b、EXCEL只读保护
XLApp.ActiveSheet.protect('123') &&用123密码锁起只读
XLApp.ActiveSheet.unprotect('123') &&用123密码解锁
*宏函数(用123密码只读锁) ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
* 用123密码解锁 ActiveSheet.Unprotect
徐 军 xj@meyerdyeing.com
2005/11/06
示例:
http://upload.programfan.com/upfile/20051122194626.rar
回复列表 (共37个回复)
11 楼
phph [专家分:0] 发布于 2005-11-16 11:13:00
各位高手:
小女子这厢有礼了!!
本人纳一文科学生,怎奈学校偏偏开设了《数据库(foxpro for windows)教程》这门功课,现布置了一大堆作业题,小女子实在无从下手,经推荐来贵宝地寻求帮助。
课本关于“编写分支程序”的习题:
1 编写程序,设有一组数,找出这组数中能被6整除的数。
2 编写程序,有一正整数存于变量X中,判断它是几位数。
3 车站从甲地到乙地托运行李。收费规定:若行李重量小于等于50公斤,每公斤收费0.50元;若行李重量大于50公斤时,其超重部分加收0.40元,编写计算运费的程序。
12 楼
labxj0769 [专家分:21070] 发布于 2005-11-16 13:10:00
回11楼,见以下,复制到prg程序中运行
*1编写程序,设有一组数,找出这组数中能被6整除的数
CLEAR
input "请输入你创建的数组数" to nArr
DIMENSION Atest(nArr)
FOR i=1 TO nArr
input "请输入你创建的数组的第"+ALLTRIM(STR(i))+"个数:" to Atest[i]
ENDFOR
cMess="你输入的数组,被6整除的为:"
FOR j=1 TO nArr
IF MOD(Atest[j],6)=0
cMess=cMess+CHR(13)+ ;
"第"+ALLTRIM(STR(j))+"组,数据为"+ ALLTRIM(STR(Atest[j]))
ENDIF
ENDFOR
MESSAGEBOX(cMess,64,"结果提示")
*2 编写程序,有一正整数存于变量X中,判断它是几位数。
CLEAR
input "请输入一个整数" to nDigit
cDigit=ALLTRIM(STR(nDigit))
MESSAGEBOX("你输入的整数"+cDigit+"为:"+ALLTRIM(STR(LEN(cDigit)))+"位",64,"结果提示")
*3 车站从甲地到乙地托运行李。收费规定:若行李重量小于等于50公斤,每公斤收费0.50元;若行李重量大于50公斤时,其超重部分加收0.40元,编写计算运费的程序。
CLEAR
input "请输入行李重量公斤数:" to nDigit
nMoney=IIF(nDigit<=50,nDigit*0.5,50*0.5+(nDigit-50)*(0.5+0.4))
MESSAGEBOX("收费规定:若行李重量小于等于50公斤,每公斤收费0.50元;"+CHR(13)+ ;
"若行李重量大于50公斤时,其超重部分加收0.40元"+CHR(13)+ ;
"你的行李重量"+ALLTRIM(STR(nDigit))+"公斤,收费金额为:"+ALLTRIM(STR(nMoney))+"元",64,"结果提示")
13 楼
sianfox [专家分:1930] 发布于 2005-11-16 18:30:00
不错啊!厉害!
14 楼
labxj0769 [专家分:21070] 发布于 2005-11-18 21:19:00
加了VFP转EXCEL图表
SELECT TOP 11 date,high FROM stock ORDER BY date INTO CURSOR curtemp &&选择数据生成临时表
SELECT curtemp
COPY TO stock.xls TYPE XL5 &&生成EXCEL表
XLApp=CREATEOBJECT('Excel.application') &&创建EXCEL应用程序
XLApp.Visible = .T. && 显示Excel窗口
strFile=alltr( SYS(5) + SYS(2003) +"\stock.xls")
XLApp.Workbooks.Open(strFile) && 打开指定工作簿
WITH XLApp
.Range("A1:B12").Select &&选定范围作图
.Charts.Add &&作图
.ActiveChart.Location(2,'stock') &&作图为对象插入
.ActiveChart.HasDataTable =.F.
.ActiveSheet.Shapes("图表 1").IncrementLeft(-43.5) &&图表左移
.ActiveSheet.Shapes("图表 1").IncrementTop(-66) &&图表上移
.ActiveSheet.ChartObjects("图表 1").Activate &&图表激活
.ActiveChart.ChartArea.Select &&图表面积选择
.ActiveSheet.Shapes("图表 1").Width=.ActiveSheet.Shapes("图表 1").Width-0.5 &&减少宽0.5cm
.ActiveSheet.Shapes("图表 1").Height=.ActiveSheet.Shapes("图表 1").Height+40 &&增加高
.ActiveSheet.Shapes("图表 1").IncrementLeft(1.5)
.ActiveSheet.Shapes("图表 1").IncrementTop(-10.5)
.Range("A13").Select &&选择单元格
.ActiveSheet.PrintPreview &&打印浏览
* .ActiveSheet.PrintOut &&打印输出工作表
ENDWITH
15 楼
labxj0769 [专家分:21070] 发布于 2005-11-18 21:22:00
图
[img]http://upload.programfan.com/upfile/200511192257573.rar[/img]
16 楼
labxj0769 [专家分:21070] 发布于 2005-11-22 19:48:00
文件已上传,
17 楼
jianzho [专家分:7560] 发布于 2005-11-23 20:56:00
好,我也顶一下!
18 楼
jinlonggao [专家分:17130] 发布于 2005-11-29 09:15:00
徐军你好,看了你的贴子,觉得你在VFP这块造旨实在太高,而且学习能力特强.所以有两个题目在此提出,希望你能解决.
第一个是关于调用Excel绘制剖面图的问题,X坐标默认结点是等间距的,能不能根据实际的情况确定结点间距离?
第二个是电脑拨号程序的问题,网上现有资料只解决了拨号问题,拨通后能否自动转换到座机上? 能否/怎样接受对方按键信息? 电话拨通后,怎样播放录音给对方听?等等功能,用VFP能否实现?
请赐教!
19 楼
jinlonggao [专家分:17130] 发布于 2005-11-30 08:24:00
[img]e:\剖面图1.jpg[/img]
x37、X35、X24、X25、X53、X56、X57-4是油井平面分布图中一个剖面上的井位,它们之间的距离实际上是不等的。但我没法根据实际间距调整它们的距离。
20 楼
jinlonggao [专家分:17130] 发布于 2005-11-30 08:29:00
[img]e:\剖面图2.jpg[/img]
我来回复