張 旭,常蕓瑜,穆蘭芬,劉明明
(中國(guó)核動(dòng)力研究設(shè)計(jì)院 核反應(yīng)堆系統(tǒng)設(shè)計(jì)技術(shù)重點(diǎn)實(shí)驗(yàn)室,成都 610213)
在企業(yè)經(jīng)營(yíng)過程中,需定期進(jìn)行內(nèi)外部審查,確保質(zhì)量保證體系的有效運(yùn)行。審查的內(nèi)容會(huì)包括企業(yè)文件的“標(biāo)準(zhǔn)化”管理,即相關(guān)文件是否按程序文件規(guī)定的文件格式、編號(hào)要求,經(jīng)過了規(guī)定的校審核和簽署,并達(dá)到了規(guī)定的質(zhì)量要求等。
企業(yè)在內(nèi)外部審查的過程中,發(fā)現(xiàn)了文件的一些問題,包括簽署的時(shí)間錯(cuò)誤、工程號(hào)錯(cuò)誤、字體錯(cuò)誤、物理量單位的誤用、格式混亂等。這些文件標(biāo)準(zhǔn)化的問題在一定程度上給企業(yè)產(chǎn)品的質(zhì)量帶來了影響,為產(chǎn)品帶來質(zhì)量隱患。
基于上述情況,有必要開發(fā)一種文件質(zhì)量檢查的軟件來輔助提高文件的質(zhì)量,保證文件的一致性、準(zhǔn)確性。
通過調(diào)研,文件標(biāo)準(zhǔn)化包含以下方面的內(nèi)容:文件封面、簽署頁(yè)、頁(yè)面頁(yè)腳的標(biāo)識(shí),各級(jí)設(shè)計(jì)人員的資格是否符合有關(guān)規(guī)定,是否按規(guī)定進(jìn)行編制、校對(duì)和審批,文件編號(hào)、名稱、版本、密級(jí)、保存期限等標(biāo)識(shí),各章、節(jié)的標(biāo)題與正文中相應(yīng)章節(jié)的標(biāo)題是否一致,正文中的字體、字號(hào)、圖表等是否符合統(tǒng)一等。
經(jīng)統(tǒng)計(jì),在檢查上述內(nèi)容時(shí),常見的文件質(zhì)量問題有:
1)字體字號(hào)錯(cuò)誤。
2)圖表順序號(hào)錯(cuò)誤或格式錯(cuò)誤。
3)縮進(jìn)行距等格式有誤。
4) 物理單位使用錯(cuò)誤,比如“4 ~20mA 電流信號(hào)”應(yīng)寫作“4mA ~20mA 電流信號(hào)”等。
5)根據(jù)語境判斷英文字母與數(shù)字是否混用(如“o”“l(fā)”與數(shù)字“0”“1”)等。
除了要解決上述問題外,軟件工具還應(yīng)操作簡(jiǎn)單,盡可能簡(jiǎn)化使用流程與人機(jī)界面,能快速地查找出文件的標(biāo)準(zhǔn)化問題。
目前有一些文件格式排版工具類產(chǎn)品,如“Word 自動(dòng)排版軟件”“排版大師”等,不同的軟件工具實(shí)現(xiàn)的功能略有差異,但基本大同小異,其功能有:自動(dòng)處理段落、表格、圖形、頁(yè)眉頁(yè)碼、自動(dòng)檢查編號(hào)順序等。上述軟件都是基于Windows 平臺(tái)的Word 文檔進(jìn)行排版操作,適用于論文、標(biāo)書、設(shè)計(jì)文件等的自動(dòng)排版。上述功能基本可免費(fèi)下載使用,部分功能還需付費(fèi)使用,如:整理上下標(biāo)m2、H2O;統(tǒng)一kg、km,Pa,kPa、kw、kWh、kV 等單位符號(hào),規(guī)程規(guī)范標(biāo)準(zhǔn)名稱對(duì)比等。
上述各種軟件有兩方面的欠缺。其一,檢查規(guī)則不完全可配置,針對(duì)不同的格式規(guī)則的靈活性不夠;其二,一些種類的檢查工具需要將文件上傳至互聯(lián)網(wǎng),對(duì)于不能上傳至互聯(lián)網(wǎng)的內(nèi)部文件,不能使用該軟件。這兩個(gè)問題都是不可避免的嚴(yán)重問題。

