在设计功能模块的时候需要设计很多张表结构,前期为了方便整理,使用Excel完成了字段设计,弄好以后想把字段转化为表的时候要一个字段一个字段的粘贴,不太方便,网上搜了一些方案后发现用PowerDesigner导入Excel后可以批量生成表结构和sql,费了一番功夫后终于整出来了,中间也遇到了一些坑,写出来供大家参考
首先我们设计字段的时候需要使用一个模板,这样后期用脚本的时候可以根据相应的单元格填充对应的内容,模板和脚本我都会放在最后的百度网盘里面供大家下载
这时候打开我们的PowerDesigner 我用的是16.5版本的,点击左上角导航栏的 文件-->新建模型
选择截图对应的模型 然后选择左侧的目录后 使用ctrl+shift+x快捷键 唤出脚本编辑器
ps:这里会发现字体特别小,我找了好久没办法调大字体,有人知道的话评论区麻烦告知一下,我是绑定第三方编辑器来解决的,选择
下拉框中的Choose Program 选择文本编辑器,我用的是notePad++
在这里编辑你要执行的脚本,脚本如下
Option Explicit
dim shet
dim cnt
cnt = 0
For each shet in array("订单表","计划表") '列出excel文件所有sheet名称,如s1, s2, s3~~~~~~
Dim mdl ' the current model
Set mdl = ActiveModel
If (mdl Is Nothing) Then
MsgBox "There is no Active Model"
End If
Dim HaveExcel
Dim RQ
RQ = vbYes 'MsgBox("Is Excel Installed on your machine ?", vbYesNo + vbInformation, "Confirmation")
If RQ = vbYes Then
HaveExcel = True
' Open & Create Excel Document
Dim x1 '
Set x1 = CreateObject("Excel.Application")
x1.Workbooks.Open "C:\Users\wangyi\Desktop\表结构整理.xlsx" '指定excel文档路径
x1.Workbooks(1).Worksheets(shet).Activate '指定要打开的sheet名称
Else
HaveExcel = False
End If
a x1, mdl
cnt = cnt + 1
Next
MsgBox "生成数据表结构共计 " + CStr(cnt), vbOK + vbInformation, "表"
sub a(x1, mdl)
dim rwIndex
dim tableName
dim colname
dim table
dim col
dim count
dim abc
on error Resume Next
'--------------------------------
'下面是读取excel,添加表实体属性
'--------------------------------
For rwIndex = 1 To 150 '指定要遍历的Excel行标 由于第2行是表头,从第1行开始,看你这个表设计多少行
With x1.Workbooks(1).Worksheets(shet)'需要循环的sheet名称
If .Cells(rwIndex,1).Value <> "" And .Cells(rwIndex,2).Value <> "" And .Cells(rwIndex,4).Value = "" Then'Excel中表头的1列是表名,2空,3是表注释
set table = mdl.Tables.CreateNew '创建一个表实体
table.Code = .Cells(rwIndex,3).Value'从excel中取得表名称和编码
table.Name = .Cells(rwIndex,2).Value'
table.Comment = .Cells(rwIndex,2).Value '指定列说明
count = count + 1
Continue
End If
If .Cells(rwIndex,1).Value = "字段名" or .Cells(rwIndex,4).Value = "" Then '第二列为空的都可以忽略
continue '这里忽略空行和表名行、表头行
Else
set col =table.Columns.CreateNew '创建一列/字段
col.Code = .Cells(rwIndex, 1).Value '指定列code
col.DataType = .Cells(rwIndex, 3).Value & "(" & .Cells(rwIndex, 4).Value & ")" '指定列数据类型
If.Cells(rwIndex, 2).Value = "Y" Then'指定主键
col.Primary =true
End If
col.Name = .Cells(rwIndex, 5).Value '指定列name
col.Comment = .Cells(rwIndex, 5).Value '指定列说明
End If
End With
Next
'MsgBox "生成数据表结构共计 " + CStr(count), vbOK + vbInformation, "表"
Exit Sub
End sub
在使用的时候需要修改第五行和二十行的值 第五行要改成Excel中要生成的sheet名称,二十行是你的电脑中的这个Excel的目录
检查无误后就可以点击run来生成你想要的表结构了
等待一小会后 会弹出生成成功了几张表结构,然后左边多出一个目录
这就是咱们想要的表结构了,右键点击对应的表结构名称里面会有sql预览,点击后复制出来就是咱们想要的sql了
这里面有一个小坑,datetime一定要设置字段长度 ,生成sql以后再把datetime后面带的长度去掉
还有一个需求就是我生成以后产品想要一个关于这个表结构的Excel目录和详细信息
这时候就需要一个导出所有表结构的脚本了,网盘里面有把所有的表结构导出成一个Excel的脚本,分享给大家
如果有什么问题欢迎在评论区提出
https://pan.baidu.com/s/18ZpQGesKJAARjZj4C4IzaQ 提取码 k4ms