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

Excel VBA在SATWE構件應力計算中的應用

2014-04-08 12:06:06
有色金屬設計 2014年4期
關鍵詞:文本信息

沈 超

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

0 引 言

進入21世紀,高層建筑在國內發展迅速,設計思想和結構體系不斷更新并日趨多樣化,這也給高層結構的設計與分析提出了更高的要求。在高層結構設計中,構件的應力分析是一個重要環節,PKPM軟件的有限元分析模塊“SATWE”在高層建筑的構件應力分析方面被廣泛應用。

實際工作中,結構設計師需對數據進一步分析、計算。雖然SATWE可將構件的數據導出為文本文件,但對數據進行手工分析,不僅耗時還容易出錯,此種情況下通過編程來對導出的信息和數據進行分析計算,程序不需要復雜的功能和結構,“數據讀取——處理——結果輸出”的三步驟模式即可。因此,選擇一個功能滿足要求且簡單、適用的平臺來進行程序編寫無疑可以提升工作效率,而Excel VBA是可選方案之一。

文章從編程的角度簡述了Excel VBA具備的優勢,介紹了如何對SATWE導出文件中的數據和信息進行利用。分析了“文件打開及文本讀取”、“中間計算”及“結果顯示”三個過程可能涉及到的編程元素,最后對程序的設計、編碼提出建議。

1 Excel VBA在分析計算中的優勢

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

在了解了VBA的優勢之后,下面將討論如何將Excel VBA運用到SATWE構件數據的分析計算中。

2 導出文件讀取

從SATWE導出文件中包含了構件有關的文本說明及數據。要識別并利用這些信息需要用到Excel VBA的外部文件訪問對象、對話框及文本讀取對象。首先,要了解導出文件的內容構成。

2.1 導出文件內容構成

SATWE導出的構件信息文件由4個部分組成:①構件幾何材料信息;②標準內力信息;③構件設計驗算信息;④荷載組合分項系數說明,每個部分均包含有文本信息及數據。

2.2 文件名獲取

打開一個SATWE構件信息文件應先取得包含完整路徑的文件名稱。既可以采用系統默認的名稱(如:MemoInfor.txt)保存到固定的文件夾,也可以通過文件對話框來獲取。前者寫成一個字符串常量即可,但考慮到應用的靈活性,建議以文件對話框來獲取被分析文件的名稱,如表2.1中的示例代碼。

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

2.3 文件打開及文本讀取

讀取信息時,可根據需要讀取部分文本也可以一次讀取整個文件的內容。文章中的代碼采用標示識別的讀取方式(分別設定開始及結束的文本標示),通過不同的標示設定既可以獲取某個部分的文本內容,也可以一次讀取整個文件。

在獲取文件完整路徑后可以使用系統的File-SystemObject對象獲得文件的訪問權,之后通過OpenTextFile方法以文本方式打開文件,并用ReadLine方法的迭代獲取整個文件的文本內容。

表2 打開文件代碼Tab.2 Open-file code

代碼1到3行申明并初始化了讀取文本文件的對象,從第4行開始的Do While循環將依次遍歷整個文本文件,當開始讀取標志被找到后can Read被設為True,通過第9行的代碼處理將要讀取的字符串,直至碰到終止讀取標志或者文件尾,讀取后的字符串存放到一個動態的字符串數組中。

3 中間計算的數據轉換

進行分析計算之前需要對已經讀取的文本中包括的信息和數據進行識別和讀取。

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

圖1 標準內力信息的文本Fig.1 text of standard internal force information

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

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

荷載工況數據處理需要將讀取后的行文本轉為數字,見圖2。荷載工況的數據通過空格字符分開,可采用Split函數進行分離,工況數據文本間的空格數量不一,最少有3個,多的有5個,分離標志字符串可設為3個空格字符串。低于3個空格時可能會將部分空格字符分離為獨立字符串,產生垃圾數據,使用3個空格進行分離后的每個字符串只包含1個工況數據,多余的空格可以通過Trim函數去除。

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

