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

news2025/2/24 17:29:28

工具介绍

基于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.coloradmin.cn/o/1209837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【模板】单源最短路径(弱化版)P3371

【模板】单源最短路径(弱化版) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779。 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路…

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…

02 # 类型基础:强类型与弱类型

宽泛的定义 在强类型语言中&#xff0c;当一个对象从调用函数传递到被调用函数时&#xff0c;其类型必须与被调用函数中声明的类型兼容 – Liskov, Zilles 1974 通俗定义 强类型语言不允许改变变量的数据类型&#xff0c;除非进行强制类型转换 比如下面 Java 里不能将布尔类…

Python-Python高阶技巧:HTTP协议、静态Web服务器程序开发、循环接收客户端的连接请求

版本说明 当前版本号[20231114]。 版本修改说明20231114初版 目录 文章目录 版本说明目录HTTP协议1、网址1.1 网址的概念1.2 URL的组成1.3 知识要点 2、HTTP协议的介绍2.1 HTTP协议的概念及作用2.2 HTTP协议的概念及作用2.3 浏览器访问Web服务器的过程 3、HTTP请求报文3.1 H…

深入学习 Android Framework 之 SystemServer 进程启动详解

深入学习 Android Framework 第三&#xff1a;深入学习 Android Framework 之 SystemServer 进程启动详解 文章目录 深入学习 Android Framework前言一、Android 系统的启动流程1. 流程图2. 启动流程概述 二、源码详解1. 时序图2. 源代码1、ZygoteInit # main()2、ZygoteInit …

Ubuntu 17.10 “Artful Aardvark” 发布首个 Beta

Ubuntu 17.10 “Artful Aardvark” 首个 Beta 版已发布。 按照 Ubuntu 17.10 的发布日程 &#xff0c;Ubuntu 17.10 首个 beta 版按时发布了。不过参与本次测试版的没有 Ubuntu 官方风味版本&#xff08;要尝试的话可以考虑每日构建 ISO&#xff09;&#xff0c;包括了 Kubunt…

MySQL学习day02

一、SQL通用语法 1&#xff09;SQL语句可以单行或多行书写&#xff0c;以分号结尾 2&#xff09;SQL语句可以使用空格/缩进来增强语句的可读性 3&#xff09;MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使用大写 4&#xff09;注释&#xff1a; a)单行注释&#x…

Day30力扣打卡

打卡记录 最长回文子序列&#xff08;区间DP&#xff09; 链接 class Solution:def longestPalindromeSubseq(self, s: str) -> int:n len(s)f [[0] * n for _ in range(n)]max lambda x, y: x if x > y else yfor i in range(n - 1, -1, -1):f[i][i] 1for j in ra…

leetcode二分查找算法题

目录 1.二分查找2.在排序数组中查找元素的第一个和最后一个位置3.x的平方根4.搜索插入位置5.山脉数组的峰顶索引6. 寻找峰值7.寻找旋转排序数组中的最小值8.8.0~n-1中缺失的数字 1.二分查找 二分查找 class Solution { public:int search(vector<int>& nums, int …

掉瓶子小游戏

欢迎来到程序小院 掉瓶子 玩法&#xff1a;旋转的瓶子&#xff0c;根据瓶子方向&#xff0c;点击鼠标左键瓶子掉落&#xff0c;从桌面中间掉下即得1分&#xff0c;卡在桌边瓶子碎了游戏结束&#xff0c;快去掉瓶子吧^^。开始游戏https://www.ormcc.com/play/gameStart/203 htm…

第1关:简单查询

任务描述相关知识 检索数据表的内容编程要求测试说明 任务描述 本关任务&#xff1a; 用 SELECT 语句检索数据表中指定字段的数据&#xff1b; 用 SELECT 语句检索数据表中所有字段的数据。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.如何获取数据表…

从0到0.01入门 Webpack| 001.精选 Webpack面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

深度学习 植物识别算法系统 计算机竞赛

文章目录 0 前言2 相关技术2.1 VGG-Net模型2.2 VGG-Net在植物识别的优势(1) 卷积核&#xff0c;池化核大小固定(2) 特征提取更全面(3) 网络训练误差收敛速度较快 3 VGG-Net的搭建3.1 Tornado简介(1) 优势(2) 关键代码 4 Inception V3 神经网络4.1 网络结构 5 开始训练5.1 数据集…

Python基础入门----使用Pipenv工具时产生的Pipfile和Pipfile.lock文件有什么区别以及有什么作用

文章目录 PipfilePipfile.lock实操示例当我们使用 Pipenv 工具进行 Python 项目的依赖管理时,会遇到两个重要的文件:Pipfile 和 Pipfile.lock。这两个文件在项目中扮演着不同但又相互补充的角色。接下来,我将详细介绍这两个文件的区别和作用,并提供一些具体的使用示例。 P…

机器视觉系统中工业光源选型避坑指南

光源的作用&#xff1a; 照亮目标&#xff0c;提高目标亮度 形成有利于图像处理的效果&#xff0c;提升对比度 克服环境光干扰&#xff0c;保证图像的稳定性 光源的选型思路&#xff1a; ①颜色 ②外形  ③打光方式  ④亮度 选颜色 通过选择合适颜色的光源&#xff0c;…

城市内涝对策,万宾科技内涝积水监测仪使用效果

随着城市化进程的加速&#xff0c;城市道路积水问题明显越来越多&#xff0c;给人们的出行和生活带来更多的不便。内涝积水监测仪作为高科技产品能够实时监测道路积水情况&#xff0c;为城市排水系统的管理和维护提供重要的帮助。 在城市生命线的基础设施规划之中&#xff0c;地…

(论文阅读32/100)Flowing convnets for human pose estimation in videos

32.文献阅读笔记 简介 题目 Flowing convnets for human pose estimation in videos 作者 Tomas Pfister, James Charles, and Andrew Zisserman, ICCV, 2015. 原文链接 https://arxiv.org/pdf/1506.02897.pdf 关键词 Human Pose Estimation in Videos 研究问题 视频…

并发编程由浅及深(一)

并发编程重要吗&#xff1f;当然重要&#xff0c;因为并发在我们的项目中真实存在&#xff0c;如果你不能充分了解它那么很可能造成严重的生产事故。最近隔壁项目组出了一个问题&#xff0c;每次请求接口之后都发现线程固定增加了5个&#xff0c;而且线程数一直增加没有减少&am…

【Java笔试强训】Day11(CM24 最近公共祖先、HJ86 求最大连续bit数)

CM24 最近公共祖先 链接&#xff1a;最近公共祖先 题目&#xff1a; 将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号&#xff0c;根结点编号为1。现给定a&#xff0c;b为两个结点。设计一个算法&#xff0c;返回a、b最近的公共祖先的编号。注意其祖先也可能是结…

CodeWhisperer 使用经验分享

今天给大家分享一下 Amazon CodeWhisperer 编程工具&#xff08;免费哦&#xff09;&#xff0c;使用这个软件后我的编码质量提升不少&#xff0c;给大家分享一下我的经验。希望大家支持哦。 Amazon CodeWhisperer 是亚⻢逊出品的一款基于机器学习的 AI 编程助手&#xff0c;可…