【VBA】基于EXCEL生成Insert语句工具

news/2024/7/21 4:08:52 标签: excel, VBA工具

工具介绍

基于Excel生成INSERT语句工具是一个辅助工具,用于帮助用户根据Excel数据生成INSERT语句。通常,在数据库中插入大量数据时,手动编写INSERT语句会非常繁琐和耗时。而使用这个工具,可以通过Excel中的数据自动生成相应的INSERT语句,从而简化操作。

本工具会根据字段数量、字段类型、字段长度动态生成随机数据,只使用于生成大量测试数据

该工具的基本概述如下:
excel截图:
在这里插入图片描述

确定表名:在Excel中,A2单元格确定填写表的名字,确定生成数据条数
确定字段信息:第三行将其作为INSERT语句中的字段名、第四行是字段类型、第五行是字段长度。
准备模板:在Excel的另一个工作表中,创建一个INSERT sheet页。可以按照MySQL、SQL Server或其他数据库的语法要求进行模板的设计。
在这里插入图片描述

生成INSERT语句:在模板中,使用Excel的一些函数(如CONCATENATE、TEXT、IF等)将表名、字段名和对应的数据拼接成INSERT语句。使用适当的引号来处理字符串数据。

复制公式:将生成的INSERT语句公式应用到每一行的数据,并自动适应相应的字段和数据。

导出结果:将生成的INSERT语句复制到文本文件或数据库工具中,然后执行插入操作。

操作:A2填写表名称,F2中填写生成insert条数;点击【Data production】生成数据,点击【Insert作成】在Insert sheet中生成insert语句;粘贴到数据库视图工具执行即可。

代码片段

Data production按钮

Private Sub CommandButton2_Click()
    Dim arr() As String
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    'A列最后一个非空单元格所在的行号。
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    '最后一个非空单元格所在的列号。
    lastColumn = ws.Cells(3, ws.Columns.Count).End(xlToLeft).Column
    
   '此for是生成多少条数据
    For r = 1 To CInt(ws.Cells(2, 6).Value)
    	'遍历列
        For i = 1 To lastColumn
            '判断是都是decmial类型
            If ws.Cells(4, i).Value = "QUAN" Or ws.Cells(4, i).Value = "DEC" Then
            	'用于将单元格 ws.Cells(r + 5, i) 的格式设置为文本格式的代码。
                ws.Cells(r + 5, i).NumberFormat = "@"
                '判断是否包含逗号
                If InStr(ws.Cells(5, i).Value, ",") > 0 Then
                    '截取
                    arr = Split(ws.Cells(5, i).Value, ",")
                    '赋值,GenerateRandomData()类型处理方法
                    ws.Cells(r + 5, i).Value = CStr(GenerateRandomData(ws.Cells(4, i).Value, CInt(arr(0)) - CInt(arr(1)), CInt(arr(1))))
                Else
                    ws.Cells(r + 5, i).Value = CStr(GenerateRandomData(ws.Cells(4, i).Value, ws.Cells(5, i).Value, 0))
                End If
            Else
                ws.Cells(r + 5, i).Value = GenerateRandomData(ws.Cells(4, i).Value, ws.Cells(5, i).Value, 0)
            End If
        Next i
    Next r
End Sub

GenerateRandomData()类型处理方法

Function GenerateRandomData(dataType As String, length As Integer, decimalPlaces As Integer) As Variant
    Dim result As Variant
    
    Select Case dataType
        Case "INT4"
            result = Int((10 ^ length - 1) * Rnd)
            
        Case "CHAR", "TIMS", "CUKY"
            Dim validChars As String
            validChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
            
            Dim i As Integer
            For i = 1 To length
                result = result & Mid(validChars, Int((Len(validChars) * Rnd) + 1), 1)
            Next i
            
        Case "DATS"
            Dim todayDate As String
            todayDate = Format(Date, "yyyy-mm-dd")
            result = todayDate
            
        Case "NUMC"
            Dim numcChars As String
            numcChars = "0123456789"
            
            Dim j As Integer
            For j = 1 To length
                result = result & Mid(numcChars, Int((Len(numcChars) * Rnd) + 1), 1)
            Next j
            
        Case "DEC", "QUAN", "CURR"
            Dim minValue As Double
            Dim maxValue As Double
            minValue = 10 ^ (length - decimalPlaces) - 1
            maxValue = 10 ^ length - 10 ^ (length - decimalPlaces)
            result = minValue + Rnd * (maxValue - minValue)
            result = Round(result, decimalPlaces)
            
        Case Else
            result = "Invalid data type."
    End Select
    
    GenerateRandomData = result
End Function



Insert作成按钮