其它部分的信息及數據讀取方式可以參照上文示例,文本信息轉換為數值和可識別信息后就能被用于計算、分析。因對數據的利用方式各有不同,有關具體計算過程的編碼就不在此討論。

4 結果輸出

數據在計算完成后需要將計算的結果呈現給使用人員,以便在設計工作中參考使用。不同的計算需求形成的結果數據的形態各有不同,本文將以二維矩陣為例描述結果輸出的方式。

以圖3的顯示的結果數據為例,計算各種系數組合情況下構件各位置的受力的復合值,行數據為分項系數編號,列為構件位置。Excel VBA的便利性之一就是可以直接將數據寫入Excel表格,通過Sheets對象的Cells方法可以直接對單元格的內容進行讀寫,將計算結果寫入指定的表格之中。

圖3中單元格右上角的紅色標記是單元格注釋,內容是數值的計算過程。對于比較復雜的計算,如果能將參與計算的數值及計算方式列出,不僅有利于程序調試,也可以為使用者提供參考。圖4為計算過程顯示示例。

圖3 計算結果顯示Fig.3 Calculation results display

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

當鼠標移動到單元格之上時注釋文本就會自動顯示。要對單元格添加注釋可以通過表3中的代碼實現。

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

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

5 設計及編程建議

良好的設計和編碼不僅有利于用戶的使用、調試和修改也利于未來需求變化時的增加和改動。

5.1 界面設計

VBA是事件驅動語言,用戶的操作都是通過對各種控件(如命令按鈕)或可編程元素(如特定的工作表、單元格)來觸發的。Excel VBA有3種可利用的界面:①Excel表格;②內嵌的Windows窗體;③自定義工具欄。選用何種界面提供給用戶進行操作需要根據具體情況斟酌,上述3種操作界面各有優劣。

Excel表格的優勢是直觀,可放置各種控件,用戶打開表格即可見,不足之處是直接在表格上放置控件影響界面的美觀性,針對特定單元格進行編程要注意避免用戶無意間修改單元格內容。使用Excel表格作為界面時1個工作表僅作單一用途,如:數據讀取、計算、結果顯示分別放置在不同的工作表,一表多用容易讓用戶產生歧義和誤解。僅顯示當前操作所需工作表,關閉暫時不需要的表格,如初始數據讀取時僅需要顯示當前工作表,將中間計算過程及結果顯示表格暫時關閉,待需要時再打開。

Windows窗體的優勢是符合日常界面的操作習慣和視覺特征,窗體的控件和數據與工作表內容相互獨立。Windows窗體是Excel VBA中一個強大的工具,將控件放置在窗體,工作表僅用于數據顯示是一種常用的設計風格。不過Excel中的窗體可選控件的數量有限,而且過多的窗體和過多的工作表一樣,都不利于用戶的使用。

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

5.2 數據容器

動態數組是分析計算程序中最常用的數據容器,SATWE構件信息中的數據大多以二維矩陣形式存放,結構體與動態數組可以完整還原二維矩陣。Excel VBA還可以把Excel工作表用作數據容器,申明一個臨時工作表,將數據暫存并使用Excel內置的功能進行預處理。

5.3 編程風格

高內聚、低耦合。把需求功能分解后按相互耦合的功能或函數來設計代碼。不要把順序執行但不同的功能放在一個函數中,如文件名稱的獲取、內容的讀取、字符串轉為數字三個功能可以設計為三個函數,將文件名、內容文本的字符數組等作為參數相互傳遞。中間的計算過程和結果顯示也風格為不同的函數。高內聚、低耦合不僅有利于調試,也可以較好地應對未來需求變化時候代碼的改變。

非界面控制代碼單獨存放。非界面控制類的代碼,應該放置到公共代碼文件.bas中,而不是直接寫入工作表或者窗體的事件代碼,當界面發生改變時不會影響到界面控制之外的其它功能。

