今天遇到同事提出的一个需求,在excel里有表的结构,但导入到Mysql时出现问题,字段名可以正常导入,但字段类型和长度还得手动修改,问一下有没有什么简便方法。
我使用的是Office2019的Excel。下面步入正题:
1、图1:空白,准备显示生成的SQL语句。图2:用户表。 图3:年级表。
2、在“开发工具”菜单里打开Visual Basic。如果没有“开发工具”这个选项,在文件 -->选项里设置一下,把开发工具勾上即可。如下图:
继续刚才的内容,打开Visual Basic之后,双击sheet1,打开窗口,并写入代码,如下图:
接着,点击运行按钮即可。如下图:
最终效果,如下图:
以上SQL语句没有经过测试,只是生成这么一个效果。大家可以参考一下,如果有问题,请自行调整。
以下是代码片断:(本想放在下载里的,但想想,还是算了,大家都没有下载积分了……)
Sub generateSql()
'sql语句变量和表名变量
Dim sql As String
Dim tableName As String
'第一个sheet用于保存生成的SQL语句,所以从第二个开始
For si = 2 To Workbooks(1).Sheets.Count
Set mysheet = Workbooks(1).Sheets(si) 'sheet对象
tableName = mysheet.Range("A2").Value '表名-英文(第一列第二行)
'如果表已经存在,则删除
sql = sql & "DROP TABLE IF EXISTS '" & tableName & "'; " & vbCrLf
'创建表
sql = sql & "CREATE TABLE '" & tableName & "' ( " & vbCrLf
For i = 2 To mysheet.UsedRange.Rows.Count '遍历列
Dim nameStr As String '字段名
Dim typeStr As String '类型及长度
Dim nullStr As String '是否为空
Dim comment As String '注释
'以下四行是为上面的变量赋值
nameStr = mysheet.Range("B" & i).Value
typeStr = mysheet.Range("C" & i).Value
nullStr = mysheet.Range("D" & i).Value
comment = mysheet.Range("E" & i).Value
sql = sql & "'" & nameStr & "' " & typeStr
'判断是否为空
If nullStr = "Y" Then
sql = sql & " NOT NULL "
Else
sql = sql & " NULL "
End If
sql = sql & "COMMENT '" & comment & "'"
If i <= mysheet.UsedRange.Rows.Count Then
sql = sql & ","
End If
sql = sql & vbCrLf
Next i
'默认id为主键
sql = sql & "PRIMARY KEY ('id')"
'建表完成
sql = sql & vbCrLf
sql = sql & ");" & vbCrLf
sql = sql & "-----创建表 " & tableName & " 成功" & vbCrLf & vbCrLf
Next si
Workbooks(1).Sheets(1).Range("A" & 1).Value = sql
End Sub
好啦,就这样吧!
虽是原创,但也可转载~
我是来自北京天码科技的卢泽