回 帖 发 新 帖 刷新版面

主题:VFP的GRID特别显示和操作WORD-EXCEL示例

曾有编程爱好者多次求我帮做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 楼

第一个问题图片你发到我的邮箱,我在网上看不到,最好是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 楼

先谢谢徐军老师!

23 楼

jinlonggao

  第一个是关于调用Excel绘制剖面图的问题,X坐标默认结点是等间距的,能不能根据实际的情况确定结点间距离.
  你改变一种思考方法就海阔天空。不要只想到制表,你在EXCEL中画坐标,以单元格为纵横,可编程随意改变结点间距离,两头加一个箭头,中间的油井,根据坐标加入一个圆圈。我想与将DBF数据循环加入EXCEL中没多大区别,关键是算好,纵横坐标是换算成以单元格为准。

24 楼

徐军老师的思路确实很好,这样一来,中间的每个单元格都得算出一个中间值来.而且中间值得由两个井的值按照一定的算法计算.难度有些大.剖面线画成折线很简单,画成圆滑曲线可就难了.请问徐军老师有没有更好的思路解决?
我想若能直接设定两井间距,就可利用EXCEL本身的办法确定是折线,还是圆滑曲线.

25 楼

正确的做法是用等间距离,缩放比例,用x,y座标,地球是圆都可做成平面或切面图来。我是做染色一行,对你的不了解,不是很明白你的意思。也到网上找找

26 楼

你的范列我下下来后为何 结压错误

27 楼

1、你用版本高的WINRAR 3.40以上
2、你重新下载

28 楼

很好!顶!是我急需的。

29 楼

楼主好:我是一个新手,您的文章我还是看不大懂。请问,若是想在vfp中导入整个excel表,应该怎样做???

30 楼

收藏了.好贴.谢谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册