999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

AutoCAD結(jié)構(gòu)化表單與Excel數(shù)據(jù)交換方法研究

2017-12-12 20:29:29張向良
科技創(chuàng)新與應(yīng)用 2017年34期
關(guān)鍵詞:二次開發(fā)

張向良

摘 要:Excel與AutoCAD表單是工作中常見(jiàn)的兩種工具,由于AutoCAD與Excel屬于兩個(gè)不同的信息系統(tǒng),傳統(tǒng)的人工填寫的工作方式已經(jīng)使得AutoCAD與Excel之間的信息交互越來(lái)越難以滿足工作需求。文章將探討在AutoCAD結(jié)構(gòu)化表單與Excel之間進(jìn)行高效數(shù)據(jù)交換的方法,介紹OLE、Excel對(duì)象模型、AutoCAD圖形數(shù)據(jù)庫(kù)結(jié)構(gòu)等前置技術(shù)知識(shí)以及數(shù)據(jù)交換的具體實(shí)現(xiàn)方式,以期為相關(guān)的數(shù)據(jù)采集工作提供高效的解決方案。

關(guān)鍵詞:Excel;AutoCAD;結(jié)構(gòu)化表單;OLE;ObjectARX;二次開發(fā)

中圖分類號(hào):TP399 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):2095-2945(2017)34-0093-02

引言

Excel作為最為人所熟悉的數(shù)據(jù)統(tǒng)計(jì)工具,被很多企業(yè)選擇與使用,而AutoCAD在工程中的應(yīng)用同樣極為廣泛。很多時(shí)候需要在這兩個(gè)平臺(tái)間傳遞數(shù)據(jù),以作者所在的航空制造業(yè)某部門為例,工作時(shí)就需要將保存于AutoCAD圖表中的產(chǎn)品信息錄入到Excel服務(wù)器中,這些數(shù)據(jù)在后一平臺(tái)上進(jìn)行集中管理。本文將探討在AutoCAD與Excel兩平臺(tái)間自動(dòng)交換數(shù)據(jù)的方法,以及如何在基于ObjectARX(VC)開發(fā)的程序中實(shí)現(xiàn)。該方法用程序代替人工操作,在為設(shè)計(jì)人員提供方便的同時(shí)也保證了數(shù)據(jù)采集的可靠性。

1 運(yùn)行環(huán)境概述

Excel是Microsoft發(fā)布的一款廣為人知的數(shù)據(jù)統(tǒng)計(jì)工具。本文討論Excel與AutoCAD圖表的數(shù)據(jù)交換,未涉及Excel的其它定制功能.結(jié)構(gòu)化AutoCAD表單是在AutoCAD圖形中加入帶有附加信息的圖元,如擴(kuò)展數(shù)據(jù)、擴(kuò)展記錄、自定義實(shí)體、塊參照等。以帶屬性的塊參照為例,由于屬性是一種包含了標(biāo)簽、提示和值的結(jié)構(gòu)體,而不像普通的文字或多行文字那樣只有一個(gè)值,這使得計(jì)算機(jī)能夠“理解”用戶所輸入的內(nèi)容(而不是簡(jiǎn)單地將其視為一個(gè)字符串)。這為后期的數(shù)據(jù)采集與分析提供了極大的方便。

由于windows會(huì)為每個(gè)進(jìn)程分配獨(dú)立的地址空間(用戶空間),進(jìn)程不能夠以任何方式讀寫其他進(jìn)程用戶空間的數(shù)據(jù)[1]。即使使用系統(tǒng)API,也無(wú)法確定所需要讀、寫的數(shù)據(jù)的地址。所以需要使用一種能夠跨越進(jìn)程邊界通信的方法,即OLE技術(shù)。

2 OLE技術(shù)與Excel對(duì)象模型

基于COM的OLE2(業(yè)內(nèi)簡(jiǎn)稱OLE)是一種Microsoft推出的一種windows下的對(duì)象通信技術(shù),經(jīng)過(guò)多年的擴(kuò)充和演化,現(xiàn)已變成了在桌面系統(tǒng)上進(jìn)行程序通信的一個(gè)技術(shù)總稱[2]。使用OLE方式讀寫Excel,需要首先創(chuàng)建一個(gè)Excel對(duì)象(或通過(guò)其它途徑獲得一個(gè)),然后通過(guò)Excel預(yù)留的接口調(diào)用它所提供的服務(wù),就像Excel本身在操作單元格一樣。

為此需要了解Excel的程序結(jié)構(gòu),也就是對(duì)象模型。Microsoft在Excel 2007開發(fā)人員參考中提供了Excel對(duì)象模型參考,詳細(xì)地描述了各種對(duì)象的屬性和方法。對(duì)于讀寫Excel而言需要用到其中的3對(duì)象:_Application、_Worksheet和Range。_Application代表Excel應(yīng)用程序,一個(gè)_Application 對(duì)象中包含若干個(gè)工作簿_Workbook,后者又包含多個(gè)工作表_Worksheet,而Range則代表一個(gè)區(qū)域,當(dāng)然也可以是1個(gè)單元格,如圖1。

