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

工具介绍

基于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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/146273.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第五章ARM处理器的嵌入式硬件系统设计——课后习题

1ARM处理器的工作状态 ARM处理器有两种工作状态。具体而言,ARM处理器执行32位ARM指令集时,工作在ARM状态,当ARM处理器执行16位thumb指令集时候,工作在thumb状态。 1ARM指令特点 1一个大的,统一的寄存器文件。 2基于…

nginx四层tcp负载均衡及主备、四层udp负载均衡及主备、7层http负载均衡及主备配置(wndows系统主备、负载均衡)

准备工作 服务器上安装、配置网络负载平衡管理器 windows服务器热备、负载均衡配置-CSDN博客 在windows服务器上安装vmware17 win10 上安装vmware17-CSDN博客 在windows上利用vmware17 搭建centos7 mini版 在windows上利用vmware17 搭建centos7 mini版本服务器-CSDN博客 …

20231114在HP笔记本的ubuntu20.04系统下向RealmeQ手机发送PDF文件

20231114在HP笔记本的ubuntu20.04系统下向RealmeQ手机发送PDF文件 2023/11/14 14:11 手机:Realme Q 笔记本电脑:HP https://item.jd.com/100012583174.html 惠普(HP)战66 三代AMD版 14英寸轻薄笔记本电脑(锐龙7nm 六核…

【Shell脚本11】Shell 函数

Shell 函数 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。 shell中函数的定义格式如下: [ function ] funname [()]{action;[return int;]}说明: 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何…

【工艺库】SMIC数字后端工艺库

工艺库文件 Calibredigital文件夹apollolefprimetimesynopsys TD系列文件夹 本来是想找一个工艺库,想要其包含逻辑综合和SPICE Model相关的库文件,但是找了很久也没有直接找到想要的,主要原因还是自己对工艺库文件的构成不是很清楚&#xff0…

flink 8081 web页面无法被局域网内其他机器访问

实现 http://localhost:8081/#/overview 可以被局域网其他机器访问

高德地图系列(一):vue项目如何使用高德地图、入门以及基本控件使用

目录 第一章 前言 第二章 准备工作 2.1 账号注册 2.2 高德地图开发平台文档 2.3 创建应用 第三章 使用地图 3.1 地图使用步骤 3.2 理解几个地图基础控件 3.3 基础类理解 第一章 前言 小编都是在vue项目中使用高德地图的,每一个功能都会亲测可用之后才会…

【JavaEE】Servlet API 详解(HttpServlet类)

一、HttpServlet 写 Servlet 代码的时候, 首先第一步就是先创建类, 继承自HttpServlet, 并重写其中的某些方法 1.1 HttpServlet核心方法 1.2 Servlet生命周期 这些方法的调用时机, 就称为 “Servlet 生命周期”. (也就是描述了一个 Servlet 实例从生到死的过程) 1.3 处理G…

桥接模式 rust和java的实现

文章目录 桥接模式介绍应用实例优点缺点使用场景关键角色 实现javarsut rust代码仓库 桥接模式 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间…

[工业自动化-21]:西门子S7-15xxx编程 - 软件编程 - 如何快速看懂PLC梯形图?

目录 预备:电气图 1. 电路图 2. 电气图 一、梯形图概述 1.1 什么是梯形图 1.2 梯形图的作用 二、梯形图中的主要元素 三、梯形图的程序执行 3.1 梯形图扫描的原则 3.2 梯形图执行顺序 3.3 梯形图扫描 预备:电气图 1. 电路图 电路组成&#x…

MHA实验和架构

什么是MHA? masterhight availabulity:基于主库的高可用环境下可以实现主从复制、故障切换 MHA的主从架构最少要一主两从 MHA的出现是为了解决MySQL的单点故障问题。一旦主库崩溃,MHA可以在0-30秒内自动完成故障切换。 MHA的数据流向和工…

Maven 的 spring-boot-maven-plugin 红色报错

1、想要处理此情况&#xff0c;在工具下面加上指定的版本号。 2、给自己的maven的setting文件加工一下。 <mirrors><!--阿里云镜像1--><mirror><id>aliyunId</id><mirrorOf>central</mirrorOf><name>aliyun maven</name>…

C/C++计算乘积 2021年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C计算乘积 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C计算乘积 2021年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 给定两个数a,b&#xff0c;计算它们的乘积 2、输入输出…

pycharm/vscode 配置black和isort

Pycharm blackd Pycharm中有插件可以实现后台服务运行black&#xff1a;BlackConnect 安装 配置 Pycharm isort pycharm中&#xff0c;isort没有插件&#xff0c;暂使用外部工具实现&#xff0c;外部工具也可添加快捷键实现快捷对文件、文件夹进行format import&#xff1…

Java19新增特性

前言 前面的文章&#xff0c;我们对Java9、Java10、Java11、Java12 、Java13、Java14、Java15、Java16、Java17、Java18 的特性进行了介绍&#xff0c;对应的文章如下 Java9新增特性 Java10新增特性 Java11新增特性 Java12新增特性 Java13新增特性 Java14新增特性 Java15新增特…

No206.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

使用VScode编译betaflight固件--基于windows平台

使用VScode编译betaflight固件--基于windows平台 1、使用git克隆betaflight的开源代码2、betaflight的代码框架分析&#xff1a;3、配置编译环境&#xff1a;4、VScode上编译 betaflight不仅可以在LInux上进行编译也可以在Windows上编译&#xff0c;本文主要介绍在windows平台上…

多维时序 | MATLAB实现PSO-LSTM-Attention粒子群优化长短期记忆神经网络融合注意力机制的多变量时间序列预测

多维时序 | MATLAB实现PSO-LSTM-Attention粒子群优化长短期记忆神经网络融合注意力机制的多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-LSTM-Attention粒子群优化长短期记忆神经网络融合注意力机制的多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果…

116.飞行员兄弟

题目链接 思路 明天补 代码 #include<bits/stdc.h> using namespace std; const int N 10; char g[N][N]; char backup[N][N]; int ans 0x3f3f3f3f; vector<pair<int, int>> v; int get(int x, int y) {return x * 4 y; } void turn (int x, int y) {i…

​软考-高级-系统架构设计师教程(清华第2版)【第5章 软件工程基础知识(190~233)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第5章 软件工程基础知识&#xff08;190~233&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图