摘 要: 對合同文本手工錄入方式存在的問題進行了分析,提出在C#環境下利用COM組件讀/寫MS Office Word和Excel文件的技術,自動地生成Word格式合同文件的方法,并且根據該方法實現了自動生成合同文件的軟件系統。通過在陜西省電力物資公司的實際應用,驗證了該方法的可行性和高效性。
關鍵詞: Com組件; C#; MS Office; 文檔自動生成系統
中圖分類號: TN911?34 文獻標識碼: A 文章編號: 1004?373X(2013)12?0061?04
伴隨計算機和網絡技術的飛速發展,電力企業大規模開展了信息網絡的建設和信息系統的開發,信息技術的應用領域已經深入到電網生產、經營和管理的各個環節。電力物資公司作為電力系統的物資專營企業,主要承擔著電力設備的招標、訂貨和采購工作,日常業務需要處理大量的合同數據。
目前物資合同數據來自于電系統的ERP數據庫,以Excel文件格式導出,采用人工方式把數據文件中的合同數據填入Word格式的標準合同文件。在該過程中,人工填寫數據的做法存在問題較多。通常一個Excel數據文件就會有幾十甚至數百份合同數據,如果采用人工錄入數據的方式不僅勞動量大、生成合同速度慢、而且還容易出錯;另外,如果Word合同模板發生變化,需要添加或刪除一些數據項,那么按照原合同模板制作的合同就需要逐份修改或重新錄入,因而維護合同文件十分困難、不靈活。
為了解決這些問題,本文討論了如何在C#環境下,利用COM組件讀/寫MS Office Excel和Word文件的技術[1?2],研究自動地生成合同文件的方法[3?6],實現了自動生成合同文件的軟件系統,該系統的應用將大幅削減人為操作、提高工作效率和質量、進而提升企業形象帶來良好的社會效益。
1 C#處理Excel和Word文檔的方式
用Excel作為數據源保存數據,用Word作為數據呈獻的載體顯示數據,是企業信息系統輸出數據時采取的典型的做法。本文的合同自動生成系統采用了這一方法。另外,在C#開發平臺下,微軟公司提供了專用于Office開發的程序集和相關的Office應用程序對象模型,即COM。利用COM和相關的程序集,可以在C#平臺上實現對MS Office文件的各種操作。
1.1 用C#讀取Excel文件
合同數據來自于ERP系統數據庫,并且已經導出到Excel數據文件中,Word格式的合同將使用該數據文件來生成。因此首先讀取Excel數據文件的內容,這里有2種方法。
1.1.1 第一種方法
1.1.2 第二種方法
2 系統模塊結構
設計合同自動生成系統的目標是讓合同編制人員能夠靈活、快捷、準確地生成合同文檔。該系統的整體架構如圖1所示。首先從ERP中導出要生成的合同數據,將其存放在一份Excel文件中。然后根據需要準備Word標準模板(注:此處的“模板”仍是一個以doc為后綴的文檔,不是指后綴名為dot的Word模板文件,文中出現的模板二字均照此意理解)。最后,系統的核心部分是合同自動生成程序,它的主要功能是按照輸入的Word標準合同模板,從Excel文件中提取所需的數據并寫入Word合同文件,從而形成符合要求的合同文本。
3 標準合同生成過程
3.1 Word標準合同模板制定
使用合同生成系統之前,需要準備Excel數據文件和Word標準合同模板文件。
Excel數據文件直接從ERP數據庫中導出。
Word標準合同模板中包含2種性質的文字:固定不變的內容,即每份合同都相同的部分,例如合同中的法律聲明、甲方聯系人、甲方單位地址等文字信息;以及發生變化的內容,例如合同中的產品名稱、產品價格等信息,這些變化內容來自于Excel數據文件,每份合同都不相同。對于可變的內容用統一格式的字符串填寫,該字符串本質上起到占位符的作用,在自動填入信息時有助于查找和替換操作。它由2部分組成,第一是不會引起歧義的前后綴;第二是被前后綴圍堵的部分,用來說明被替換的內容在Excel數據文檔中的列名稱。例如“autogen工程項目autogen”字符串表示應該用Excel數據文檔中名稱為“工程項目”的列所對應的內容來替換此處的字符串,添加前后綴“autogen”可以避免與合同的其他固定內容沖突,不會導致錯誤替換。當然,對Word文檔進行定位可采用的技術還包括書簽定位、域定位等[3?10],但不如直接填寫查找字符串方便,比較適合標準模板的編寫人員所采用。
另外,對于合同模板中的“明細表”,其中要填寫的記錄數量不固定,不能用查找和替換方式寫入合同,對此采用了動態處理的辦法,在程序中根據具體的明細數據行數向明細表填寫數據。
Word標準合同模板的準備工作比較復雜,但是該模板一般不會發生變化。如果必須修改標準合同模板,模板修改只需修改固定內容或添加/刪除可變內容的替換字符串即可。
3.2 自動生成Word標準合同
自動生成Word標準合同的算法如圖2所示。大致可以分為4個步驟:
(1)把Excel數據文件中的信息讀取到DataSet數據集合內;
(2)檢查DataSet中的當前行數據是否為新合同數據的開始,即合同首行數據,如果存在該行數據則打開Word合同模板,采用逐項查找?替換或查找?修改?替換的方法填充合同模板中的可變數據;如果該行數據不存在,則說明已經處理至數據文件末尾,退出程序;
(3)檢查該份合同是否有明細項(行),如果有則采用循環的方式逐行把明細項填入Word模板中的“明細表”,如果沒有則直接把合同數據首行寫入該表。
(4)保存按模板生成的合同,然后返回到步驟(2)。
4 標準合同生成技術的實際應用
5 結 語
本文在基于COM組件技術對Excel和Word操作支持的基礎上,提出了自動生成Word格式合同文檔的方法,并根據該方法實現了合同文檔自動生成系統。在陜西省電力物資公司的實際應用中,驗證了這種技術的可行性和高效性。
但是,系統仍有一些不足之處,還存在以下幾方面的后續研發工作:Word合同模板中動態內容的增減仍要靠人工打開Word文檔增刪占位字符串,應能提供更好的人機界面,通過鼠標拖拽的方式從Excel數據文件中選擇出Word合同模板所需的占位字符串。從而提高模板制作的自動化程度,減少人為操作失誤;標準化合同模板的規范化問題,合同模板的規格和標準越規范,利用計算機技術進行自動化處理的程度就越高;該軟件系統能否自動生成其他類型的文件,即能否提高它的抽象性和通用性問題。
參考文獻
[1] FAISON Ted. Visual C#基于組件的開發[M].北京:清華大學出版社,2003.
[2] LIBERY J, MACDONALD B. C#3.0學習指南[M].北京:人民郵電出版社,2010.
[3] 葛芬,吳寧.基于多種技術的Word設計文檔自動生成平臺[J]. 電子科技大學學報,2007,36(2):263?266.
[4] 王國良,劉學輝,馮光焰.VB. NET中實現Excel自動化編程[J].計算機與網絡,2009(1):55?58.
[5] 宋雅娟,邊晶,岳莉.文檔的程序自動填寫技術在信息管理系統中的應用[J].長春大學學報,2011(2):15?17.
[6] 余繼軍,王敏.基于C# 3.0實現Excel自動統計Word文檔[J].重慶文理學院學報:自然科學版,2010(1):70?72.
[7] 杜秋霞.Visual C#的Excel編程[J].青海師范大學學報:自然科學版,2006(3):53?56.
[8] 黃偉.基于C#的Word文檔自動生成技術的研究與應用[J].南通職業大學學報,2008,22(2):11?16.
[9] 羅許練.基于C#.NET的動態Word文檔生成及數據填充研究[J].惠州學院學報:自然科學版,2009(6):9?13.
[10] 曹剛,韓作生.一種基于Word文檔的手寫批注實現方法[J].計算機工程與應用,2005,37(11):100?101.