回 帖 发 新 帖 刷新版面

主题: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个回复)

11 楼

各位高手:
    
    小女子这厢有礼了!!

    本人纳一文科学生,怎奈学校偏偏开设了《数据库(foxpro for windows)教程》这门功课,现布置了一大堆作业题,小女子实在无从下手,经推荐来贵宝地寻求帮助。

    课本关于“编写分支程序”的习题:

   
   1 编写程序,设有一组数,找出这组数中能被6整除的数。
   2 编写程序,有一正整数存于变量X中,判断它是几位数。
   3 车站从甲地到乙地托运行李。收费规定:若行李重量小于等于50公斤,每公斤收费0.50元;若行李重量大于50公斤时,其超重部分加收0.40元,编写计算运费的程序。

12 楼

回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 楼

不错啊!厉害!

14 楼

加了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 楼



[img]http://upload.programfan.com/upfile/200511192257573.rar[/img]

16 楼

文件已上传,

17 楼

好,我也顶一下!

18 楼

徐军你好,看了你的贴子,觉得你在VFP这块造旨实在太高,而且学习能力特强.所以有两个题目在此提出,希望你能解决.
第一个是关于调用Excel绘制剖面图的问题,X坐标默认结点是等间距的,能不能根据实际的情况确定结点间距离?
第二个是电脑拨号程序的问题,网上现有资料只解决了拨号问题,拨通后能否自动转换到座机上? 能否/怎样接受对方按键信息? 电话拨通后,怎样播放录音给对方听?等等功能,用VFP能否实现?
请赐教!

19 楼

[img]e:\剖面图1.jpg[/img]
x37、X35、X24、X25、X53、X56、X57-4是油井平面分布图中一个剖面上的井位,它们之间的距离实际上是不等的。但我没法根据实际间距调整它们的距离。

20 楼


[img]e:\剖面图2.jpg[/img]

我来回复

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