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

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

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

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

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美一区国产二区| 国产精品99久久不卡二区| 欧美激情亚洲视频| 久久久久成人精品| 欧美在线黄色| 欧美一区二区私人影院日本| 亚洲伊人伊色伊影伊综合网| 这里只有视频精品| 一片黄亚洲嫩模| 中文日韩电影网站| 中文无字幕一区二区三区| 一区二区高清| 亚洲天堂免费在线观看视频| 一区二区欧美在线观看| 一本色道久久加勒比精品| av成人免费在线| 中文久久精品| 亚洲欧美日韩精品在线| 校园春色国产精品| 欧美在线观看日本一区| 久久成人精品| 久久午夜视频| 欧美成人黄色小视频| 欧美—级a级欧美特级ar全黄| 欧美国产日韩免费| 欧美日韩成人一区二区| 欧美日韩综合| 国产欧美一区二区精品婷婷| 国产欧美一区二区色老头 | 久久精品一区二区三区中文字幕| 欧美在线播放| 亚洲激情在线视频| 亚洲免费久久| 亚洲一区二区三区久久 | 裸体一区二区三区| 欧美金8天国| 国产精品二区在线| 国产欧美日韩免费| 影音先锋日韩精品| 99re亚洲国产精品| 午夜欧美不卡精品aaaaa| 久久精品午夜| 中日韩高清电影网| 欧美专区在线播放| 欧美成人一区二区三区| 欧美日韩精品一区二区天天拍小说| 欧美视频网址| 国产深夜精品福利| 亚洲欧洲美洲综合色网| 亚洲午夜一区二区三区| 性欧美videos另类喷潮| 亚洲激情网站| 亚洲一区二区在线免费观看| 久久激情五月丁香伊人| 欧美刺激午夜性久久久久久久| 欧美视频国产精品| 韩国一区二区三区美女美女秀| 亚洲激情在线播放| 亚洲一区二区三区在线看| 久久精品男女| 亚洲一区国产一区| 麻豆国产精品一区二区三区| 欧美日韩综合不卡| 黄色av一区| 亚洲视频视频在线| 亚洲国产美国国产综合一区二区| 在线亚洲+欧美+日本专区| 久久精品国产视频| 欧美日韩国产小视频| 国产日韩一区二区三区| 亚洲精品乱码久久久久久久久| 亚洲一区二区三区四区视频| 亚洲国产免费看| 性欧美xxxx视频在线观看| 欧美精品亚洲一区二区在线播放| 国产欧美日韩亚洲精品| 日韩视频在线观看| 久久精品久久99精品久久| 亚洲一区二区网站| 欧美电影美腿模特1979在线看| 国产精品一区二区在线观看网站| 亚洲高清在线| 欧美一区二区免费观在线| 亚洲视频免费看| 鲁鲁狠狠狠7777一区二区| 国产精品久久久久久久午夜片| 亚洲二区在线观看| 欧美一区二区三区久久精品茉莉花| 宅男精品视频| 欧美成人中文| 韩国v欧美v日本v亚洲v| 亚洲在线不卡| 亚洲性xxxx| 欧美另类变人与禽xxxxx| 国外成人性视频| 午夜精品久久久久久久久久久久 | 欧美黄色一区二区| 国产在线一区二区三区四区| 99精品视频免费| 亚洲精品免费电影| 久久久久免费观看| 国产精品一区二区三区四区五区| 99精品视频免费观看视频| 亚洲国语精品自产拍在线观看| 性色av一区二区三区红粉影视| 欧美日韩在线播放| 亚洲精品久久久久久久久久久久| 亚洲高清123| 久久久www| 国产精品久久中文| 在线亚洲自拍| 亚洲午夜av在线| 欧美日韩亚洲精品内裤| 亚洲另类春色国产| 亚洲精品偷拍| 欧美国产亚洲精品久久久8v| 亚洲国产精品嫩草影院| 亚洲激情一区二区| 欧美α欧美αv大片| 亚洲高清三级视频| 亚洲精品一品区二品区三品区| 欧美sm视频| 91久久夜色精品国产九色| 亚洲精品中文字幕在线| 欧美刺激午夜性久久久久久久| 亚洲高清色综合| 日韩一级精品| 欧美午夜片欧美片在线观看| 99这里只有久久精品视频| 亚洲午夜电影在线观看| 国产精品久久久久天堂| 亚洲一区二区三区欧美| 欧美在线观看日本一区| 国产午夜精品全部视频播放 | 激情伊人五月天久久综合| 亚洲国产成人av在线| 欧美a级大片| 亚洲激情第一区| 在线视频你懂得一区二区三区| 欧美视频手机在线| 亚洲欧美色婷婷| 久久亚洲色图| 亚洲黄色在线视频| 亚洲一区二区3| 国产精品一区一区| 亚洲国产精品成人一区二区| 欧美国产日韩一区| a91a精品视频在线观看| 欧美一区二区成人| 伊人久久大香线蕉综合热线| 亚洲精品久久久久久一区二区| 欧美日韩一区二区免费视频| 亚洲在线一区二区| 国产精品sss| 亚洲在线网站| 国产免费亚洲高清| 亚洲狠狠婷婷| 欧美午夜无遮挡| 欧美在线免费播放| 欧美激情视频在线播放 | 韩国成人精品a∨在线观看| 亚洲人成网站在线播| 欧美日韩免费观看一区| 亚洲午夜精品久久| 久久中文字幕一区| 日韩午夜激情av| 久久精品国产99| 最新热久久免费视频| 午夜精品视频一区| 伊人色综合久久天天五月婷| 在线亚洲激情| 国产亚洲一区二区三区在线播放| 日韩视频二区| 国产日韩在线视频| 99视频在线观看一区三区| 国产精品久久午夜| 亚洲人成啪啪网站| 国产精品一二三视频| 亚洲国产日韩在线| 国产精品久久久久久久久免费桃花 | 欧美日韩精品在线播放| 午夜免费久久久久| 欧美精品在线视频| 午夜免费电影一区在线观看| 欧美精彩视频一区二区三区| 亚洲欧美在线一区| 欧美激情一区二区三区高清视频| 亚洲欧美www| 欧美日韩国产天堂| 亚洲国产成人一区| 国产精品久久999| 亚洲狼人综合| 国产一区二区日韩| 在线综合+亚洲+欧美中文字幕| 狠狠久久婷婷| 午夜精品免费在线| 国产精品每日更新| 中文日韩电影网站| 欧美1区3d| 欧美一区日韩一区|