《電子技術應用》
您所在的位置:首頁 > 其他 > 設計應用 > 編程實現Word表格的填充及擴展
編程實現Word表格的填充及擴展
殷愛貞1 徐 梅1 劉廣孚2 何 潔3
1. 山東東營石油大學(華東)經濟管理學院(257061); 2. 山東東營石油大學(華東)信息與控
摘要: 在軟件中填充和擴展Word表格的實現原理及方法,并給出了VB程序示例。
關鍵詞: Word RTF 表格 Visual Basic
Abstract:
Key words :

摘    要: 在軟件中填充和擴展Word表格的實現原理及方法,并給出了VB程序示例。
關鍵詞: Word  RTF  表格  填充  Visual Basic

   在一些軟件的使用過程中,用戶需要把計算結果生成一定格式的Word環境下的數據表格,以便直接插入到工作報告中。本文將介紹一種Word表格的自動填充方法。該方法利用Word文件的RTF(Rich Text Format)存儲格式的特點,可滿足用戶的要求,并能進一步實現行列數可變的表格的生成。本方法簡單有效,且無需Word軟件的支持。
1  RTF格式簡介
  Word文件有多種存儲格式,除常用的“.doc”外,還有一種“.rtf”。本文將借助RTF格式實現對表格的操作。RTF是一種純文本描述性的格式。文件內容全部為ASCII碼,可用記事本打開,從而可以看到其全部的描述內容,也可以在應用軟件中打開該文件并進行修改。表格的自動填充及擴展就是通過這種方式實現的。
在一個RTF格式的Word文件中,可以看到用“\”隔開的表示各種格式的字符串和數字,且Word版本越高其格式越復雜。但是只需知道幾個有針對性的關鍵的格式字符串及其規律即可。
任何編程語言對文本文件和字符串的操作都比較簡單,故用任何一種語言實現對表格的操作都將是簡單可行的。
2  創建表格模板
   先要根據用戶的需要,借助于Word軟件創建表格模板文件,步驟如下。
  (1)運行Word軟件,按照用戶的要求插入表格,設置格式,并根據操作的需要預填單元格。表格模板示例如表1所示。

  (2)單擊菜單的“文件/另存為”,文件類型選為“.rtf”,保存即可。此文件即為表格模板文件。
  (3)在程序中打開此文件,進行相應操作后,另存為新的目標文件。這就是用戶需要的數據表格。
  (4)用戶用Word軟件打開該新文件,可看到填充后的表格,將該表格復制、粘貼到用戶的Word文檔中即可。
  下面以Visual Basic為例介紹如何實現對模板文件的操作。
3  表格的填充
   在RTF格式的模板文件的ASCII碼中,可以看到類似“……\hich\af0\dbch\af15\loch\f0 AA22\cell……”的字符串。其中,“\cell”表示這是在描述一個單元格的格式及內容,“AA22”是單元格內容,前邊的字符串是關于其字體、字號等格式的描述。
  RTF在格式描述符中極少用大寫字母,且不會連續使用大寫字母,例如有可能出現“Width”但不會出現“WIDTH”、“WI”及“A2”等字樣。所以,如果每個單元格的內容都是大寫字母或數字且互不相同(如表1),則它們在整個文件的描述字符串中就是惟一的。在軟件中找到該惟一的特征字符串并用相應的字符串替換,就實現了表格的自動填充。由于這種填充方式只涉及單元格內容而與格式無關,所以預先創建的模板表格可以是任意復雜的,且每個單元格的字體、字號等格式也是任意的。
  在替換時如果有漢字,則應先將其轉換成用ASCII碼,如“日”要轉換成“\′c8\′d5”(“日”的十六進制編碼為“C8D5”)。
  實現表格自動填充的VB源代碼如下:
  Private Sub FillGrid(MaxDimension As Integer,
    StrSourceFile As String,StrTargetFile As String,
      StrSource( ) As String,StrTarget( ) As String)
       '功能:替換RTF格式的模板源文件中的單元格內容,
       ′并生成新的RTF格式的目標文件
  ′MaxDimension為內容數組的維數,可以大于表格單元的總個數
     ′StrSourceFile和StrTargetFile分別為RTF格式的模板文件名和目標文件名
     ′StrSource( )和StrTarget( )分別為被替換單元的原始容內和新內容的字符串數組
     Dim i As Integer,S1 As String,P As Long
     LoadFileToStr StrSourceFile,S1′把模板文件讀入到字符串S1中,源代碼略
     For i=0 To MaxDimension-1
     P=InStr(S1,StrSource(i))′在源文件字符串中搜索將被替換的字符串的位置
        If P>0 Then ′如果找到則進行字符串替換在字符串替換時,因為新串可能比舊串長,
          ′所以不能使用串替換命令,而應把整個字符串分成3段,并重新組合
      S1=Left(S1,P-1)+StrTarget(i)+Mid(S1,P+Len
                   (StrSource(i)))
        End If
    Next i
       WriteStringToFile StrTargetFile,S1′寫入目標文件,源代碼略
  End Sub
  該程序的特點是參數表中數據字符串StrTarget( )的維數與當前表格單元格的個數無關。這是因為,一個軟件一般支持多種數據類型,通常希望生成含有不同種類數據的多種表格。如果將每種數據均與某個互不相同的特征字符串綁定,所有特征字符串和數據均放在StrSource( )和StrTarget( )中,則不論表格有多大,該程序均完全適用。