圖1 軟件總體處理流程圖Fig.1 Software overall processing flowchart
另有一種格式排版軟件,其設(shè)計(jì)思路是,該工具的人機(jī)界面包含多個(gè)文本框,分別代表一級(jí)標(biāo)題、二級(jí)標(biāo)題、正文等,用戶將文字寫入該工具的各種文本框,再由該工具將每個(gè)文本框按其類型制作成Word 文檔。該方法對(duì)文檔格式識(shí)別不是由軟件讀取Word 文檔實(shí)現(xiàn)的,所以具備很高的準(zhǔn)確性,但是這也給用戶使用帶來了不方便,既不直觀,也帶來了附加工作量。同時(shí),在文件升版過程中,由于局部的增刪影響文件章節(jié)順序時(shí),用戶需重新向該工具的人機(jī)界面文本框粘貼文檔內(nèi)容,帶來了使用的不便。
目前在該領(lǐng)域的學(xué)術(shù)研究方面,主要包括基于XML方法及使用VBA 方式對(duì)Microsoft Word 軟件進(jìn)行開發(fā)的研究[1-3]。
為實(shí)現(xiàn)上述功能需求,軟件功能分為兩部分,即頁(yè)面基本信息檢查和智能檢查。其中,頁(yè)面基本信息檢查內(nèi)容包括:字體字號(hào)的檢查、圖表順序號(hào)和格式的檢查、頁(yè)眉頁(yè)腳的檢查、正文中縮進(jìn)、行間距的檢查等;智能檢查內(nèi)容較為繁雜,而且可以隨時(shí)更新標(biāo)準(zhǔn)庫(kù),包括:常見的英文縮略語檢查,通過上下文語境,進(jìn)行英文字母“o”“l(fā)”與數(shù)字“0”“1”的誤用情況的檢查,km 為單位數(shù)值達(dá)10萬以上的提醒等。
軟件的總體流程如圖1 所示。
在文件表觀檢查工具中制訂文件表觀樣式,形成標(biāo)準(zhǔn)Word 樣式庫(kù),其中涉及模糊判斷的標(biāo)準(zhǔn),形成正則表達(dá)式集合。文件編寫人員編寫完文件,選擇合適的樣式庫(kù),進(jìn)行文件的標(biāo)準(zhǔn)化檢查,檢查包括頁(yè)面基本信息檢查與正則匹配檢查,錯(cuò)誤結(jié)果將批注提醒作者修改。
1.4.1 技術(shù)路線
VSTO(Visual Studio Tools for Office)是一套可創(chuàng)建自定義Office 應(yīng)用程序的Visual Studio 工具包。基于VSTO 技術(shù),可使用Visual Basic 或C#語言擴(kuò)展Office 程序的功能。基于更加專業(yè)和強(qiáng)大的Visual Studio 開發(fā)環(huán)境,可實(shí)現(xiàn)比Office 中的Visual Basic Editor 界面更友好、功能更全面的程序開發(fā)。VSTO 具有可視化的設(shè)計(jì)器、更安全的托管代碼擴(kuò)展等一系列優(yōu)點(diǎn)。因此,選用VSTO 作為文件標(biāo)準(zhǔn)化檢查工具的技術(shù)路線。

圖2 新建項(xiàng)目Fig.2 New project

圖3 新建可視化設(shè)計(jì)器功能區(qū)模板Fig.3 New visual designer ribbon template

圖4 可視化設(shè)計(jì)器功能區(qū)設(shè)計(jì)圖Fig.4 Visual designer ribbon design

