如何将在Excel中设计的实体对象字段表导入PowerDesigner

今天遇到将Excel中设计的对象字段表转换成MySQL中的表这一问题,我的解决思路是利用PowerDesigner创建PDM模型再转换到sql脚本。这里涉及的到一个比较麻烦的事情是,如何将那么多的字段方便快速的赋给PDM模型实体表?通过参考网络资料,整理了下面的脚本,并给出了详细注释,另外在文章结尾也提供了完成的代码和使用说明文件供下载。

'这个脚本的作用是将Excel模板中Sheet表对应的数据模型通过PowerDesigner的PDM转换成MySQL数据库中的表
'使用时可能修改到的地方主要是Excel文档的路径和数据模型列读取赋值部分,如果严格使用提供的Excel模板就不用修改列读取赋值了
Option Explicit                     '强制显式声明模块中的所有变量
Dim mdl                             '声明一个PD模型
Set mdl = ActiveModel               '设置模型值即为当前活动的模型
If (mdl Is Nothing) Then
    MsgBox ("不存在活动的PD模型")
End If

Dim HaveExcel
Dim RQ                              '声明一个请求             
RQ = MsgBox("你的电脑上安装了Excel软件吗 ?", vbYesNo + vbInformation)
If RQ = vbYes Then
    HaveExcel = True
    Dim x1                                                              '声明一个变量
    Set x1 = CreateObject("Excel.Application")                          '为x1变量赋值一个Excel对象
    x1.Workbooks.Open "C:\Users\Administrator\Desktop\templet.xlsx"     '用x1打开指定路径Excel文档(默认xlsx文件是在桌面)
    x1.Workbooks(1).Worksheets("Sheet1").Activate                       '指定要打开的Sheet表
Else
    HaveExcel = False
End If
a x1, mdl                                               '调用函数a(x1,md1)

'声明子函数a(x1,md1)
Sub a(x1, mdl)      
Dim rwIndex                                             '声明Sheet表的行标
Dim table                                               '声明PD模型的表实体
Dim sheet                                               '声明一个Sheet对象
Dim col                                                 '声明表实体的属性列
on error Resume Next                                    '指明后面的代码即使出错也要执行完成
MsgBox ("开始构造数据表")
Set table = mdl.Tables.CreateNew                        '创建一个表实体
Set sheet = x1.Workbooks(1).Worksheets("Sheet1")        '为sheet对象赋值
table.Name = sheet.Cells(1, 2).Value                    '指定表的中文名,方便理解。
table.Code = sheet.Cells(1, 7).Value                    '指定表的实体名
'指定要遍历的Excel行,第1行是表头,第2行是中文说明,第三行是英文说明,则从第4行开始,默认Sheet表有200行数据
For rwIndex = 4 To 200                                  
    With sheet                                          '在Excel的Sheet表这个对象上执行下列操作
        If .Cells(rwIndex, 2).Value = ""  Then          '如果该行第2列为空,说明所有字段已经读完了,可以结束了
            Exit For
        End If
        Set col = table.Columns.CreateNew               '创建PD模型表实体的属性列
        col.Name = .Cells(rwIndex, 1).Value             '指定字段中文名,便于理解
        col.Code = .Cells(rwIndex, 2).Value             '指定字段名,程序或模型中使用的名字
        col.Comment = .Cells(rwIndex, 3).Value          '指定字段说明,对字段的详细描述
        col.DataType = .Cells(rwIndex, 4).Value         '指定字段数据类型
        col.Length = .Cells(rwIndex,5).Value            '指定字段长度
        col.Precision = .Cells(rwIndex,6).Value         '指定字段数据精度
        If .Cells(rwIndex,7).value="" Or .Cells(rwIndex,7).value="False" Or .Cells(rwIndex,7).value="F" Then
            col.Primary = False                         '指定是否主键,true表示为主键
        Elseif .Cells(rwIndex,7).value="True" Or .Cells(rwIndex,7).value="T" Then
            col.Primary = True
        Else MsgBox("主键标记设置错误")
        End If
        If .Cells(rwIndex,8).value="" Or .Cells(rwIndex,8).value="False" Or .Cells(rwIndex,8).value="F" Then
            col.Primary = False                         '指定是否外键,true表示为外键
        Elseif .Cells(rwIndex,8).value="True" Or .Cells(rwIndex,8).value="T" Then
            col.Primary = True
        Else MsgBox("外键标记设置错误")
        End If
        If .Cells(rwIndex,9).value="" Or .Cells(rwIndex,9).value="False" Or .Cells(rwIndex,9).value="F" Then
            col.Primary = False                         '指定是否非空,true表示为非空
        Elseif .Cells(rwIndex,9).value="True" Or .Cells(rwIndex,9).value="T" Then
            col.Primary = True
        Else MsgBox("非空标记设置错误")
        End If
    End With
Next                                                    'For循环变量的下一个值
MsgBox ("数据表构造完成")
End Sub

问题解决方案相关代码及文件下载:Excel_PD_Table

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值