4  增加表格的列數
  在有些應用軟件中,要處理數據的種類(表格的列項)很多,但用戶希望表格的列數可以任意變化。這時可采用對最少列數的標準表格模板任意增加列的方法,得到與模板表格的行數相同但列數任意多的表格。新列的格式與所選定的被復制列相同。
  下面介紹簡單表格(整行整列)的增列方法。對于特殊表格的加列,則需根據具體情況編程,雖然程序復雜一些,但方法大同小異。
  一個有表格的RTF文件中,在該表格的描述字符串的前、后和中間都會有對該表格的坐標等很多參數的描述。其中最容易理解的是表格豎線的坐標描述,例如對于“cellx2732”,修改其數值會改變豎線的位置,而如果將2個“cellx***”間的描述串(不必知其具體含義)原地復制一遍(坐標值當然要做相應的修改),同時將描述相應單元格的以“ABC\cell”(“ABC”為單元格內容)為標志的描述串也原地復制一遍,則再次打開Word時,就會發現增加了一列。
  在下面的源代碼中,為了簡化程序,要求表格模板的單元格內容完全相同,并且擴充后的表格的單元格內容也完全相同,且等列寬。其實,要想使新表格中單元格內容各不相同并能任意設置列寬是很容易實現的。
  在表格中增加列的VB源代碼如下:
  Private Sub ExpandVolumes(OldVols As Integer,
  CopiedVol As Integer,NewVols As Integer,
  MaxWidth As Integer,StrSourceFile As String,
  StrTargetFile As String,StrCell As String)
           ′功能:把表格的指定列(不能是第1列)進行復制,形成均勻列寬的多列表格
           ′說明:原始模板的單元格內容必須全部相同(為 Str
  ′Cell,如“ABC”),新單元格也按此填充
          ′OldVols、CopiedVol和NewVols分別為原始模板的列數、被復制列的序號和擴展后的列數
          ′MaxWidth為擴展后表格的寬度,此處只考慮4位數的情況
     Dim i As Integer,j As Integer,P1 As Long,StartP As Long
     Dim S1 As String,S2 As String
     Dim CellPos As Integer,StrTemp As String,ITemp As Integer
     LoadFileToStr StrSourceFile,S1′把模板文件讀入到字符串S1中
     S2=″″′S2用于臨時保存處理過的字符串
     Do′增加表格的列描述
     For i=1 To OldVols ′原始模板為3列
          P1=InStr(S1,″cellx″)′在余下的字符串中從起始查找
          If P1=0 Then′搜索完畢
       S1=S2+S1′轉換完成的字符串仍賦給S1
         Exit Do
     End If
       If i=CopiedVol Then′復制指定列參數串并修改坐標值
       For j=CopiedVol To CopiedVol+NewVols-
    OldVols ′2 To NewVols-1
        S2=S2+Left(S1,P1+4)+Trim(Str(Int(MaxWidth/NewVols)*j))
        Next j
        ElseIf i<CopiedVol Then ′修改坐標值
             S2=S2+Left(S1,P1+4)+Trim(Str(Int(MaxWidth/ NewVols*i)))
  Else ′i>CopiedVol,修改坐標值
       S2=S2+Left(S1,P1+4)+Trim(Str(Int(MaxWidth/ NewVols*(i+NewVols-OldVols))))
     End If
         S1=Mid(S1,P1+9) ′剩余字符串
     Next i
  Loop
     S2=″″
     ITemp=Len(StrCell)
     Do ′增加表格單元格
      For i=1 To OldVols
          P1=InStr(S1,StrCell) ′搜索″ABC″
          If P1=0 Then ′搜索完畢
           S1=S2+S1 ′轉換完成的字符串仍賦給S1
           Exit Do
        End If
           If i=CopiedVol Then′復制單元格
           For j=CopiedVol To CopiedVol+NewVols-OldVols
           S2=S2+Left(S1,P1+ITemp-1)
       Next j
  Else
         S2=S2+Left(S1,P1+ITemp-1)
      End If
           S1=Mid(S1,P1+ITemp) ′剩余字符串
     Next i
  Loop
        WriteStringToFile StrTargetFile,S1′保存成新的模板文件
  End Sub
  生成的新的模板文件的單元格內容是完全相同的,可以用各不相同的特征字符串逐一替換,形成如表1所示的表格模板后,就可以調用FillGrid進行自動填充了。