Private Sub CommandButton1_Click()
    Dim ws As Worksheet
    Dim lastRow As Integer
    Dim insertSQL As String
    Dim fieldNames As String
    Dim fieldValues As String
    Dim fieldName As String
    Dim fieldValue As String
    Dim i As Integer
    
 	'获取工作薄
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    Set Insert = ThisWorkbook.Sheets("Insert")
    
 	'A列最后一个非空单元格所在的行号。
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    '最后一个非空单元格所在的列号。
    lastColumn = ws.Cells(3, ws.Columns.Count).End(xlToLeft).Column
    
    '遍历列,拼接列字符串
    For i = 1 To lastColumn
        fieldName = ws.Cells(3, i).Value
        
        
        fieldNames = fieldNames & """" & fieldName & """, "
    Next i
        
        
    fieldNames = Left(fieldNames, Len(fieldNames) - 2)
    Debug.Print fieldNames
    '遍历行    
    For i = 6 To lastRow
        fieldValues = ""
         '遍历列   
        For j = 1 To lastColumn
        	'获取并拼接insert数据
            If ws.Cells(4, j).Value = "DATS" Then
                fieldValue = "TO_DATE('" & ws.Cells(i, j).Value & "', 'YYYY-MM-DD')"
                
            Else
                fieldValue = ws.Cells(i, j).Value
                fieldValue = "'" & Replace(fieldValue, "'", "''") & "'"
            End If
            
            
            fieldValues = fieldValues & fieldValue & ", "
        Next j
        
   
        fieldValues = Left(fieldValues, Len(fieldValues) - 2)
        
		'生成并输出insert 语句
        insertSQL = "INSERT INTO " & ws.Range("A2").Value & "(" & fieldNames & ") VALUES (" & fieldValues & ");"
        
        Insert.Range("A" & i - 5).Value = insertSQL
       
        Debug.Print insertSQL
    Next i
End Sub



希望能帮助到各位 加油!

大鹏一日同风起 扶摇直上九万里!


End

http://www.niftyadmin.cn/n/5180640.html

相关文章

如何修复msvcr120.dll丢失问题,常用的5个解决方法分享

电脑在启动某个软件时,出现了一个错误提示,显示“msvcr120.dll丢失,无法启动软件”。这个错误通常意味着计算机上缺少了一个重要的动态链接库文件,即msvcr120.dll。 msvcr120.dll是什么 msvcr120.dll是Microsoft Visual C Redist…

React 18 + Hooks +Ts 开发中遇到的问题及解决方案!

这篇文章是用来专门记录关于React 18 Hooks Ts 开发中遇到的问题及解决方案 Q1 问题描述: TS7016: Could not find a declaration file for module js-export-excel. /Users/zhangliangliang/WebstormProjects/daizhang-system-front/node_modules/js-export-exc…

H5游戏源码分享-超级染色体小游戏

H5游戏源码分享-超级染色体小游戏 游戏玩法 不断地扩大发展同颜色的色块 用最少的步数完成游戏 <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width,user-scalableno,init…

Git 我配置了ssh key,还是报错让我输入密码

Git 我配置了ssh key&#xff0c;还是报错让我输入密码 解决&#xff1a;配置为.git仓库&#xff0c;而不是HTTPS、 git push Username for ‘https://github.com’: xddun Password for ‘https://xddungithub.com’: remote: Support for password authentication was rem…

N9912A FieldFox 手持式射频分析仪,4 GHz 和 6 GHz

FieldFox 苏州新利通 N9912A 手持式射频分析仪 4 GHz 和 6 GHz 功能或可携性绝不打折 便携式分析仪 01 N9912A 手持式射频分析仪 主要测试功能 七合一的射频分析仪 电缆和天线测试、电缆故障定位、回波损耗测试、电缆损耗测试 矢量网络分析测试,显示史密斯圆图 矢量…

Ubuntu20.04软件安装顺序

目录 0.网卡驱动1. sogoupinyin2. terminator3.zsh4.显卡驱动(在cuda之前)5.CUDA与cudnn,TensorRT6.OpenCV(在ROS之前) 0.网卡驱动 参考我的博客Ubuntu20.04安装搜狗输入法 1. sogoupinyin 参考我的博客ubuntu20.04.6安装Intel AX211网卡驱动 2. terminator sudo apt-get …

自组织竞争网络在模式分类中的应用——患者癌症发病预测

大家好&#xff0c;我是带我去滑雪&#xff01; 自组织神经网络可以通过对客观事件的反复观察、分析与比较&#xff0c;自行提示内在规律&#xff0c;并对具有共同特征的事物进行正确的分类。该网络更与人脑中生物神经网络的学习模式类似&#xff0c;即可以通过自动寻找样本中的…

Java学习之路 —— Day3(内部类、枚举、泛型、API)

文章目录 1. 内部类2. 枚举3. 泛型 1. 内部类 成员内部类 就是类中的一个普通成员&#xff0c;类似普通的成员方法、成员变量。&#xff08;套娃&#xff09; public class Outer {public class Inner {private String name;public static String school;public String getNa…