• 出口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 String
        Dim 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

  • 相关阅读:
    面向对象---工厂模式
    [转]Caffe 安装配置(CentOS + 无GPU)
    [转]Centos6.5+CUDA6.5+caffe安装配置及可能遇到问题解答
    [转]Caffe安装过程记录(CentOS,无独立显卡,无GPU)
    [转]LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别
    [转]centos 6.5安装caffe
    [转]CentOS编译安装GIMP
    [转]Snappy压缩库安装和使用之一
    [转]拍照怎么搜题?(下)
    [转]拍照怎么搜题?(上)
  • 原文地址:https://www.cnblogs.com/Dincat/p/13457257.html
Copyright © 2020-2023  润新知