首先需要獲得_Application對(duì)象,進(jìn)而使用其AttachDispatch函數(shù)獲得_Worksheet對(duì)象、Range對(duì)象,然后便可使用SetItem和GetItem函數(shù)讀寫單元格里的內(nèi)容。

3 AutoCAD圖形數(shù)據(jù)庫(kù)

讀寫結(jié)構(gòu)化的AutoCAD表單需要了解AutoCAD圖形數(shù)據(jù)庫(kù)的結(jié)構(gòu)。每個(gè)承載表單的dwg文件就是一個(gè)AutoCAD圖形數(shù)據(jù)庫(kù)AcDbDatabase[3],其中包含了塊表AcDbBlockTable,塊表中包含了模型空間ACDB_MODEL_SPACE,而用戶所繪制的圖形、文字等實(shí)體就存在于模型空間中。

ObjectARX(VC)提供了相關(guān)的類庫(kù)與函數(shù)來(lái)訪問(wèn)上述對(duì)象。首先獲得當(dāng)前活動(dòng)圖形數(shù)據(jù)庫(kù)的塊表,獲得包含結(jié)構(gòu)化數(shù)據(jù)的塊定義,然后檢索模型空間中的此塊定義的塊參照AcDbBlockReference。需要讀取的數(shù)據(jù),也就是屬性AcDbAttribute的值,就包含在這些塊參照中。

4 數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)

至此已經(jīng)擁有了外部讀寫Excel和讀寫結(jié)構(gòu)化AutoCAD表單中數(shù)據(jù)的方法。只需設(shè)計(jì)編寫承載數(shù)據(jù)的載體,將上述三者連接起來(lái)封裝成命令,便可以實(shí)現(xiàn)結(jié)構(gòu)化AutoCAD表單與Excel之間的一鍵式數(shù)據(jù)交換.命令通過(guò)以下步驟實(shí)現(xiàn):(1)使用OLE方式獲得Excel實(shí)例。(2)讀取結(jié)構(gòu)化AutoCAD表單,將數(shù)據(jù)存入中繼數(shù)據(jù)結(jié)構(gòu)。(3)讀寫Excel與寫入AutoCAD表單,如圖2。

所述的步驟(1)使用OLE方式獲得Excel實(shí)例:首先獲得_Application對(duì)象的COM類型標(biāo)識(shí)符,之后COM庫(kù)會(huì)從系統(tǒng)注冊(cè)表中找到對(duì)應(yīng)組件的程序路徑等信息,用以獲取運(yùn)行中的Excel實(shí)例的IUnkown接口,并通過(guò)該接口查詢到IDispatch接口。部分代碼如下:

CLSIDFromProgID(L"Excel.Application", &clsid);

GetActiveObject(clsid, NULL, (IUnknown**)&pUnk);

pUnk->QueryInterface(IID_IDispatch, (void**)&pDisp);

...

再用_Application對(duì)象的AttachDispatch函數(shù)獲得_Worksheet對(duì)象,進(jìn)而Range對(duì)象。在此不再贅述。endprint

步驟(2)讀取結(jié)構(gòu)化AutoCAD表單:首先獲得當(dāng)前活動(dòng)圖形數(shù)據(jù)庫(kù)的塊表,獲得包含結(jié)構(gòu)化數(shù)據(jù)的塊定義,然后檢索模型空間中的此塊定義的塊參照AcDbBlockReference。建立一個(gè)屬性遍歷器,遍歷塊參照中的屬性,根據(jù)屬性的標(biāo)簽不同把它的值用textString函數(shù)讀入到TemplateItem結(jié)構(gòu)對(duì)應(yīng)的變量中。部分代碼如下:

attIt = pBlkRef->attributeIterator();

for (attIt->start();!attIt->done();attIt->step())

{

es = acdbOpenObject(pAtt,attIt->objectId(),AcDb::kForRead);

if (es==Acad::eOk)

{

CString strTag = pAtt->tag();

if (strTag.CompareNoCase(_T("序列號(hào)"))==0)

XuLieHao = pAtt->textString();

...

pAtt->close();

}

}

delete attIt;

...

步驟(3)讀寫Excel與寫入AutoCAD表單:根據(jù)Excel表單的要求使用SetItem函數(shù)讀寫單元格,內(nèi)容取決于中繼數(shù)據(jù)結(jié)構(gòu)TemplateItem中封裝的函數(shù)。在向Excel寫入數(shù)據(jù)后,還應(yīng)用GetItem讀取相關(guān)信息并回寫到AutoCDA圖形數(shù)據(jù)庫(kù)中。

5 結(jié)束語(yǔ)

