zoukankan      html  css  js  c++  java
  • 浅习VBA数据上传功能

    用户需求用Excel宏直接上传其中的数据导数据库中,于是我花了一个礼拜的时间对VBA的基础知识进行了解。当然只是关注于此次需求相关的部分,所以只能算是浅习(粗浅的学习)。


    VBA数据上传代码
    Sub UpLoadData()
        IsLogon 
    = False
        
    Dim DataTable(595As String
        
    Dim WB As SHDocVw.InternetExplorer
        
        LoginForm.Show (
    1)  '在上传数据时,需要进行身份验证
        
        
    If Range("Z100").Value = "1" Then '在登录窗口函数中设置一个特殊的单元格的值来判定身份是否正确。
            IsLogon = True
        
    End If
            
        
    If IsLogon = True Then
            
    Set WB = New SHDocVw.InternetExplorer
            WB.Visible 
    = True
            WB.navigate 
    "*********************.aspx" '需要完整URL,*号是为了隐去一些细节。
            loading = True 'IE浏览器网页未显示完全时不进行任何操作,在For循环中用while ...DoEvents...Wend会出现预料之外的结果。
            While loading
                
    If (Not WB.Busy) And WB.readyState = READYSTATE_COMPLETE Then
                    loading 
    = False
                
    End If
            
    Wend
            
            
    'MsgBox (Range(Chr(69) & "" & 4))
            '建立映射1列为E,2F,3G,4H
            For i = 0 To 4
                
    For j = 0 To 59
                    
    If Application.WorksheetFunction.IsNumber(Range(Chr(69 + i) & "" & (j + 4)).Value) Then
                        DataTable(j, i) 
    = Range(Chr(69 + i) & "" & (j + 4)).Value
                    
    Else
                        DataTable(j, i) 
    = 0
                    
    End If
                
    Next j
            
    Next i
            
            
    On Error Resume Next
            
    For i = 0 To 3
                
    For j = 0 To 57
                
    'MsgBox (DataTable(j, i))
                WB.document.all("c" & (j + 1& (i + 1)).Value = DataTable(j, i) '访问打开的页面中的DOM元素并赋值。
                Next j
            
    Next i
        
    End If
         
        
    '以下获取页面控件对象txt_no1_bl
        'WB.Application.Quit
        'Application.ScreenUpdating = True
    End Sub

    宏里面的2维数组,循环体结构与其他编程语言区别不大。需要说明的是这里用的SHDocVw.InternetExplorer对象,需要在vba工程中加入Microsoft Internet Controls这个引用。另外在使用VBA访问已打开的网页的dom的时候,使用的是document.all数组,这里的数据下标使用的是控件的ID(我把属性中的idname设置成一样的值,如.net环境中的服务器端控件使用的ID一样)。

    不过,代码中也存在一个较大的问题点。就是使用LogonForm窗体进行身份验证的时候,我原以为可以通过以下代码

    身份验证代码
    Private Sub btnLogon_Click()
        
    Dim name
        
    Dim pass
        name 
    = txt_name.Text
        pass 
    = txt_pass.Text
        
    Set objhttp = CreateObject("MSXML2.ServerXMLHTTP")
        
    Dim url
        
    Dim data
        Range(
    "Z100").Value = ""         ’指定的单元格,用于存放身份验证结果的信息。
        url 
    = "*******************.aspx" ' 需要完整的URL,隐去实现细节。
        objhttp.Open "POST", url, False"域用户名""域密码" '域用户、密码是此过程的可选参数。
       'objhttp.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
        objhttp.setRequestHeader "Content-Type""application/x-www-form-urlencoded"
        objhttp.send (
    "name=" & name & "&pass=" & pass)
        
    If objhttp.readyState = 4 Then
            data 
    = objhttp.responseText
            
    'MsgBox (data)
        End If
        
        
    If data = 1 Then
            Range(
    "Z100").Value = data
            txt_name.Text 
    = ""
            txt_pass.Text 
    = ""
            LoginForm.Hide
        
    Else
            
    MsgBox ("您没有上传数据的权限。")
        
    End If
    End Sub

     

    访问服务器中的页面,并注册一个Session对象,但当接受excel数据的网页进行Session验证的时候,并没有找到这个Session

    这让开发的结果显的不完整。

    后面我只能用其他方式进行身份验证

  • 相关阅读:
    eclipse javaWeb项目如何引入jar包
    Unity3D 批量图片资源导入设置
    WaitForTargetFPS
    自适应分辨率
    UnityException: Texture is not readable
    Unity bundle的制作和使用
    Unity3D之Assetbundle
    Unity使用外部版本控制SVN
    AssetBundle机制相关资料收集
    Assetbundle的杂七杂八
  • 原文地址:https://www.cnblogs.com/rain64531264/p/1712254.html
Copyright © 2011-2022 走看看