圖5 縮進(jìn)檢查功能流程圖Fig.5 Indentcheck function flowchart
1.4.2 界面設(shè)計(jì)與制作
在Visual Studio 中新建項(xiàng)目,選擇Office 模板中的“Word 2010 外接程序”模板。如圖2 所示。
然后增加人機(jī)界面,人機(jī)界面以Word 軟件中增加標(biāo)簽頁(yè)的形式實(shí)現(xiàn)。添加可視化設(shè)計(jì)器功能區(qū)模板,如圖3所示。
通過拖拽控件進(jìn)行菜單欄的設(shè)計(jì),可選擇的控件包括按鈕、組、勾選框、文本框等多種。本項(xiàng)目的人機(jī)界面功能需求較為簡(jiǎn)單,僅需要按鈕控件作為不同功能的選擇,將具體檢查功能的入口設(shè)置在按鈕控件的點(diǎn)擊事件中,另外使用組控件將功能按鈕分類。可視化設(shè)計(jì)器功能區(qū)如圖4 所示。
1.4.3 功能實(shí)現(xiàn)
以C#語言為例,引用動(dòng)態(tài)鏈接庫(kù)的方法如下:
using Word = Microsoft.Office.Interop.Word;
using Microsoft.Office.Tools.Ribbon;
Application 對(duì)象可代表Word 應(yīng)用程序,定義并獲取Application 對(duì)象的方法如下:
Word.Application app = Globals.ThisAddIn.Application;
具體檢查功能由對(duì)應(yīng)的按鈕Click 事件觸發(fā)。“基礎(chǔ)項(xiàng)綜合檢查”與“高級(jí)項(xiàng)綜合檢查”是多項(xiàng)檢查功能的結(jié)合,實(shí)現(xiàn)方法類似。
以縮進(jìn)檢查功能為例,介紹檢查功能的處理邏輯。縮進(jìn)檢查功能流程圖如圖5 所示。
縮進(jìn)功能指正文的每個(gè)段落要縮進(jìn)2 個(gè)字符,實(shí)現(xiàn)該功能最主要的難度在于排除不需要考慮縮進(jìn)要求的對(duì)象。不需要考慮正文縮進(jìn)格式的項(xiàng)目包括各級(jí)標(biāo)題、圖表名稱(如“圖1 圖名”)、只有一個(gè)圖片、Visio 對(duì)象或SmartArt圖形的段落等此類對(duì)象、帶有編號(hào)或項(xiàng)目符號(hào)的對(duì)象。

圖6 軟件效果圖Fig.6 Software rendering
在進(jìn)行縮進(jìn)檢查時(shí),逐段遍歷段落對(duì)象,源碼示例如下:
foreach (Word.Paragraph para in app.ActiveDocument.Paragraphs){……}
考慮到非首次使用檢查功能的情況(如已檢查出錯(cuò)誤,再次檢查修改后的文件),為避免用戶需要在修改格式后還必須手動(dòng)刪除報(bào)錯(cuò)的批注,在進(jìn)行檢查前,應(yīng)刪除文件中此類報(bào)錯(cuò)批注,然后再進(jìn)行檢查。
排除不需要考慮縮進(jìn)要求的對(duì)象時(shí),圖表名稱可使用正則表達(dá)式判斷,源碼示例如下:
public static bool CheckPictureTableNameReg(string text)
{
Regex Re = new Regex("[圖|表][0-9]+[ ]");return Re.IsMatch(text);
}
在確定該段落應(yīng)進(jìn)行首行縮進(jìn)檢查后,進(jìn)行檢查,對(duì)于判斷縮進(jìn)不符合規(guī)范的段落對(duì)象增加批注“縮進(jìn)錯(cuò)誤”,源碼示例如下:
if (para.Format.FirstLineIndent != 24)
{
object comment = "縮進(jìn)有誤";
para.Range.Comments.Add(para.Range, ref comment);
}

圖7 檢查結(jié)果示意圖Fig.7 Schematic diagram of inspection results
加載后Word 軟件標(biāo)簽欄會(huì)增加一個(gè)標(biāo)簽,效果如圖6所示,點(diǎn)擊下面各種按鈕,對(duì)應(yīng)執(zhí)行各組功能。
檢查結(jié)束后,格式錯(cuò)誤之處會(huì)被批注提醒,如圖7 所示。
基于VSTO 技術(shù)的文件標(biāo)準(zhǔn)化檢查工具,能夠以Microsoft Word 軟件中標(biāo)簽頁(yè)插件的形式呈現(xiàn)檢查功能的人機(jī)界面,既能實(shí)現(xiàn)基本頁(yè)面格式的檢查,也可實(shí)現(xiàn)部分能智能化檢查功能。該工具實(shí)現(xiàn)了標(biāo)準(zhǔn)化檢查的需求,同時(shí)滿足了使用簡(jiǎn)便、人機(jī)界面簡(jiǎn)潔的要求。對(duì)于提高文件質(zhì)量、文件嚴(yán)肅性、工程安全具有重要意義。