林晉立
(廣東產(chǎn)品質(zhì)量監(jiān)督檢驗(yàn)研究院,廣州 510330)
在產(chǎn)品檢測(cè)機(jī)構(gòu)中,出具檢測(cè)報(bào)告是檢驗(yàn)員的日常工作。目前,檢驗(yàn)員較多采用人工輸入的方式將信息錄入Word 文檔并出具檢測(cè)報(bào)告,報(bào)告內(nèi)包含樣品名稱、規(guī)格型號(hào)、送檢單位、樣品圖片等數(shù)據(jù)庫(kù)信息,手動(dòng)錄入這些信息效率低下,且錯(cuò)誤率高。若能使其自動(dòng)生成于Word 文檔的指定位置,輔助人工錄入的方式,將極大提高工作效率。Visual Basic 具有圖形用戶界面GUI 及大量?jī)?nèi)置控件,使用Basic 語(yǔ)言編程,通過(guò)ADO、DAO 與數(shù)據(jù)庫(kù)連接,無(wú)需復(fù)雜編程便可輕松高效地設(shè)計(jì)出應(yīng)用程序[1]。
效率是產(chǎn)品檢測(cè)機(jī)構(gòu)的立身之本,為提高檢驗(yàn)員出具報(bào)告的速度與準(zhǔn)確度,本文基于Visual Basic(VB)6.0 平臺(tái)設(shè)計(jì)了檢測(cè)報(bào)告自動(dòng)生成系統(tǒng)。
在檢測(cè)報(bào)告中實(shí)現(xiàn)數(shù)據(jù)的自動(dòng)錄入需要用到編程軟件,VB6.0 可便捷地連接Word、Excel等Office 辦公套件并實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)入與導(dǎo)出[2-3]。因此,可供考慮的檢測(cè)報(bào)告自動(dòng)生成方式有以下三種:①Excel表格數(shù)據(jù)直接寫入;②VB讀取Excel 數(shù)據(jù)寫入Word;③VB 讀取Access 數(shù)據(jù)庫(kù)寫入Word。
Excel 表格數(shù)據(jù)直接寫入的方式是指:把存在于Excel 工作表1 中的數(shù)據(jù)作為數(shù)據(jù)庫(kù),Excel工作表2 作為需要生成的檢測(cè)報(bào)告模板,使用VLOOKUP、MATCH 等查詢檢索函數(shù)便捷地將表1 所需數(shù)據(jù)寫入表2 特定位置。這樣只需在表2 中確定檢索條件,就能調(diào)取表1 數(shù)據(jù),生成相應(yīng)的檢測(cè)報(bào)告。
采用直接寫入的方式需要對(duì)Excel 表2 的行高、列寬進(jìn)行處理,使表2 模板格式與Word 相同,移植模板的步驟較為繁瑣,適用于使用少量模板的情況。對(duì)檢測(cè)工作實(shí)際而言,不同的檢測(cè)樣品所使用的報(bào)告模板均不相同,在Excel中處理起來(lái)十分復(fù)雜,因此不適合使用這種方式。
VB 讀取Excel 數(shù)據(jù)寫入Word 文檔的方式是利用VB 軟件平臺(tái)分別與Excel 和Word 建立連接,先從Excel 中讀取所需數(shù)據(jù)并顯示于軟件界面,再將這些數(shù)據(jù)保存到Word 文檔的指定位置,信息傳遞路徑為:Excel-VB-Word。
VB 可以通過(guò)引用對(duì)象庫(kù)的方式調(diào)用Excel和Word進(jìn)行讀寫操作,對(duì)于不同的Word檢測(cè)報(bào)告模板,只需在程序中加載不同的模板路徑即可,操作便利。但由于Excel 涉及到工作簿、工作表和單元格等屬性,在VB中編程較為復(fù)雜。
VB 讀取Access 數(shù)據(jù)庫(kù)寫入Word 文檔的方式與調(diào)用Excel 類似,利用Access-VB-Word 的信息傳遞,將Access 數(shù)據(jù)庫(kù)中相應(yīng)數(shù)據(jù)通過(guò)VB保存到Word 文檔的指定位置。Access 可根據(jù)表中的主鍵進(jìn)行搜尋,配合其余字段即可獲取數(shù)據(jù)庫(kù)的全體數(shù)據(jù),在VB中編程較為簡(jiǎn)單。
對(duì)比上述三種方案,結(jié)合檢測(cè)報(bào)告出具實(shí)際,選擇第三種方案,即通過(guò)VB 讀取Access 數(shù)據(jù)庫(kù)寫入Word文檔的報(bào)告自動(dòng)生成方式。
本文以排煙防火閥門檢測(cè)樣品為實(shí)例,詳細(xì)說(shuō)明檢測(cè)報(bào)告自動(dòng)生成系統(tǒng)的軟件代碼與界面設(shè)計(jì)。建立防火閥門樣品數(shù)據(jù)庫(kù),如圖1 所示,檢測(cè)報(bào)告模板如圖2(a)所示。
圖1 樣品數(shù)據(jù)庫(kù)示例圖
圖2 檢測(cè)報(bào)告示例圖
由圖1 與圖2(a)可知,數(shù)據(jù)庫(kù)中形如檢測(cè)單號(hào)、樣品名稱、規(guī)格型號(hào)等信息均為檢測(cè)報(bào)告中需要錄入的數(shù)據(jù)。
在VB 6.0 中連接Access 數(shù)據(jù)庫(kù),需要在菜單欄的“工程→引用”中添加Microsoft ActiveX Data Objects 6.1 Library,即Microsoft ActiveX 數(shù)據(jù)對(duì)象庫(kù)6.1版本,也稱為ADO庫(kù),版本號(hào)跟隨操作系統(tǒng)。
連接Access 數(shù)據(jù)庫(kù)并調(diào)用數(shù)據(jù)的VB 代碼如下:
在上述代碼中,“+App.Path+”表示相對(duì)路徑,“+App.Path+‘檢測(cè)樣品數(shù)據(jù)庫(kù).accdb’”表示將檢測(cè)樣品數(shù)據(jù)庫(kù)文件與執(zhí)行軟件放在同一文件夾內(nèi),可使執(zhí)行軟件連接并讀取數(shù)據(jù)庫(kù)。
與連接Access 相同,VB6.0 連接Word 文檔,需要在菜單欄的“工程→引用”中添加Micro?soft Word 15.0 Object Library,即Microsoft Word 15.0 對(duì)象庫(kù),版本號(hào)跟隨操作系統(tǒng)。此外,向Word 文檔寫入數(shù)據(jù)前,需要確定數(shù)據(jù)顯示的位置,可在Word 菜單欄的“插入→書簽”中添加書簽并設(shè)置書簽名來(lái)實(shí)現(xiàn)。由圖2(a)模板示例可知,出具此份檢測(cè)報(bào)告需要輸入的信息有:檢測(cè)單號(hào)、產(chǎn)品名稱、型號(hào)規(guī)格、生產(chǎn)企業(yè)、檢測(cè)性質(zhì)、隨機(jī)號(hào)、檢測(cè)數(shù)據(jù)和樣品圖片,多數(shù)信息已通過(guò)2.1 節(jié)的代碼顯示在TextBox 控件中,將這些信息寫入檢測(cè)報(bào)告模板并保存的代碼如下:
上述代碼中,P1~P8 是在Word 文檔內(nèi)設(shè)置的書簽名,分別對(duì)應(yīng)需要寫入的數(shù)據(jù)Text1.Text~Text8.Text。數(shù)據(jù)自動(dòng)跟隨報(bào)告模板中的原有格式,無(wú)需通過(guò)編程設(shè)置。除了使用“.ActiveDocument.Bookmarks(‘書簽名’).Range.Text=Text1.Text”語(yǔ)句向書簽寫入數(shù)據(jù)外,還可以在菜單欄的“開發(fā)工具→舊式工具”中添加文本域窗體控件,該控件和書簽一樣起到定位的作用,向文本域控件寫入數(shù)據(jù)的代碼為“.ActiveDocument.FormFields(‘文本域名’).Result=Text1.Text”。利用此方式寫入的每個(gè)數(shù)據(jù)都是單獨(dú)的整體,導(dǎo)出后可以修改數(shù)據(jù)格式,但無(wú)法逐字編輯。
在Word 書簽位置插入圖片的方法與寫入數(shù)據(jù)略有不同,還需對(duì)圖片大小進(jìn)行設(shè)置,具體代碼如下:
圖片的尺寸可在控件Text10 和Text11 中自行設(shè)定,“Path”為圖片路徑,可使用Common?Dialog 控件將其具體路徑加載至控件Text9 中,代碼如下:
將數(shù)據(jù)庫(kù)文件、檢測(cè)報(bào)告Word 模板與VB工程放在同一文件夾下,在VB6.0 窗體中添加CommandButton、TextBox 和CommonDialog 控件,并在相應(yīng)的CommandButton 控件中編寫上述代碼,運(yùn)行程序便能獲得數(shù)據(jù)自動(dòng)生成的檢測(cè)報(bào)告,如圖2(b)所示。軟件的代碼編寫與操作流程實(shí)例詳見:https://list.youku.com/albumlist/show/id_68855948。
除了編寫程序代碼,設(shè)計(jì)軟件界面也十分重要。根據(jù)防火閥門檢測(cè)報(bào)告中的相關(guān)信息,設(shè)計(jì)軟件界面如圖3所示。
圖3 檢測(cè)報(bào)告生成系統(tǒng)界面圖
“查詢”按鈕下的程序代碼為2.1 節(jié)中連接Access 數(shù)據(jù)庫(kù)并讀取數(shù)據(jù)的VB 代碼,輸入檢測(cè)單號(hào)并點(diǎn)擊“查詢”按鈕,樣品信息逐一顯示在相應(yīng)位置;點(diǎn)擊“打開”按鈕彈出對(duì)話框,選中需要載入的圖片,TextBox 中出現(xiàn)圖片的具體路徑;輸入檢測(cè)數(shù)據(jù),設(shè)置圖片的寬度和高度,點(diǎn)擊“生成報(bào)告”按鈕,執(zhí)行2.2 節(jié)中VB寫入Word 文檔的代碼,將數(shù)據(jù)和圖片寫入新建的檢測(cè)報(bào)告模板中;點(diǎn)擊“報(bào)告另存為”按鈕,可自行設(shè)置報(bào)告的文件名及存儲(chǔ)路徑;記事板提供存儲(chǔ)功能,在其中編輯信息并點(diǎn)擊保存按鈕后關(guān)閉軟件,待下次啟動(dòng)時(shí),信息仍將顯示在記事板中。
檢測(cè)報(bào)告自動(dòng)生成系統(tǒng)經(jīng)過(guò)調(diào)試,能夠穩(wěn)定運(yùn)行并生成報(bào)告。安排六位檢驗(yàn)員分別使用此系統(tǒng)出具一份相同的檢測(cè)報(bào)告,并對(duì)其出具報(bào)告的時(shí)間進(jìn)行測(cè)試與分析。在六位檢驗(yàn)員中,甲、乙、丙為熟手,對(duì)報(bào)告出具流程十分熟悉;檢驗(yàn)員丁、戊、己為生手,未曾出具該樣品的檢測(cè)報(bào)告,測(cè)試數(shù)據(jù)如表1所示。表中,T1為人工錄入用時(shí);T2為系統(tǒng)操作用時(shí)。
表1 6位檢驗(yàn)員出具報(bào)告用時(shí)測(cè)試
由表1數(shù)據(jù)可知,使用人工錄入方式出具一份相同的報(bào)告,熟手所用的平均時(shí)間比生手快7.0 min;使用自動(dòng)生成系統(tǒng)出具檢測(cè)報(bào)告,熟手與生手用時(shí)相差不大;自動(dòng)生成系統(tǒng)為生手檢驗(yàn)員提供了更大的便利。
六位檢驗(yàn)員使用人工錄入方式出具一份報(bào)告的平均時(shí)間為13.4 min,使用系統(tǒng)操作的時(shí)間為5.7 min,效率比約為3∶7;采用檢測(cè)報(bào)告生成系統(tǒng)出具報(bào)告的效率比采用人工錄入方式高約135%。
本文基于VB 6.0 編程軟件設(shè)計(jì)了檢測(cè)報(bào)告的自動(dòng)生成系統(tǒng),對(duì)系統(tǒng)代碼的編寫與界面設(shè)計(jì)作了詳細(xì)介紹。系統(tǒng)通過(guò)VB 調(diào)用Access 數(shù)據(jù)庫(kù)信息,并將數(shù)據(jù)和圖片保存到Word 文檔中,以Access-VB-Word 的數(shù)據(jù)傳遞方式自動(dòng)生成檢測(cè)報(bào)告。對(duì)六位檢驗(yàn)員出具報(bào)告的時(shí)間進(jìn)行測(cè)試,結(jié)果顯示采用自動(dòng)生成系統(tǒng)出具報(bào)告的效率相比人工錄入方式高約135%,系統(tǒng)準(zhǔn)確、高效,具有一定的應(yīng)用價(jià)值。除了出具檢測(cè)報(bào)告外,在日常辦公中處理具有固定模板的Word 文檔,均可通過(guò)Access-VB-Word 方式快速插入數(shù)據(jù)與圖片,根據(jù)不同的模板與內(nèi)容設(shè)計(jì)代碼和界面即可。