5  為表格增加行
  在RTF文件中,表格的描述是以行為單位的,所以增加行比增加列要容易得多。其描述符中,有一個出現頻率不是很高的字符串“}\pard”,其中“}”是對一段完整描述內容的分隔(與“{”對應),而“\par”或“\pard”是一段描述內容的結束符。在只有一個表格的文件中,“}\pard”只在文件頭結束(其后即為文件的全部內容的描述)及每行表格的描述結束時才出現。據此,就可以很容易地找到某行表格的完整的描述字符串,將其復制就可為表格增加一行,其實現非常簡單。
6  結  論
  以上介紹了對任意固定表格的填充方法和對簡單表格增加行列的方法。該方法的最大優點在于,只要編程者對RTF格式的文件進行簡單分析并熟悉字符串的編程,就可以完成表格的操作。如果進一步對復雜表格的RTF文件進行分析,還可以繼續編程實現對其行或列的添加,但如果其行列變化不多,建議多制幾個標準表格模板則會更方便。
   當然,利用OLE編程也可以實現上述功能,但要求編程者必須熟悉OLE編程,且運行時必須有Word軟件環境。在某些特殊場合(如用于工業實時控制的工控機上),為了避免感染病毒,是不允許安裝Office等軟件的,這時該種方法就顯得更為實用。
