主题: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个回复)
21 楼
labxj0769 [专家分:21070] 发布于 2005-11-30 13:58:00
第一个问题图片你发到我的邮箱,我在网上看不到,最好是EXCEL图表,我才好写
*****************************************
第二个问题我试验不到,提供点资料参考
串口通信实例
2002-1-3
下列代码是一个控制串口的实例:
ole1:MSCOMM32控件;
SuperTracker:是一个接在串口上的设备;
chr()中的值是该设备的指令。
para nnn
serr=0
thisform.ole1.output=chr(2)+chr(6)+chr(3)
ltime=datetime()
do whil thisform.ole1.InBufferCount=0
if datetime()-ltime>12
=msg("警告","得不到SuperTracker的控制信号。","!O")
thisform.ole1.portopen=.f.
serr=1
retu
endif
enddo
mscomm=thisform.ole1.input
if str(mscomm(1),1)+str(mscomm(2),1)+str(mscomm(3),1)<>'263'
=msg("警告","得不到SuperTracker的控制信号。","!O")
thisform.ole1.portopen=.f.
serr=1
retu
endif
do case
case nnn=1
thisform.ole1.output=chr(2)+chr(35)+chr(83)+chr(3)
case nnn=2
thisform.ole1.output=chr(2)+chr(35)+chr(85)+chr(3)
case nnn=3
thisform.ole1.output=chr(2)+chr(35)+chr(66)+chr(3)
endcase
ltime=datetime()
do whil thisform.ole1.InBufferCount=0
if datetime()-ltime>20
=msg("警告","得不到SuperTracker的控制信号。","!O")
thisform.ole1.portopen=.f.
serr=1
retu
endif
enddo
mscomm=thisform.ole1.input
if str(mscomm(1),1)+str(mscomm(2),1)+str(mscomm(3),1)<>'263'
do case
case nnn=1
=msg("警告","SuperTracker无法进卡。","!O")
case nnn=2
=msg("警告","SuperTracker卡在里面。","!O")
case nnn=3
=msg("警告","SuperTracker卡在出口处。","!O")
endcase
thisform.ole1.portopen=.f.
serr=1
retu
endif
22 楼
jinlonggao [专家分:17130] 发布于 2005-11-30 14:21:00
先谢谢徐军老师!
23 楼
labxj0769 [专家分:21070] 发布于 2005-11-30 18:59:00
jinlonggao
第一个是关于调用Excel绘制剖面图的问题,X坐标默认结点是等间距的,能不能根据实际的情况确定结点间距离.
你改变一种思考方法就海阔天空。不要只想到制表,你在EXCEL中画坐标,以单元格为纵横,可编程随意改变结点间距离,两头加一个箭头,中间的油井,根据坐标加入一个圆圈。我想与将DBF数据循环加入EXCEL中没多大区别,关键是算好,纵横坐标是换算成以单元格为准。
24 楼
jinlonggao [专家分:17130] 发布于 2005-12-01 08:26:00
徐军老师的思路确实很好,这样一来,中间的每个单元格都得算出一个中间值来.而且中间值得由两个井的值按照一定的算法计算.难度有些大.剖面线画成折线很简单,画成圆滑曲线可就难了.请问徐军老师有没有更好的思路解决?
我想若能直接设定两井间距,就可利用EXCEL本身的办法确定是折线,还是圆滑曲线.
25 楼
labxj0769 [专家分:21070] 发布于 2005-12-01 12:51:00
正确的做法是用等间距离,缩放比例,用x,y座标,地球是圆都可做成平面或切面图来。我是做染色一行,对你的不了解,不是很明白你的意思。也到网上找找
26 楼
lc0315 [专家分:0] 发布于 2005-12-13 16:38:00
你的范列我下下来后为何 结压错误
27 楼
labxj0769 [专家分:21070] 发布于 2005-12-13 19:08:00
1、你用版本高的WINRAR 3.40以上
2、你重新下载
28 楼
xmsddzwm [专家分:0] 发布于 2005-12-27 10:40:00
很好!顶!是我急需的。
29 楼
youxia433 [专家分:30] 发布于 2005-12-29 15:37:00
楼主好:我是一个新手,您的文章我还是看不大懂。请问,若是想在vfp中导入整个excel表,应该怎样做???
30 楼
fang668 [专家分:350] 发布于 2006-01-01 08:39:00
收藏了.好贴.谢谢!
我来回复