• 使用VBA把EXCEL数据导入数据库


    Dim table_Name$
    Sub JugeData()
    Dim i%, Cnum%, dt$, arry1 () As String, arry2 () As String, arry3 () As String, cnn As Object, rst As Object

    cdt = Format(Date, "MMDD")

    table_Name = InputBox("请输入数据库表名", "数据库表名", "ygl_temp" & cdt)

    Cnum = ActiveSheet.Range("a1"). CurrentRegion.Columns.Count
    On Error GoTo errmsg


    '定义字段为文本类型
    For i = 1 To Cnum
      ReDim Preserve arry2(i - 1)
      dt = ActiveSheet.Cells(1, i).Value
      dt2 = FindDataType(dt )
      arry2(i - 1) = dt2 & " varchar2(800)"
    Next

    '生成建表语句
    str1 = Join(arry2, " , " )
    str2 = "create table " & table_Name & " (" & str1 & " )"
    'MsgBox str2


    Set cnn = CreateObject ("ADODB.Connection" )
    Set rst = CreateObject ("ADODB.Recordset" )
    cnn.Open "Provider=OraOLEDB.Oracle.1;Data Source=cd;User Id=user;Password=password;"

    sql = str2
    cnn.Execute (sql)
    MsgBox "create table OK"


    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing

    Call 插入数据


        Exit Sub
    errmsg:
        MsgBox Err.Description, , "错误报告"
    End Sub



    Function FindDataType(V_cell As String)

    '替换标题里的特殊字符
    If V_cell = "" Then V_cell = "空的"

    If IsNumeric(Left (V_cell, 1 )) = True Then V_cell = "a" & V_cell

    If Len(V_cell) >= 15 Then V_cell = Left (V_cell, 14 )

    If InStr(V_cell , "/") Then V_cell = Replace (V_cell, "/" , "_")

    If InStr(V_cell , "'") Then V_cell = Replace (V_cell, "'" , "")



    FindDataType = V_cell

    End Function

    Sub 插入数据()
        Dim tt, arr1(), i% , j%, str$ , arr2(), str2$
        tt = Timer
        Dim cnn As Object, sql$ , rst As Object
        arr1 = ActiveSheet.Range("a1"). CurrentRegion.Value
        Set cnn = CreateObject("ADODB.Connection")
        Set rst = CreateObject("ADODB.Recordset")
        On Error GoTo errmsg
        cnn.Open "Provider=OraOLEDB.Oracle.1;Data Source=cd;User Id=stat_yg;Password=yg12345;"
       
        '构造插入语句
        sql = "insert into " & table_Name & " values ("
        '从第2行开始插入数据
        For i = 2 To UBound(arr1, 1)
            For j = 1 To UBound (arr1, 2 )
                ReDim Preserve arr2(j - 1)
                '在单元格内容插入单引号
                arr2 (j - 1) = "'" & arr1(i, j ) & "'"

            Next
            str = Join( arr2, ",")
            '执行插入语句
            str2 = sql & str & ")"
            cnn.Execute (str2)
        Next

        MsgBox "ok,用了" & Timer - tt & "秒"

        cnn.Close
        Set cnn = Nothing
        Exit Sub
    errmsg:
        MsgBox Err.Description, , "错误报告"
    End Sub


    2014.10.21 增加重复字段名处理,字段名含(,(,-的处理,修改插入数据行变量I为LONG类型,解决超过3W行整形数据溢出问题



    2014.11.26 增加对字段名包含换行符的处理,对字段名第一个字符为特殊字符的处理,替换2个下划线为1个。





    附件列表

    • 相关阅读:
      动态增加数据库表字段
      Centos7 + Python3.6 + Django + virtualenv + gunicorn + supervisor 环境配置详解
      typeof关键字简介 -rtti
      c++ typeid获取类型名-rtti
      C++ 中dynamic_cast<>的使用方法小结 -判断类型-rtti
      Java 8 Lambda表达式探险
      Lambda表达式详解
      android:ToolBar详解(手把手教程)(转)
      linux numfmt 命令--转换数字
      android mk odex问题 push apk 不生效
    • 原文地址:https://www.cnblogs.com/highroom/p/e2a5905bd9c9e99dcc46968333f3dafe.html
    Copyright © 2020-2023  润新知