亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Excel VBA在SATWE構(gòu)件應(yīng)力計(jì)算中的應(yīng)用

        2014-04-08 12:06:06
        有色金屬設(shè)計(jì) 2014年4期
        關(guān)鍵詞:窗體字符串單元格

        沈 超

        (昆明有色冶金設(shè)計(jì)研究院股份公司,云南昆明650051)

        0 引 言

        進(jìn)入21世紀(jì),高層建筑在國(guó)內(nèi)發(fā)展迅速,設(shè)計(jì)思想和結(jié)構(gòu)體系不斷更新并日趨多樣化,這也給高層結(jié)構(gòu)的設(shè)計(jì)與分析提出了更高的要求。在高層結(jié)構(gòu)設(shè)計(jì)中,構(gòu)件的應(yīng)力分析是一個(gè)重要環(huán)節(jié),PKPM軟件的有限元分析模塊“SATWE”在高層建筑的構(gòu)件應(yīng)力分析方面被廣泛應(yīng)用。

        實(shí)際工作中,結(jié)構(gòu)設(shè)計(jì)師需對(duì)數(shù)據(jù)進(jìn)一步分析、計(jì)算。雖然SATWE可將構(gòu)件的數(shù)據(jù)導(dǎo)出為文本文件,但對(duì)數(shù)據(jù)進(jìn)行手工分析,不僅耗時(shí)還容易出錯(cuò),此種情況下通過(guò)編程來(lái)對(duì)導(dǎo)出的信息和數(shù)據(jù)進(jìn)行分析計(jì)算,程序不需要復(fù)雜的功能和結(jié)構(gòu),“數(shù)據(jù)讀取——處理——結(jié)果輸出”的三步驟模式即可。因此,選擇一個(gè)功能滿(mǎn)足要求且簡(jiǎn)單、適用的平臺(tái)來(lái)進(jìn)行程序編寫(xiě)無(wú)疑可以提升工作效率,而Excel VBA是可選方案之一。

        文章從編程的角度簡(jiǎn)述了Excel VBA具備的優(yōu)勢(shì),介紹了如何對(duì)SATWE導(dǎo)出文件中的數(shù)據(jù)和信息進(jìn)行利用。分析了“文件打開(kāi)及文本讀取”、“中間計(jì)算”及“結(jié)果顯示”三個(gè)過(guò)程可能涉及到的編程元素,最后對(duì)程序的設(shè)計(jì)、編碼提出建議。

        1 Excel VBA在分析計(jì)算中的優(yōu)勢(shì)

        VBA是上世紀(jì)90年代出現(xiàn)的微軟Office平臺(tái)二次開(kāi)發(fā)工具,Excel VBA是成員之一。雖然在今天看來(lái)它無(wú)論語(yǔ)言特性及功能均無(wú)法與當(dāng)下主流的開(kāi)發(fā)平臺(tái)同日而語(yǔ),甚至微軟公司也推薦使用VSTO取代VBA作為Office下新的開(kāi)發(fā)工具。但對(duì)于SATWE的構(gòu)件信息分析計(jì)算,Excel VBA依然具備以下優(yōu)勢(shì):①適用于普通的分析計(jì)算。對(duì)SATWE構(gòu)件數(shù)據(jù)的計(jì)算,即非專(zhuān)業(yè)軟件開(kāi)發(fā)且不涉及復(fù)雜的數(shù)值計(jì)算,沒(méi)有了繁復(fù)的對(duì)象間邏輯關(guān)系及處理流程。能支持面向過(guò)程編程并且有一定數(shù)據(jù)精確度的語(yǔ)言都可以勝任此類(lèi)程序的開(kāi)發(fā),VBA完全可以滿(mǎn)足上述要求。②簡(jiǎn)單易學(xué)、功能強(qiáng)大。VBA是VB語(yǔ)言的子集,包含了VB常用的語(yǔ)法,放棄了一些復(fù)雜的語(yǔ)言特性。對(duì)于非專(zhuān)業(yè)編程人員,學(xué)習(xí)VBA要比學(xué)習(xí)主流的編程語(yǔ)言更加容易。同時(shí),作為基于對(duì)象的編程語(yǔ)言,VBA除可以訪(fǎng)問(wèn)Excel內(nèi)部的諸多功能,也可以訪(fǎng)問(wèn)Windows文件系統(tǒng)等外部對(duì)象,具備Windows窗體顯示等能力,可以勝任一些需求較高的編程場(chǎng)合,至今依然是非專(zhuān)業(yè)編程領(lǐng)域的重要工具。③Excel的平臺(tái)優(yōu)勢(shì)。Excel本身就是專(zhuān)門(mén)的數(shù)值處理工具,原生具備強(qiáng)大而豐富的數(shù)值處理能力。Excel VBA可以直接調(diào)用Excel內(nèi)置的函數(shù)和對(duì)象,通過(guò)編程實(shí)現(xiàn)絕大部分Excel功能,這一便利性是許多編程語(yǔ)言所不具備的。④易于開(kāi)發(fā)和部署。作為VBA成員之一的Excel VBA其開(kāi)發(fā)環(huán)境已經(jīng)內(nèi)嵌在Excel軟件之中,無(wú)需單獨(dú)安裝,編碼及調(diào)試較為便利。開(kāi)發(fā)完成的程序以“帶宏的Excel表格”形式發(fā)布,無(wú)需安裝。

        在了解了VBA的優(yōu)勢(shì)之后,下面將討論如何將Excel VBA運(yùn)用到SATWE構(gòu)件數(shù)據(jù)的分析計(jì)算中。

        2 導(dǎo)出文件讀取

        從SATWE導(dǎo)出文件中包含了構(gòu)件有關(guān)的文本說(shuō)明及數(shù)據(jù)。要識(shí)別并利用這些信息需要用到Excel VBA的外部文件訪(fǎng)問(wèn)對(duì)象、對(duì)話(huà)框及文本讀取對(duì)象。首先,要了解導(dǎo)出文件的內(nèi)容構(gòu)成。

        2.1 導(dǎo)出文件內(nèi)容構(gòu)成

        SATWE導(dǎo)出的構(gòu)件信息文件由4個(gè)部分組成:①構(gòu)件幾何材料信息;②標(biāo)準(zhǔn)內(nèi)力信息;③構(gòu)件設(shè)計(jì)驗(yàn)算信息;④荷載組合分項(xiàng)系數(shù)說(shuō)明,每個(gè)部分均包含有文本信息及數(shù)據(jù)。

        2.2 文件名獲取

        打開(kāi)一個(gè)SATWE構(gòu)件信息文件應(yīng)先取得包含完整路徑的文件名稱(chēng)。既可以采用系統(tǒng)默認(rèn)的名稱(chēng)(如:MemoInfor.txt)保存到固定的文件夾,也可以通過(guò)文件對(duì)話(huà)框來(lái)獲取。前者寫(xiě)成一個(gè)字符串常量即可,但考慮到應(yīng)用的靈活性,建議以文件對(duì)話(huà)框來(lái)獲取被分析文件的名稱(chēng),如表2.1中的示例代碼。

        文件對(duì)話(huà)框的申明類(lèi)型及初始化方式見(jiàn)第1、4行,當(dāng)FileDialog對(duì)象show方法返回值為-1時(shí)說(shuō)明用戶(hù)按下了確定打開(kāi)文件的按鈕,通過(guò)SelectItems返回完整的文件路徑(行 5)。代碼中fileName被顯式申明為"",以備用戶(hù)按下取消按鈕時(shí)能確定地返回空字符串,fd對(duì)象在使用后也被顯式地關(guān)閉。(因篇幅有限,本文不對(duì)代碼中對(duì)象成員、方法、參數(shù)的使用方式及含義進(jìn)行詳述,相關(guān)對(duì)象及語(yǔ)法的信息可參考VBA說(shuō)明文檔或手冊(cè))。

        2.3 文件打開(kāi)及文本讀取

        讀取信息時(shí),可根據(jù)需要讀取部分文本也可以一次讀取整個(gè)文件的內(nèi)容。文章中的代碼采用標(biāo)示識(shí)別的讀取方式(分別設(shè)定開(kāi)始及結(jié)束的文本標(biāo)示),通過(guò)不同的標(biāo)示設(shè)定既可以獲取某個(gè)部分的文本內(nèi)容,也可以一次讀取整個(gè)文件。

        在獲取文件完整路徑后可以使用系統(tǒng)的File-SystemObject對(duì)象獲得文件的訪(fǎng)問(wèn)權(quán),之后通過(guò)OpenTextFile方法以文本方式打開(kāi)文件,并用ReadLine方法的迭代獲取整個(gè)文件的文本內(nèi)容。

        表2 打開(kāi)文件代碼Tab.2 Open-file code

        代碼1到3行申明并初始化了讀取文本文件的對(duì)象,從第4行開(kāi)始的Do While循環(huán)將依次遍歷整個(gè)文本文件,當(dāng)開(kāi)始讀取標(biāo)志被找到后can Read被設(shè)為T(mén)rue,通過(guò)第9行的代碼處理將要讀取的字符串,直至碰到終止讀取標(biāo)志或者文件尾,讀取后的字符串存放到一個(gè)動(dòng)態(tài)的字符串?dāng)?shù)組中。

        3 中間計(jì)算的數(shù)據(jù)轉(zhuǎn)換

        進(jìn)行分析計(jì)算之前需要對(duì)已經(jīng)讀取的文本中包括的信息和數(shù)據(jù)進(jìn)行識(shí)別和讀取。

        對(duì)于文本信息的提取直接使用VBA中的部分字符串截取函數(shù)Mid,Mid可以靈活地分離字符串中的部分內(nèi)容,對(duì)信息的定位就需要用到mid。以導(dǎo)出文件第二部分“標(biāo)準(zhǔn)內(nèi)力信息”為例,需了解11種荷載工況分別對(duì)應(yīng)的內(nèi)力或工況號(hào),以便在讀取工況數(shù)據(jù)矩陣的時(shí)候加以識(shí)別。通常這11種內(nèi)力信息的順序是固定的,但如果SATWE模塊升級(jí)后相關(guān)內(nèi)力信息的排布位置如果發(fā)生變化,需要修改代碼以適應(yīng)。要靈活應(yīng)對(duì)變化,可在讀取工況文本說(shuō)明后,對(duì)每種工況的編號(hào)做識(shí)別。

        圖1 標(biāo)準(zhǔn)內(nèi)力信息的文本Fig.1 text of standard internal force information

        工況信息的讀取見(jiàn)圖1。每種工況的編號(hào)均在正反括號(hào)內(nèi),且在一行中只出現(xiàn)一次,使用InStr函數(shù)定位正反括號(hào)的位置,就可以直接讀出工況的編號(hào)數(shù)字,轉(zhuǎn)為整型變量即可。對(duì)于工況類(lèi)型的判斷可以采用標(biāo)志詞的判斷法,如“X方向地震”、“Y向風(fēng)力”等,同樣使用InStr函數(shù),如果返回值不為0則表示文本包含標(biāo)志詞,用于判斷的標(biāo)志詞可以作為字符常量寫(xiě)入代碼或者存放于Excel工作表待使用時(shí)再讀取。

        圖2 荷載工況數(shù)值矩陣Fig.2 Values matrix of load case

        荷載工況數(shù)據(jù)處理需要將讀取后的行文本轉(zhuǎn)為數(shù)字,見(jiàn)圖2。荷載工況的數(shù)據(jù)通過(guò)空格字符分開(kāi),可采用Split函數(shù)進(jìn)行分離,工況數(shù)據(jù)文本間的空格數(shù)量不一,最少有3個(gè),多的有5個(gè),分離標(biāo)志字符串可設(shè)為3個(gè)空格字符串。低于3個(gè)空格時(shí)可能會(huì)將部分空格字符分離為獨(dú)立字符串,產(chǎn)生垃圾數(shù)據(jù),使用3個(gè)空格進(jìn)行分離后的每個(gè)字符串只包含1個(gè)工況數(shù)據(jù),多余的空格可以通過(guò)Trim函數(shù)去除。

        分離并轉(zhuǎn)換后的數(shù)字可存入結(jié)構(gòu)體類(lèi)型,使用type關(guān)鍵詞定義(如將其定義為“BeamLoadData”類(lèi)型),再申明BeamLoadData類(lèi)型的動(dòng)態(tài)數(shù)組,即可將整個(gè)工況數(shù)據(jù)存入,并根據(jù)需要進(jìn)行調(diào)用。需要注意的是:梁構(gòu)件的位置信息與其它構(gòu)件不同,圖2顯示的是梁構(gòu)件的情況,如果結(jié)構(gòu)體以單個(gè)工況下各位置的數(shù)據(jù)作為成員(即文本中一行的數(shù)據(jù)作為一個(gè)結(jié)構(gòu)體類(lèi)型)就需要針對(duì)其它構(gòu)件的數(shù)據(jù)構(gòu)成來(lái)定義結(jié)構(gòu)體;如果以構(gòu)件各位置下的工況數(shù)據(jù)作為成員(文本中的一列作為一個(gè)結(jié)構(gòu)體類(lèi)型),則不需要針對(duì)不同構(gòu)件定義結(jié)構(gòu)體類(lèi)型,但建議在結(jié)構(gòu)體中增加一個(gè)字符串成員以標(biāo)示本列數(shù)據(jù)屬于哪個(gè)位置。具體采用何種定義方式,視實(shí)際分析計(jì)算的需要而定。

        其它部分的信息及數(shù)據(jù)讀取方式可以參照上文示例,文本信息轉(zhuǎn)換為數(shù)值和可識(shí)別信息后就能被用于計(jì)算、分析。因?qū)?shù)據(jù)的利用方式各有不同,有關(guān)具體計(jì)算過(guò)程的編碼就不在此討論。

        4 結(jié)果輸出

        數(shù)據(jù)在計(jì)算完成后需要將計(jì)算的結(jié)果呈現(xiàn)給使用人員,以便在設(shè)計(jì)工作中參考使用。不同的計(jì)算需求形成的結(jié)果數(shù)據(jù)的形態(tài)各有不同,本文將以二維矩陣為例描述結(jié)果輸出的方式。

        以圖3的顯示的結(jié)果數(shù)據(jù)為例,計(jì)算各種系數(shù)組合情況下構(gòu)件各位置的受力的復(fù)合值,行數(shù)據(jù)為分項(xiàng)系數(shù)編號(hào),列為構(gòu)件位置。Excel VBA的便利性之一就是可以直接將數(shù)據(jù)寫(xiě)入Excel表格,通過(guò)Sheets對(duì)象的Cells方法可以直接對(duì)單元格的內(nèi)容進(jìn)行讀寫(xiě),將計(jì)算結(jié)果寫(xiě)入指定的表格之中。

        圖3中單元格右上角的紅色標(biāo)記是單元格注釋?zhuān)瑑?nèi)容是數(shù)值的計(jì)算過(guò)程。對(duì)于比較復(fù)雜的計(jì)算,如果能將參與計(jì)算的數(shù)值及計(jì)算方式列出,不僅有利于程序調(diào)試,也可以為使用者提供參考。圖4為計(jì)算過(guò)程顯示示例。

        圖3 計(jì)算結(jié)果顯示Fig.3 Calculation results display

        圖4 單元格注釋Fig.4 Cells comment

        當(dāng)鼠標(biāo)移動(dòng)到單元格之上時(shí)注釋文本就會(huì)自動(dòng)顯示。要對(duì)單元格添加注釋可以通過(guò)表3中的代碼實(shí)現(xiàn)。

        表3 添加注釋代碼Tab.3 Adding comments code

        選中要添加注釋的單元格(第2行),通過(guò)ActiveCell對(duì)象的AddComment方法添加注釋文本,通過(guò) ActiveCell.Comment.Shape 對(duì)象的 Height 和Width屬性可以控制注釋顯示框的大小。

        5 設(shè)計(jì)及編程建議

        良好的設(shè)計(jì)和編碼不僅有利于用戶(hù)的使用、調(diào)試和修改也利于未來(lái)需求變化時(shí)的增加和改動(dòng)。

        5.1 界面設(shè)計(jì)

        VBA是事件驅(qū)動(dòng)語(yǔ)言,用戶(hù)的操作都是通過(guò)對(duì)各種控件(如命令按鈕)或可編程元素(如特定的工作表、單元格)來(lái)觸發(fā)的。Excel VBA有3種可利用的界面:①Excel表格;②內(nèi)嵌的Windows窗體;③自定義工具欄。選用何種界面提供給用戶(hù)進(jìn)行操作需要根據(jù)具體情況斟酌,上述3種操作界面各有優(yōu)劣。

        Excel表格的優(yōu)勢(shì)是直觀,可放置各種控件,用戶(hù)打開(kāi)表格即可見(jiàn),不足之處是直接在表格上放置控件影響界面的美觀性,針對(duì)特定單元格進(jìn)行編程要注意避免用戶(hù)無(wú)意間修改單元格內(nèi)容。使用Excel表格作為界面時(shí)1個(gè)工作表僅作單一用途,如:數(shù)據(jù)讀取、計(jì)算、結(jié)果顯示分別放置在不同的工作表,一表多用容易讓用戶(hù)產(chǎn)生歧義和誤解。僅顯示當(dāng)前操作所需工作表,關(guān)閉暫時(shí)不需要的表格,如初始數(shù)據(jù)讀取時(shí)僅需要顯示當(dāng)前工作表,將中間計(jì)算過(guò)程及結(jié)果顯示表格暫時(shí)關(guān)閉,待需要時(shí)再打開(kāi)。

        Windows窗體的優(yōu)勢(shì)是符合日常界面的操作習(xí)慣和視覺(jué)特征,窗體的控件和數(shù)據(jù)與工作表內(nèi)容相互獨(dú)立。Windows窗體是Excel VBA中一個(gè)強(qiáng)大的工具,將控件放置在窗體,工作表僅用于數(shù)據(jù)顯示是一種常用的設(shè)計(jì)風(fēng)格。不過(guò)Excel中的窗體可選控件的數(shù)量有限,而且過(guò)多的窗體和過(guò)多的工作表一樣,都不利于用戶(hù)的使用。

        自定義工具欄的直觀性和界面元素最少,可作為窗體的替代,優(yōu)勢(shì)是不占用表格顯示空間。由于可編程元素最少,建議用于基本功能的選擇而不是實(shí)際操作。如程序具備分析、計(jì)算兩個(gè)基本功能,可通過(guò)自定義工具欄來(lái)進(jìn)行選擇。

        5.2 數(shù)據(jù)容器

        動(dòng)態(tài)數(shù)組是分析計(jì)算程序中最常用的數(shù)據(jù)容器,SATWE構(gòu)件信息中的數(shù)據(jù)大多以二維矩陣形式存放,結(jié)構(gòu)體與動(dòng)態(tài)數(shù)組可以完整還原二維矩陣。Excel VBA還可以把Excel工作表用作數(shù)據(jù)容器,申明一個(gè)臨時(shí)工作表,將數(shù)據(jù)暫存并使用Excel內(nèi)置的功能進(jìn)行預(yù)處理。

        5.3 編程風(fēng)格

        高內(nèi)聚、低耦合。把需求功能分解后按相互耦合的功能或函數(shù)來(lái)設(shè)計(jì)代碼。不要把順序執(zhí)行但不同的功能放在一個(gè)函數(shù)中,如文件名稱(chēng)的獲取、內(nèi)容的讀取、字符串轉(zhuǎn)為數(shù)字三個(gè)功能可以設(shè)計(jì)為三個(gè)函數(shù),將文件名、內(nèi)容文本的字符數(shù)組等作為參數(shù)相互傳遞。中間的計(jì)算過(guò)程和結(jié)果顯示也風(fēng)格為不同的函數(shù)。高內(nèi)聚、低耦合不僅有利于調(diào)試,也可以較好地應(yīng)對(duì)未來(lái)需求變化時(shí)候代碼的改變。

        非界面控制代碼單獨(dú)存放。非界面控制類(lèi)的代碼,應(yīng)該放置到公共代碼文件.bas中,而不是直接寫(xiě)入工作表或者窗體的事件代碼,當(dāng)界面發(fā)生改變時(shí)不會(huì)影響到界面控制之外的其它功能。

        6 結(jié) 語(yǔ)

        目前,昆明有色冶金設(shè)計(jì)院股份公司信息中心已經(jīng)參照文章內(nèi)容為公司結(jié)構(gòu)專(zhuān)業(yè)開(kāi)發(fā)了一個(gè)SATWE構(gòu)件計(jì)算程序并投入使用。Excel VBA雖然是一門(mén)較老的語(yǔ)言,但在合理利用其特性的基礎(chǔ)上,也可以在結(jié)構(gòu)專(zhuān)業(yè)構(gòu)件數(shù)據(jù)、信息分析工作中發(fā)揮重要的作用。

        [1]欒鈺.淺談SATWE進(jìn)行結(jié)構(gòu)設(shè)計(jì)時(shí)應(yīng)注意的問(wèn)題[J].山西建筑,2006,32(22):100-101.

        [2]楊章偉,張婉婉.EXCEL VBA語(yǔ)法辭典[M].北京:機(jī)械工業(yè)出版社,2009.

        猜你喜歡
        窗體字符串單元格
        玩轉(zhuǎn)方格
        玩轉(zhuǎn)方格
        試談Access 2007數(shù)據(jù)庫(kù)在林業(yè)檔案管理中的應(yīng)用
        檔案天地(2019年5期)2019-06-12 05:12:02
        淺談Excel中常見(jiàn)統(tǒng)計(jì)個(gè)數(shù)函數(shù)的用法
        西部皮革(2018年6期)2018-05-07 06:41:07
        一種新的基于對(duì)稱(chēng)性的字符串相似性處理算法
        基于LayeredWindow的異形窗體局部刷新
        中文信息(2014年2期)2014-03-06 23:49:14
        巧設(shè)WPS窗體控件讓表格填寫(xiě)更規(guī)范
        依據(jù)字符串匹配的中文分詞模型研究
        一種針對(duì)Java中字符串的內(nèi)存管理方案
        小改字符串讓殺毒軟件閉嘴
        国产成人av性色在线影院色戒| 99无码熟妇丰满人妻啪啪| 亚洲夜夜性无码| 成人欧美一区二区三区| 日韩人妻无码一区二区三区| 性夜夜春夜夜爽aa片a| 中文乱码字幕高清在线观看| 91免费永久国产在线观看| 亚洲熟妇大图综合色区| 亚洲国产精品国自产拍av在线 | 一本到亚洲av日韩av在线天堂| 99精品国产综合久久麻豆| 一区二区三区无码高清视频| 少妇高潮无套内谢麻豆传| 老师翘臀高潮流白浆| 欧美日韩亚洲一区二区精品| 中文字幕无线精品亚洲乱码一区 | 国产人妻丰满熟妇嗷嗷叫| 99re在线视频播放| 亚洲精品国产二区三区在线| 给我播放的视频在线观看| 91色区在线免费观看国产| 精品无码av一区二区三区| 精品福利视频一区二区三区| 久久无码人妻一区=区三区| 不打码在线观看一区二区三区视频| 久久精品久久精品中文字幕| 粉嫩av最新在线高清观看| 成年女人a级毛片免费观看| 国产精品久久久久久久久免费| 99久久超碰中文字幕伊人| 亚洲天堂av高清在线| 日韩午夜理论免费tv影院| 又粗又硬又黄又爽的免费视频 | 国产精品不卡无码AV在线播放| 国产黄色三级三级三级看三级| 特黄 做受又硬又粗又大视频| 午夜成人鲁丝片午夜精品| 免费一级毛片在线播放不收费| 日韩一区二区,亚洲一区二区视频| 中文字幕午夜精品久久久|