飞艳小屋

程序--人生--哲学___________________欢迎艳儿的加入

BlogJava 首页 新随笔 联系 聚合 管理
  52 Posts :: 175 Stories :: 107 Comments :: 0 Trackbacks
曾有编程爱好者多次求我帮做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

发表时间:2005-11-5 14:34:00   

  1 楼  

部分代码:
*用WORD创建新文档,再根据DBF的资料创建自几所需要的表格文档

Thisform.chnagedbf  &&转表查询生成新表、公用变量k,arrcolor[j,k],arrWash[1],arrCrock[1]
   WAIT windows("起动WORD制做文档,请稍等....") NOWAIT AT MROW(Thisform.Name,3),MCOL(Thisform.Name,3)
OleWord=CREATEOBJECT('word.application')  &&创建word目标
OleWord.Visible=.F.  &&word隐藏,为.F.可在后台操作
OleWord.Documents.add() &&增加新的word文档
*-- 页面设置
WITH OleWord.ActiveDocument.PageSetup
*1.设置顶边距为2厘米
      .TopMargin=2/0.035
*2.设置底边距为4厘米
      .BottomMargin=4/0.035
*3.设置左边距为2厘米
     .LeftMargin=2/0.035
*4.设置右边距为2厘米
     .RightMargin=2/0.035
*页面0为纵向,1为横向     
     .Orientation=1
   ENDWITH
**********************************************************************************
WITH OleWord.Selection
      .TypeParagraph  &&回车符
      .Text="致"  &&加完是选定状态
      .Font.size=20   &&字体大小
      .Moveright(3,1) &&加完是选定状态,移动一次才不覆盖,3是右移参数,左移1字节。
      .TypeParagraph  
      .insertafter(SPACE(4)+"兴启")    
      .Font.size=20  
      .Moveright(3,1)
      .TypeParagraph
      .Moveright(3,1)  
      .insertafter(SPACE(6)+"多谢贵公司的支持,贵公司在我厂所配COT样办牢度如下:")    
      .Font.size=14    
      .Moveright(3,1)     
      .TypeParagraph
ENDWITH       
******创建表格*******************************
  OleWord.Selection.TypeParagraph
  OleWord.Selection.TypeParagraph
  OleWord.Selection.Moveup(5,1)    &&第一个5是上移参数,第二个数字是上移1行,留一空行在格表下面
  otemp=OleWord.Selection.Range
  OleWord.ActiveDocument.Tables.Add(otemp,k+3,6,5,0) &&插入k+3行6列表格
  OleWord.Selection.SelectRow
  &&光标在第一格,要移动用Moveright() 等

WITH OleWord.Selection
     .Tables(1).Rows.Height=0.77/0.035  &&选定表格所有行高0.77CM     
     .Tables(1).Columns.PreferredWidth=2.5/0.035 &&选定表格所有列宽 1.9cm
     .Tables(1).Columns(1).PreferredWidth=4.73/0.035 &&选定表格第一列宽 4.73cm
    *添加数据,表格合并后就不能用此方法加资料
    .Tables(1).rows(3).cells(3).range.insertafter("颜色变化")
    .Tables(1).rows(3).cells(4).range.insertafter("颜色沾色")  
    .Tables(1).rows(3).cells(5).range.insertafter("干 擦")
    .Tables(1).rows(3).cells(6).range.insertafter("湿 擦")  
  FOR i=1 TO k   
    FOR j=1 TO 6
     .Tables(1).rows(i+3).cells(j).range.insertafter(arrcolor[i,j])    
    ENDFOR
  ENDFOR

     **选定合并  
     .MoveLeft(3,1)  &&左移去掉选定.第一个3是左移参数,第二个数字是左移1字节
     .MoveDown(5,2,1) &&下移两格,5是下移参数,2是移两格,1是按SHIFT,选择3格  
     .Cells.Merge  &&合并选定的三格

     .MoveRight(3,1) &&右移去掉选定.第一个3是右移参数,第二个数字是右移1格
     .MoveDown(5,2,1)
     .Cells.Merge  &&合并选定的三格

     .MoveRight(3,1) &&右移一格去掉选定
     .Moveright(3,2,1)   &&3是右移参数,右移1格,最后1是按SHIFT键,变成选定二格。
     .Cells.Merge  &&合并选定的两格

     .MoveDown(5,1)
     .Moveright(3,2,1)   &&3是右移参数,左移1格,最后1是按SHIFT键,变成选定二格。
     .Cells.Merge  &&合并选定的两格

     .Moveright(3,1) &&右移一格去掉选定
     .Moveright(3,2,1)   &&3是右移参数,左移1格,最后1是按SHIFT键,变成选定二格。
     .Cells.Merge  &&合并选定的两格     
     
     .Moveup(5,1) &&上移一格,5是下移参数,2是移两格,1是按SHIFT,选择3格  
     .Moveright(3,2,1)
     .Cells.Merge
     ***加入资料,因要合并不方便操作,所以合并后加放标题资料
     .insertafter("摩  擦")
     .MoveDown(5,1)
     .insertafter(arrCrock[1])  
     .MoveLeft(3,2)
     .insertafter(arrWash[1])
     .Moveup(5,1)
     .insertafter("耐  洗")
     .MoveLeft(3,2)
     .insertafter("颜 色")
     .MoveLeft(3,2)
     .insertafter("色 号")
     .MoveDown(5,k,1) &&5是下移参数,下移k+2格,最后1是按SHIFT键,变成选定多格。
     .MoveRight(3,5,1)  &&3是右移参数,右移5格,最后1是按SHIFT键,变成选定多格。
     .ParagraphFormat.Alignment=1  && 1居中 2左对齐,3右对齐,4分散对齐
     .MoveDown(5,1)
     .TypeParagraph
     .insertafter(SPACE(4)+"祝")  
     .MoveRight(3,1)  
     .TypeParagraph      
     .insertafter("生意兴隆!")  
     .MoveRight(3,1)  
     .TypeParagraph  
     .insertafter(SPACE(25)+"先科有限公司")   
     .Font.size=20  
     .Moveright(3,1)  
     .TypeParagraph  
     .insertafter(SPACE(30)+DTOC(DATE()))
     .Moveright(3,1)              
ENDWITH
  MESSAGEBOX("制作文档完毕!",64,"提示")

   OleWord.Visible=.T.
posted on 2005-12-06 11:23 天外飞仙 阅读(1256) 评论(0)  编辑  收藏 所属分类: .net

只有注册用户登录后才能发表评论。


网站导航: