出口UI控制元件從“形式”Excel表方面的資訊
執行概要 在這篇文章中,我們將看到如何以一種簡單的方式將VB表單的控制細節匯出到Excel表格中。 如今,市場上有許多工具(線上的和獨立的)可以用於升級程式碼,或者將程式碼從一種程式語言轉換為另一種程式語言等等,但是它們也專注於UI層嗎?答案是可疑的。 是的,UI外觀通常被認為是最不重要的,它確實消耗了75%的時間。它們具有外觀價值,可以為使用者提供美學效果,因為它們會很容易地分散客戶的注意力,因為終端使用者可能已經習慣了他們通常期望的遺留螢幕。 ASP ASP。NET升級是Visual Studio的內建元件。 介紹 在VB應用程式的轉換中,將其重寫為另一種語言確實需要在UI層上付出巨大的努力,主要是在外觀和感覺方面。通常,開發人員開啟VB窗體,獲取每個控制元件的每個屬性,並在轉換後的程式碼中應用相同的屬性。 目的 而不是開啟一個VB形式(介面層)手動高度,寬度(屬性)和其他風格的每個控制,我們可以以程式設計方式使用一個簡單的VB程式碼匯出到一個Excel表,與表單名稱表格名稱,並使用重寫的負債狀況的影響,設定控制值/再造工程/程式檔案遷移到保持一致性的UI的外觀和感覺。 如何使用它? 在窗體中複製以下程式碼,並在單擊按鈕事件中呼叫它,以生成具有控制元件設定資訊的Excel表。 隱藏,收縮,複製Code
Private Function GetFormData(ByRef xi_astrData As String) As String Call LetPropertyType 'On Error GoTo LoadFormErr Dim p_strLine As String Dim p_astrData() As String Dim p_objFSO As FileSystemObject Dim p_objTextStream As TextStream 'This is the data Dim p_strControlDetail As String Dim p_strFormName As String Dim p_sFormName As String Dim p_sTOP As String Dim p_sLeft As String Dim p_sHEIGHT As String Dim p_sWIDTH As StringDim p_sIndex As String Dim p_sTabIndex As String Dim p_strCntrlName As String Dim p_strCntrlType As String Dim p_sCaption As String Dim p_skipControl As String Dim p_strControlName As String Dim p_strControl As String Dim p_strControlProperties As String Dim p_strControlTypes() As String Dim p_strControlType As String ' ------------------------------------------ ' Clear the textbox ' ------------------------------------------ p_strControlDetail = vbNullString p_strControlProperties = vbNullString ' ------------------------------------------ ' Open the file ' ------------------------------------------ On Error GoTo LoadFormErr2 Set p_objFSO = New FileSystemObject Set p_objTextStream = p_objFSO.OpenTextFile(fileName:=xi_astrData, _ IOMode:=ForReading, _ Create:=False) On Error GoTo LoadFormErr Do While Not p_objTextStream.AtEndOfStream p_strLine = p_objTextStream.ReadLine() p_astrData = Split(p_strLine, "=") If Len(Trim$(p_strLine)) > 0 Then '=============================================== ' Getting Control type of the Form '================================================= If UCase$(Left$(Trim$(p_strLine), 6)) = "BEGIN " Then rsForm.AddNew rsForm!FormName = p_sFormName rsForm!ControlType = p_strCntrlName rsForm!ControlName = p_strCntrlType If (Len(p_sIndex) > 0) Then rsForm![ControlName] = p_strCntrlType + _ "(" + p_sIndex + ")" End If rsForm!Caption = p_sCaption rsForm!Index = p_sIndex rsForm!Top = p_sTOP If (Len(p_sTOP) > 0) Then rsForm![Top(*065)] = _ Conversion.CStr((Conversion.Int(p_sTOP) * 0.065)) End If rsForm!Width = UCase$(Trim$(p_sWIDTH)) If (Len(p_sWIDTH) > 0) Then rsForm![WIDTH(*065)] = _ Conversion.CStr((Conversion.Int(p_sWIDTH) * 0.065)) End If rsForm!Left = UCase$(Trim$(p_sLeft)) If (Len(p_sLeft) > 0) Then rsForm![Left(*065)] = _ Conversion.CStr((Conversion.Int(p_sLeft) * 0.065)) End If rsForm!Height = UCase$(Trim$(p_sHEIGHT)) If (Len(p_sHEIGHT) > 0) Then rsForm![Height(*065)] = _ Conversion.CStr((Conversion.Int(p_sHEIGHT) * 0.065)) End If rsForm!TabIndex = UCase$(Trim$(p_sTabIndex)) rsForm.Update rsForm.MoveFirst p_sCaption = "" p_sTOP = "" p_sLeft = "" p_sHEIGHT = "" p_sWIDTH = "" p_sIndex = "" p_strCntrlName = "" p_strCntrlType = "" p_sTabIndex = "" p_strControl = UCase$(Trim$(p_strLine)) p_strControl = UCase$(Replace(p_strControl, "BEGIN ", _ "", 1, -1, vbBinaryCompare)) p_strControl = UCase$(Replace(p_strControl, " ", _ ",", 1, -1, vbBinaryCompare)) p_strControlTypes = Split(p_strControl, ",") p_strControlType = p_strControlTypes(0) + ":" + _ p_strControlTypes(1) p_strCntrlName = p_strControlTypes(0) p_strCntrlType = p_strControlTypes(1) If (p_strControlTypes(0) = "VB.FORM") Then p_sFormName = p_strControlTypes(1) End If End If Select Case UCase$(Trim$(p_astrData(0))) Case "CAPTION" p_sCaption = p_astrData(1) Case "CLIENTHEIGHT" p_sHEIGHT = UCase$(Trim$(p_astrData(1))) Case "CLIENTWIDTH" p_sWIDTH = UCase$(Trim$(p_astrData(1))) Case "CLIENTTOP" p_sTOP = UCase$(Trim$(p_astrData(1))) Case "CLIENTLEFT" p_sLeft = UCase$(Trim$(p_astrData(1))) Case "INDEX" p_sIndex = UCase$(Trim$(p_astrData(1))) Case "TABINDEX" p_sTabIndex = UCase$(Trim$(p_astrData(1))) Case "HEIGHT" p_sHEIGHT = UCase$(Trim$(p_astrData(1))) Case "WIDTH" p_sWIDTH = UCase$(Trim$(p_astrData(1))) Case "TOP" p_sTOP = UCase$(Trim$(p_astrData(1))) Case "LEFT" p_sLeft = UCase$(Trim$(p_astrData(1))) Case "NAME" p_strControlProperties = p_strControlProperties + _ vbCrLf + "NAME : " + p_astrData(1) ' Case "ICON" ' Case "KEYPREVIEW" ' Case "LINKTOPIC" ' Case "ENABLED" ' Case "ALIGN" ' Case "ALIGNMENT" ' Case "DRAGICON" Case "USEIMAGELIST" ' Case "PICTUREBACKGROUNDUSEMASK" ' Case "HASFONT" ' Case "IMAGELIST" ' Case "DATAFIELDLIST" Case Else 'do nothing End Select End If Loop p_objTextStream.Close Set p_objFSO = Nothing GetFormData = "" ' p_strControlType + _ vbCrLf + p_strControlProperties Exit Function LoadFormErr: MsgBox "Error in LoadForm function" & vbCrLf & _ "Error was: " & Err.Number & _ ", " & Err.Description Exit Function LoadFormErr2: MsgBox "Error opening the Form, " & xi_astrData & vbCrLf & _ "Error: " & Err.Number & ", " & Err.Description End Function
上述方法的Helper方法用預期的fieldname構建一個記錄集物件來儲存控制元件屬性值,並建立一個Excel表來從記錄集匯出資料。 下面是我們如何在記錄集中新增必需的屬性作為欄位名: 隱藏,收縮,複製Code
Private Function Buildrs() As ADODB.Recordset// Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset rs.CursorLocation = adUseClient rs.CursorType = adOpenStatic rs.Fields.Append "FormName", adVarChar, 100, adFldIsNullable rs.Fields.Append "ControlType", adVarChar, 100, adFldIsNullable rs.Fields.Append "ControlName", adVarChar, 100, adFldIsNullable rs.Fields.Append "CAPTION", adVarChar, 100, adFldIsNullable rs.Fields.Append "HEIGHT", adVarChar, 100, adFldIsNullable rs.Fields.Append "HEIGHT(*065)", adVarChar, 100, adFldIsNullable rs.Fields.Append "WIDTH", adVarChar, 100, adFldIsNullable rs.Fields.Append "WIDTH(*065)", adVarChar, 100, adFldIsNullable rs.Fields.Append "TOP", adVarChar, 100, adFldIsNullable rs.Fields.Append "TOP(*065)", adVarChar, 100, adFldIsNullable rs.Fields.Append "LEFT", adVarChar, 100, adFldIsNullable rs.Fields.Append "LEFT(*065)", adVarChar, 100, adFldIsNullable rs.Fields.Append "INDEX", adVarChar, 3, adFldIsNullable rs.Fields.Append "TABINDEX", adVarChar, 5, adFldIsNullable ' rs.Fields.Append "PropertyValue(*065)", _ ' adVarChar, 100, adFldIsNullable rs.Open Set Buildrs = rs End Function
下面是我們如何建立一個Excel表格來繫結記錄集: 隱藏,收縮,複製Code
//// Public Function CreateExcelSS(ByVal objRs As ADODB.Recordset) Dim rst As ADODB.Recordset Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim xl2Sheet As Excel.Worksheet Dim fileName() As String Dim conSheetName As String Dim i As Integer Dim FC As Byte ' # fields from crosstab query. On Error GoTo HandleErr ' Create Excel Application object Set xlApp = New Excel.Application ' Create a new workbook Set xlBook = xlApp.Workbooks.Add xlApp.DisplayAlerts = False xlApp.DisplayAlerts = True xlApp.Worksheets.Add ' Capture reference to first worksheet Set xlSheet = xlBook.ActiveSheet fileName = Split(m_strFileName, "\") conSheetName = fileName(UBound(fileName) - 1) xlSheet.Name = conSheetName ' Change the worksheet name ' Create recordset Set rst = New ADODB.Recordset Set rst = objRs FC = rst.Fields.Count With xlSheet For i = 1 To FC ' Copy field names to Excel using count of fields, which is ' necessary because the number of output fields ' in a crosstab query is not fixed. ' Bold the column headings and insert field names. Starting ' position A1. The variable 'i' advances the cursor one cell ' to the right for each additional field. With .Cells(1, i) .Value = rst.Fields(i - 1).Name .Font.Bold = True End With Next ' Copy all the data from the recordset into the spreadsheet. .Range("A2").CopyFromRecordset rst ' Format the data ' Causes all columns to autofit. For i = 1 To FC .Columns(i).AutoFit Next End With rst.Close 'Stop 'Display the Excel chart xlApp.Visible = True ' xlApp.close ExitHere: On Error Resume Next ' Clean up rst.Close Set rst = Nothing Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing Exit Function HandleErr: MsgBox Err & ": " & Err.Description, , _ "Error in CreateExcelSS" Resume ExitHere Resume End Function
它是做什麼的? 該程式碼將VB窗體檔案開啟到一個閱讀器流中,並讀取它以獲得所有控制元件所需的屬性,並將相同的屬性寫入Excel表中。 結論 這篇文章將幫助你以一種簡單的方式將VB窗體的控制元件細節匯出到Excel表格中。 本文轉載於:http://www.diyabc.com/frontweb/news2180.html