本文針對(duì)AutoCAD與Excel之間數(shù)據(jù)交互效率低的問(wèn)題探討了使用基于ObjectARX(VC)開發(fā)的程序讀取結(jié)構(gòu)化AutoCAD表單中的數(shù)據(jù),并使用OLE技術(shù)將之導(dǎo)入Excel的方法。整個(gè)過(guò)程全部由程序自動(dòng)完成,極大地提高了工作效率,同時(shí)避免了人工操作可能出現(xiàn)的種種失誤,為相關(guān)數(shù)據(jù)采集工作提供了高效的解決方案。

參考文獻(xiàn):

[1]王艷平,張錚.Windows程序設(shè)計(jì)(第2版)[M].人民郵電出版社,2008.

[2]余英,梁剛.VisualC++實(shí)踐與提高COM和COM+篇[M].中國(guó)鐵道出版社,2001.

[3]張帆,朱文俊.AutoCAD ObjectARX(VC)開發(fā)基礎(chǔ)與實(shí)例教程[M].中國(guó)電力出版社,2014.endprint

猜你喜歡
二次開發(fā)
淺談基于Revit平臺(tái)的二次開發(fā)
甘肅科技(2020年20期)2020-04-13 00:30:02
西門子Operate高級(jí)編程的旋轉(zhuǎn)坐標(biāo)系二次開發(fā)
淺談Mastercam后處理器的二次開發(fā)
模具制造(2019年3期)2019-06-06 02:11:02
基于C#的AutoCAD建筑構(gòu)件庫(kù)二次開發(fā)
江西建材(2018年2期)2018-04-14 08:01:14
西門子Easy Screen對(duì)倒棱機(jī)床界面二次開發(fā)
基于全站儀二次開發(fā)的覆冰厚度測(cè)量與實(shí)現(xiàn)
Micaps3.2 版本二次開發(fā)入門淺析
西藏科技(2015年12期)2015-09-26 12:13:51
基于VB的ANSYS二次開發(fā)在變壓器抗短路性能分析中的應(yīng)用
基于CATIA的橡皮囊成形毛料展開的二次開發(fā)
ANSYS Workbench二次開發(fā)在汽車穩(wěn)定桿CAE分析中的應(yīng)用
汽車零部件(2014年5期)2014-11-11 12:24:32
主站蜘蛛池模板: 国产精品观看视频免费完整版| 亚洲国产在一区二区三区| 亚洲人成在线精品| 亚洲人成日本在线观看| 国产无码精品在线| 尤物精品国产福利网站| 亚洲天堂成人在线观看| 欧美一区二区自偷自拍视频| 亚洲成aⅴ人在线观看| 国产黄网永久免费| 永久免费无码成人网站| 啪啪永久免费av| 超级碰免费视频91| 无码中文字幕精品推荐| 无码国内精品人妻少妇蜜桃视频| 国产真实乱子伦精品视手机观看 | 国内精品91| 亚洲精品视频免费看| 香蕉网久久| 亚洲天天更新| 凹凸国产熟女精品视频| 69av在线| 大香网伊人久久综合网2020| 日本久久网站| 91精品久久久久久无码人妻| 日韩欧美综合在线制服| 亚洲国产日韩在线成人蜜芽| 久久青青草原亚洲av无码| 亚洲综合一区国产精品| 国产精品v欧美| 99一级毛片| 亚洲综合色在线| 欧美日韩一区二区三| 国产黑丝视频在线观看| 欧美97色| 无码中文字幕乱码免费2| 综合人妻久久一区二区精品 | 亚洲精品免费网站| 毛片免费高清免费| 毛片免费在线| 亚洲精品动漫| 欧美一级高清视频在线播放| 亚洲天堂精品视频| 一级毛片免费观看久| 99热6这里只有精品| 午夜欧美理论2019理论| 中文字幕乱妇无码AV在线 | 欧美视频在线播放观看免费福利资源 | 国产成人无码综合亚洲日韩不卡| 国内精品自在自线视频香蕉| 日韩av无码精品专区| 狠狠躁天天躁夜夜躁婷婷| 欧日韩在线不卡视频| 韩日无码在线不卡| 日本成人福利视频| 1024国产在线| 无码AV高清毛片中国一级毛片| 亚洲人成网址| 国产在线无码av完整版在线观看| 国产成人久久综合一区| 无码精油按摩潮喷在线播放 | 国产手机在线小视频免费观看 | 亚洲三级视频在线观看| 久久窝窝国产精品午夜看片| 就去色综合| 久久精品嫩草研究院| 国产香蕉在线视频| 99热最新在线| 欧美日韩北条麻妃一区二区| 伊人网址在线| 国产免费a级片| 国产福利一区视频| 天堂成人av| 欧美另类图片视频无弹跳第一页| 人妻出轨无码中文一区二区| 91精品国产情侣高潮露脸| 在线国产毛片| 欧美激情视频二区| 在线国产毛片| 亚洲日本韩在线观看| 免费精品一区二区h| 国产网站一区二区三区|