飛艷小屋

          程序--人生--哲學___________________歡迎艷兒的加入

          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 天外飛仙 閱讀(1263) 評論(0)  編輯  收藏 所屬分類: .net
          主站蜘蛛池模板: 遵化市| 永新县| 黄平县| 游戏| 桃江县| 湘潭县| 门头沟区| 周至县| 兰州市| 七台河市| 新蔡县| 洪江市| 莱芜市| 湖南省| 民丰县| 古蔺县| 鄢陵县| 将乐县| 无极县| 秦安县| 佛冈县| 监利县| 镇江市| 固原市| 安康市| 仁寿县| 建阳市| 嘉黎县| 台州市| 大理市| 西峡县| 自贡市| 凤阳县| 河源市| 张家川| 长子县| 常州市| 界首市| 三门县| 尚志市| 襄垣县|