王炎舜
摘 要:在某型產(chǎn)品研制過程中,其性能指標需要進行全面測試。過去,測試結(jié)果通常采用手工填寫方式,但是存在效率低、費時費力、容易出錯等問題。本研究采用對象鏈接與嵌入技術(shù),在VC++平臺下操作Excel表格,實現(xiàn)產(chǎn)品測試結(jié)果的批量輸出和圖表繪制功能,大幅度提升某型產(chǎn)品測試數(shù)據(jù)輸出的準確性,提高產(chǎn)品測試數(shù)據(jù)分析及交付效率。
關(guān)鍵詞:對象鏈接與嵌入技術(shù);VC++;測試數(shù)據(jù)輸出
中圖分類號:TP311文獻標識碼:A文章編號:1003-5168(2020)08-0031-03
Application of Object Linking and Embedding Technology
in Product Test Output
WANG Yanshun
(China Air-to-Air Missile Research Institute,Luoyang Henan 471000)
Abstract: During the development of a certain type of product, its performance indicators need to be thoroughly tested. In the past, test results were usually filled in manually, but there were problems such as low efficiency, time-consuming and labor-intensive, and error-prone. This research used object linking and embedding technology to operate Excel tables under the VC ++ platform to realize the batch output and chart drawing functions of product test results, greatly improving the accuracy of product test data output, and improving the efficiency of product test data analysis and delivery.
Keywords: object linking and embedding technology;VC ++;test data output
某型產(chǎn)品具有復(fù)雜的技術(shù)指標體系,性能測試期間會產(chǎn)生包含大量參數(shù)的測試文件,人們需要將測試數(shù)據(jù)填寫到測試記錄Excel表格中。針對同一批次產(chǎn)品的測試數(shù)據(jù),人們需要編寫數(shù)據(jù)分析報告;對于各產(chǎn)品某些關(guān)鍵數(shù)據(jù),需要繪制散圖類型的圖表來分析該批次產(chǎn)品質(zhì)量情況。以往采用手動方式將測試數(shù)據(jù)填入測試記錄卡并繪制測試數(shù)據(jù)散點圖,任務(wù)量大,效率低且容易出錯。本文采用對象鏈接與嵌入(Object Linking and Embedding,OLE)技術(shù),最終實現(xiàn)產(chǎn)品測試記錄自動化填寫及測試數(shù)據(jù)圖表生成。
1 OLE技術(shù)簡介
OLE技術(shù)是一種交互進程間的通信技術(shù),可以使開發(fā)者利用封裝好的對象進行程序間的信息傳遞與操作,已逐漸發(fā)展成為一種基于對象的動態(tài)交互組件規(guī)范。該技術(shù)利用組件對象模型(COM)完成不同程序間的訪問與操作,可以使組件自身的對象與其方法被方便地調(diào)用[1]。在該技術(shù)中,被調(diào)用方是OLE服務(wù)器端,調(diào)用方是客戶端(或容器),調(diào)用的各個項目是OLE對象[2]。Microsoft Office的Excel軟件就是一個OLE服務(wù)器,在VC++平臺可以用MFC程序完成對Excel的操作,使其完成測試記錄表的輸出和數(shù)據(jù)對比圖表的生成。
2 測試記錄模板和流程設(shè)計
某型產(chǎn)品測試所保存的測試數(shù)據(jù)為二進制文件,結(jié)合測試數(shù)據(jù)格式和測試項目分類,依據(jù)不同測試數(shù)據(jù)集的文件名稱區(qū)分測試項目,填入預(yù)先設(shè)計好的測試記錄表模板,如圖1所示。
測試數(shù)據(jù)批量自動化輸出的流程為:首先開啟Excel服務(wù)打開模板,之后選取需要填入測試表的測試項目,直到所有需要填寫的項目填寫完畢,隨后進行超差數(shù)據(jù)標紅與缺項統(tǒng)計,最后保存輸出完成的測試記錄表。整個測試記錄數(shù)據(jù)輸出操作流程如圖2所示。
3 測試記錄批量輸出實現(xiàn)
Excel作為OLE自動化服務(wù)器,其中有許多OLE對象可以被客戶端應(yīng)用程序調(diào)用。常見的操作對象包括:應(yīng)用對象Application、工作簿對象WorkBook、工作列表對象WorkSheet、單元格對象Range等。
要操縱Excel的對象并調(diào)用其方法,首先需要在工程中添加Excel類庫。在Excel 2013中,類庫文件為默認安裝路徑中的Excel.exe文件,即C:\Program Files\Microsoft\Office 15\Excel.exe。通過VC++平臺的類向?qū)В–lassWizard)選擇目標類庫后,選擇所要添加的對象類,即可生成包含所選對象類的excel.cpp文件和excel.h頭文件,然后自動添加到開發(fā)工程。完成類庫的添加后,可以進行應(yīng)用程序的工程開發(fā)。
對OLE服務(wù)器(即Excel對象)的調(diào)用分為以下幾個步驟。
3.1 OLE服務(wù)初始化
OLE初始化在CmyApp::InitInstance()中完成,初始化代碼如下:
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}
如果OLE服務(wù)初始化成功,則AfxOleInit()返回一個非零值,否則返回值為0。
3.2 創(chuàng)建Excel服務(wù)
操作Excel進行表格填寫和圖表操作需要的對象類為應(yīng)用對象_Application、工作簿集合Workbooks、工作簿_Workbook、工作表單集合Worksheets、工作表單_Worksheet、單元格Range、圖表對象集合ChartObjects、圖表對象_Chart等。使用各對象前需要定義對象實例,同時定義COleVariant類型的默認參數(shù)如(covOptional等)和LPDISPATCH類型的接口指針。創(chuàng)建Application對象的代碼如下:
if (!app.CreateDispatch("Excel.Application"),NULL)
{
AfxMessageBox("創(chuàng)建Excel服務(wù)失?。?);
return;
}
app.SetVisible(TRUE);
須使用SetVisible方法設(shè)置,對用戶可見,否則創(chuàng)建的服務(wù)無法正常關(guān)閉,也無法創(chuàng)建新的服務(wù)。
3.3 相關(guān)對象的關(guān)聯(lián)調(diào)用
根據(jù)操作方式的不同,對工作簿book對象的關(guān)聯(lián)分為兩種:一是添加新的工作簿到工作簿集合,即新建空白Excel文檔進行操作;二是打開預(yù)定Excel文檔進行關(guān)聯(lián)操作。前者使用Add方法完成新建文檔并關(guān)聯(lián)的操作,后者使用Open方法打開預(yù)設(shè)路徑的文檔。本文使用后一種方法來打開設(shè)計好的測試記錄表模板進行操作,相關(guān)代碼如下:
books=app.GetWorkbooks();
::GetCurrentDirectory(MAX_PATH,path);
strPath.Format(“%s”,path);
strPath += “\\Template.xlsx”;
lpDisp=books.Open(fileName,
covOptional,covOptional,covOptional,covOptional,
covOptional,covOptional,covOptional,covOptional,
covOptional,covOptional,covOptional,covOptional,
covOptional,covOptional
);
ASSERT(lpDisp);
book.AttachDispatch(lpDisp);
工作表單集合使用工作簿的GetSheets方法得到,工作表單則通過GetItem方法傳入表單頁索引sheetNum獲取,代碼如下:
Sheets =book.GetSheets();
Sheet=sheets.GetItem(COleVariant((short)sheetNum));
獲取單元格range的關(guān)聯(lián)操作可以通過range對象的AttachDispatch方法得到工作表單sheet內(nèi)的所有單元格,也可以通過sheet對象的GetRange方法傳入表格單元格的索引范圍。使用前者方法得到范圍后,使用SetItem方法輸入坐標索引和設(shè)定值,可以填寫單元格,后者通過SetValue2方法設(shè)定單元格范圍內(nèi)的值。因為需要填寫固定的單元格,后者更便于格式化表格索引參數(shù),故選用GetRange方法實現(xiàn)單元格的填寫,相關(guān)代碼如下:
//格式化單元格索引
strRange.Format(“I%d”,i);
//設(shè)置單元格
Range=sheet.GetRange(COleVariant(strRange), COleVariant(strRange));
//填寫單元格
Range.SetValue2(COleVariant(m_value));
3.4 釋放各個調(diào)用對象
在對各對象完成操作后,需要依次釋放各個對象,否則會出現(xiàn)無法再次進行Excel服務(wù)注冊的錯誤。
4 數(shù)據(jù)分析圖表生成方法
生產(chǎn)報告所需圖表是一組測試數(shù)據(jù)的針對某些指標的散點圖,在選取多組數(shù)據(jù)后,調(diào)用OLE服務(wù)寫入Excel并完成圖表生成。打開文檔,使用CfileDIalog類生成一個模態(tài)對話框來選取多組測試數(shù)據(jù),再將所需指標數(shù)據(jù)寫入Excel文檔,操作寫入單元格的方法同上一節(jié)表格輸出。
生成圖表使用ChartObjections、ChartObjection和_Chart類來完成,從工作表單到圖表對象層層關(guān)聯(lián),最后獲得圖表對象的關(guān)聯(lián)[3]。相關(guān)代碼如下:
Double left = 50, top = 100, width = 800, height = 300;//圖表坐標與寬高
lpDisp = sheet.ChartObjects(covOptional);
chartobjects.AttachDispatch(lpDisp);
chartobject = chartobjects.Add(left, top, width, height);
chart.AttachDispatch(chartobject.GetChart());
chart.SetChartType(-4169);//散點圖類型常量
關(guān)聯(lián)后,用ChartWizard方法傳入相關(guān)參數(shù)生成圖表,相關(guān)代碼如下:
lpDisp = sheet.GetRange(_variant_t(“D1”0, _variant_t(“D9”));
var.pdisVal = lpDisp;
chart.ChartWizard(var,// Source
covOptional,//Gallery
covOptional,//Format
COleVariant((short)2),//PlotBy
covOptional,//CategoryLabels
covOptional,//SeriesLabels
COleVariant((short)FALSE),//HasLegend
COleVariant(“title”),//Title
COleVariant(“x_title”),//CategoryTitle
COleVariant(“y_title”),//ValueTitles
covOptional//ExtraTitle
);
其中,PlotBy為0按行取值,為1則按列取值;HasLegend表示是否需要圖例,Tile、CategTile和ValueTile可以分別設(shè)置圖表標題、[X]軸標題和[Y]軸標題,其余參數(shù)項填入默認參數(shù)。生成圖表效果如圖3所示。
5 結(jié)語
本文通過采用OLE技術(shù)實現(xiàn)了某型產(chǎn)品測試記錄表的自動化輸出和批次測試數(shù)據(jù)的圖表生成。以往依靠手工完成的數(shù)據(jù)填寫和繪制任務(wù)需要耗時幾十分鐘,使用自動化技術(shù)完成僅需數(shù)分鐘,該技術(shù)在某型產(chǎn)品的生產(chǎn)交付測試中得到了良好應(yīng)用,并已推廣到類似產(chǎn)品的測試工作中,工作效率大幅度提升。
參考文獻:
[1]呂靜.基于OLE自動化實現(xiàn)Excel動態(tài)報表[J].電腦知識與技術(shù),2017(9):180-181.
[2]朱晗.基于對象鏈接與嵌入技術(shù)的數(shù)據(jù)校驗系統(tǒng)的設(shè)計與實現(xiàn)[D].武漢:華中科技大學,2016.
[3]劉志江,羅欣,周博,等.VC++平臺下基于OLE技術(shù)的Excel圖表自動化輸出[J].煤礦機械,2013(8):272-275.