參考文獻
1   劉廣孚.以讀解的方式實現RTF文件的打印和預覽.計算機應用研究(精擴本),2001
2   Microsoft Corporation著,希望圖書創作室譯.Microsoft  Visual Basic 6.0組件工具指南.北京:北京希望電子出版社,1999
3   Halvorson M著,希望圖書創作室譯.Microsoft Visual Basic  6.0專業版循序漸進教程.北京:北京希望電子出版社,1999
 

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          模特精品裸拍一区| 国产精品嫩草99a| 亚洲第一区色| 欧美黄色一区| 国产精品日韩欧美一区二区| 欧美一区二区视频观看视频| 欧美日韩精品免费在线观看视频| 亚洲伦理在线免费看| 国产一区在线观看视频| 黄色成人在线网址| 亚洲视频axxx| 久久精品夜色噜噜亚洲a∨| 久久精品久久99精品久久| 亚洲一区二区免费视频| 欧美日韩在线不卡一区| 欧美日韩p片| 尤物yw午夜国产精品视频| 欧美色欧美亚洲另类七区| 在线看视频不卡| 久久―日本道色综合久久| 亚洲国产成人porn| 国产精品久久久久9999吃药| 欧美一区不卡| 欧美国产乱视频| 国产欧美日韩综合精品二区| 亚洲欧美色一区| 亚洲国产精品va在线看黑人| 在线精品视频一区二区| 欧美日韩国产色站一区二区三区| 亚洲片在线资源| 蜜桃久久av一区| 午夜激情久久久| 国产亚洲精品久久久久婷婷瑜伽| 免费在线成人av| 欧美久色视频| 欧美影院精品一区| 欧美性感一类影片在线播放| 老妇喷水一区二区三区| 亚洲精品国精品久久99热| 蜜臀av国产精品久久久久| 欧美午夜精品| 国产精品日日摸夜夜添夜夜av| 国产精品美女久久久久aⅴ国产馆| 国产精品热久久久久夜色精品三区| 欧美在线精品一区| 欧美mv日韩mv亚洲| 亚洲系列中文字幕| 国产综合精品| 亚洲欧美日韩中文视频| 国产精品观看| 欧美一级淫片aaaaaaa视频| 精品成人a区在线观看| 欧美黄色aaaa| 国产欧美激情| 亚洲精品一区二区三区不| 亚洲国产精品久久精品怡红院| 欧美精品在线免费观看| 欧美一区二区播放| 国产欧美日本在线| 夜夜爽夜夜爽精品视频| 亚洲高清在线| 国产一区亚洲| 狠狠网亚洲精品| 欧美激情亚洲综合一区| 国内在线观看一区二区三区| 欧美日韩国产丝袜另类| 欧美激情一区| 国产精品视频久久久| 亚洲第一精品久久忘忧草社区| 亚洲欧美另类久久久精品2019| 国产精品美女久久久久久2018| 日韩视频在线一区二区| 久久久久久有精品国产| 欧美日韩不卡在线| 欧美精品一区二区三区一线天视频| 国产亚洲精品bt天堂精选| 亚洲黄色成人| 亚洲一区二区三区四区在线观看| 理论片一区二区在线| 亚洲激情成人在线| 国产精品theporn88| 久久久人成影片一区二区三区| 亚洲国产美女| 亚洲三级毛片| av成人国产| 红桃av永久久久| 欧美国产激情| 日韩视频欧美视频| 欧美色图一区二区三区| 欧美精品一区二区视频| 亚洲电影第三页| 一区二区日韩伦理片| 国产精品日韩在线| 另类av一区二区| 一色屋精品亚洲香蕉网站| 欧美午夜精品理论片a级大开眼界| 欧美jizzhd精品欧美巨大免费| 久久人人超碰| 国产欧美综合一区二区三区| 在线一区二区三区做爰视频网站| 久久久久一区二区三区| 中文日韩在线| 在线 亚洲欧美在线综合一区| 欧美精品1区2区| 亚洲国产女人aaa毛片在线| 亚洲一区二区伦理| 亚洲国产日韩一区二区| 久久久999精品视频| 午夜日韩av| 国产精品美女999| 国产精品视频99| 亚洲午夜久久久久久久久电影网| 性欧美xxxx视频在线观看| 久久亚洲国产精品一区二区| 影音先锋另类| 国产精品视频| 国产亚洲一本大道中文在线| 欧美日韩国产综合视频在线观看| 亚洲精品日韩在线| 国产精品国产三级国产a| 欧美一区国产一区| 久久婷婷国产综合尤物精品| 国产精品午夜国产小视频| 国产精品嫩草99av在线| 一个人看的www久久| 欧美在线免费一级片| 国产精品久久久久久久久久免费看| 亚洲国产精品va在线观看黑人| 欧美成人伊人久久综合网| 亚洲欧洲精品一区二区| 国产精品第2页| 久久人人爽爽爽人久久久| 亚洲美女电影在线| 亚洲经典视频在线观看| 欧美日韩成人在线播放| 欧美色欧美亚洲另类二区| 妖精视频成人观看www| 在线观看一区二区视频| 国内外成人免费激情在线视频网站| 性做久久久久久久久| 99香蕉国产精品偷在线观看| 国产精品久久久久久久久久免费| 亚洲精品国产精品乱码不99| 国产午夜精品美女视频明星a级| 久久久久久亚洲精品中文字幕| 久久久久九九九九| 久久精品99国产精品日本| 欧美无砖砖区免费| 久久aⅴ国产紧身牛仔裤| 久久狠狠久久综合桃花| 欧美精品日韩精品| 精品二区久久| 国产亚洲在线| 正在播放欧美视频| 在线亚洲一区观看| 国产在线视频欧美一区二区三区| 亚洲欧美经典视频| 久久精品国产一区二区三区免费看| 在线观看的日韩av| 好吊色欧美一区二区三区四区| 亚洲精品在线视频观看| 亚洲激情在线激情| 欧美大片专区| 欧美插天视频在线播放| 欧美激情在线播放| 国产伦精品一区二区三区照片91| 亚洲精品久久久蜜桃| 欧美日韩精品免费观看视频完整| 欧美日韩亚洲综合| 免费一级欧美片在线播放| 欧美精品不卡| 国精产品99永久一区一区| 久久久久国产一区二区| 久久久久久穴| 最新国产成人在线观看| 亚洲每日在线| 欧美日韩日本视频| 亚洲国产欧美久久| 亚洲精品麻豆| 欧美日韩综合一区| 夜夜嗨av一区二区三区网站四季av| 亚洲国产岛国毛片在线| 亚洲综合久久久久| 一区二区精品在线观看| 极品少妇一区二区| 亚洲视频精品| 国产精品久久久久天堂| 欧美 日韩 国产 一区| 久久美女艺术照精彩视频福利播放| 久久99伊人| 欧美日韩99| 亚洲第一区中文99精品| 欧美另类高清视频在线| 国产精品成人观看视频免费| 亚洲色图综合久久| 久热精品视频在线观看一区| 亚洲精品视频一区二区三区| 国产欧美精品日韩| 久久一区免费| 99精品欧美一区| 亚洲最新色图| 红桃视频一区| 国产麻豆日韩欧美久久| 久久精品国产99精品国产亚洲性色| 麻豆成人91精品二区三区| 国产精品美女| 黄色小说综合网站| 久久精品国内一区二区三区| 国产精品自在线| 欧美在线视频免费播放| 国产精品男女猛烈高潮激情| 在线看视频不卡| 亚洲激情国产| 国产一区二区在线观看免费播放| 国产精品二区影院| 欧美亚洲一区三区| 在线免费观看日本欧美| 亚洲欧美中文在线视频| 欧美黄色视屏| 91久久精品日日躁夜夜躁欧美| 黄色成人在线网站| 欧美激情小视频| 欧美午夜www高清视频| 国产精品久久久久久久久久久久久| 久久久国产一区二区| 欧美亚洲自偷自偷| 久久久久国产精品www| 国产视频在线观看一区| 在线 亚洲欧美在线综合一区| 在线观看欧美日本| 欧美另类变人与禽xxxxx| 欧美一区中文字幕| 亚洲午夜一二三区视频| 国产视频精品xxxx| 国产精品国产三级国产普通话99| 国产欧美日韩中文字幕在线| 女生裸体视频一区二区三区| 一个色综合导航| 欧美无乱码久久久免费午夜一区| 欧美午夜久久久| 一区二区欧美日韩视频| 国产精品三区www17con| 在线成人av网站| 国产精品一区视频| 亚洲欧美久久久久一区二区三区| 亚洲一区免费视频| 亚洲日本va午夜在线影院| 国产欧美日韩不卡| 亚洲欧洲三级电影| 一本色道久久| 国产亚洲va综合人人澡精品| 国产专区精品视频| 精品99一区二区三区| 亚洲深夜影院| 在线视频日本亚洲性| 亚洲综合第一| 欧美第十八页| 国产日韩在线播放| 一本色道久久综合狠狠躁篇怎么玩| 国产亚洲女人久久久久毛片| 国产综合色产| 国产精品二区三区四区| 日韩一级网站| 有码中文亚洲精品| 欧美激情亚洲另类| 在线看一区二区| 欧美精品18+| 一区二区三区在线观看欧美| 欧美sm重口味系列视频在线观看| 国产精品高清在线观看| 合欧美一区二区三区| 欧美电影在线免费观看网站| 一区二区三区亚洲| 欧美成年人视频网站欧美| 在线亚洲一区二区| 欧美一区二区在线免费播放| 一区二区在线观看视频| 国产精品一区二区在线观看不卡| 亚洲精品日韩激情在线电影| 国产亚洲成年网址在线观看| 国产伦精品一区二区三区高清版| 国内一区二区在线视频观看| 免费一区二区三区| 欧美一区永久视频免费观看| 久久国产精品99久久久久久老狼| 久久久青草青青国产亚洲免观| 欧美日韩视频在线观看一区二区三区| 免费久久99精品国产| 欧美mv日韩mv国产网站| 国产日产高清欧美一区二区三区| 欧美成人精品福利| 欧美精品1区2区| 欧美fxxxxxx另类| 久久全国免费视频| 欧美女主播在线| 最新国产成人在线观看| 日韩一级精品| 午夜精品久久久99热福利| 日韩小视频在线观看专区| 欧美一级视频精品观看| 亚洲三级免费观看| 国产一区二区高清视频| 蜜臀va亚洲va欧美va天堂| 性色一区二区| 99精品久久免费看蜜臀剧情介绍| 午夜精品福利电影| 国产精品丝袜久久久久久app| 日韩午夜在线电影| 欧美二区在线看| 欧美日韩中文在线| 亚洲人成免费| 欧美日韩一区免费| 国产一区二区毛片| 国产精品乱码| 久久精品夜色噜噜亚洲aⅴ| 激情成人在线视频| 国产精品成人观看视频国产奇米| 亚洲国产精品久久久久秋霞影院| 黑人巨大精品欧美一区二区小视频| 男人天堂欧美日韩| 亚洲性视频网址| 激情综合在线| 亚洲一级影院| 欧美黄色aa电影| 欧美日韩一区二区三区高清| 欧美视频在线观看一区二区| 欧美精品久久99久久在免费线| 国产日韩欧美三区|