6 結 語

目前,昆明有色冶金設計院股份公司信息中心已經參照文章內容為公司結構專業開發了一個SATWE構件計算程序并投入使用。Excel VBA雖然是一門較老的語言,但在合理利用其特性的基礎上,也可以在結構專業構件數據、信息分析工作中發揮重要的作用。

[1]欒鈺.淺談SATWE進行結構設計時應注意的問題[J].山西建筑,2006,32(22):100-101.

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

猜你喜歡
文本信息
初中群文閱讀的文本選擇及組織
甘肅教育(2020年8期)2020-06-11 06:10:02
在808DA上文本顯示的改善
基于doc2vec和TF-IDF的相似文本識別
電子制作(2018年18期)2018-11-14 01:48:06
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
文本之中·文本之外·文本之上——童話故事《坐井觀天》的教學隱喻
論《柳毅傳》對前代文本的繼承與轉化
人間(2015年20期)2016-01-04 12:47:10
展會信息
中外會展(2014年4期)2014-11-27 07:46:46
如何快速走進文本
語文知識(2014年1期)2014-02-28 21:59:13
信息
建筑創作(2001年3期)2001-08-22 18:48:14
健康信息
祝您健康(1987年3期)1987-12-30 09:52:32
主站蜘蛛池模板: 成人永久免费A∨一级在线播放| 国产精品思思热在线| 久久黄色小视频| 91福利一区二区三区| 亚洲精品成人片在线观看| av一区二区三区高清久久| 久久semm亚洲国产| 五月天久久婷婷| 欧美天天干| 一级爆乳无码av| 成人无码一区二区三区视频在线观看 | 91久久偷偷做嫩草影院| 欧美精品亚洲二区| 中国精品自拍| 国产91导航| 萌白酱国产一区二区| 婷婷亚洲综合五月天在线| 欧美综合中文字幕久久| 黄色网在线| 亚洲第一页在线观看| 久久免费精品琪琪| 国产精品污污在线观看网站| 97狠狠操| 2021国产精品自拍| 免费观看三级毛片| 无码精品福利一区二区三区| 精品1区2区3区| 免费午夜无码18禁无码影院| 国产成人1024精品下载| 欧美精品成人一区二区在线观看| 国模视频一区二区| 国产大片喷水在线在线视频| 高清欧美性猛交XXXX黑人猛交| 亚洲婷婷丁香| 精品国产中文一级毛片在线看| 免费一级毛片完整版在线看| 精品一区二区三区波多野结衣| 国产特级毛片| 国产手机在线ΑⅤ片无码观看| 99久久精品免费视频| 国产一区亚洲一区| 久久久久久尹人网香蕉| 综合人妻久久一区二区精品 | 欧美中文字幕在线视频| 日韩在线视频网| 久久久精品无码一区二区三区| 久青草国产高清在线视频| 狠狠综合久久| 草逼视频国产| 国产精品亚洲日韩AⅤ在线观看| 亚洲第一成人在线| 欧美色视频在线| 四虎国产在线观看| 国产成人高精品免费视频| 国产精品99一区不卡| 国产亚洲精久久久久久久91| 手机精品视频在线观看免费| 成人福利在线视频| 久久国产亚洲欧美日韩精品| 大陆国产精品视频| 国产中文一区a级毛片视频| 性喷潮久久久久久久久| 亚洲福利网址| 国产精品女在线观看| 特级做a爰片毛片免费69| 国产在线视频二区| 一区二区三区成人| 国产在线高清一级毛片| 91在线一9|永久视频在线| 精品久久久久久成人AV| 国产欧美日韩在线在线不卡视频| 亚洲大尺码专区影院| 青青草原国产av福利网站| 亚洲a级毛片| 亚洲欧美日韩天堂| 99国产精品一区二区| 三上悠亚一区二区| 激情乱人伦| 麻豆精品在线播放| 国产资源站| 国产成人精品男人的天堂| 久久国产精品影院|