zoukankan      html  css  js  c++  java
  • 通过Excel生成PowerDesigner表结构设计

    说明:近期做部分表结构设计,在word里设计调整好了,需要整理到PowerDesigner中,但是手工录入太麻烦。

    找了个工具(地址:http://www.cnblogs.com/hwaggLee/p/5542078.html),将其做了部分修改和完善,并支持多个表同时导入。

    使用方法:

    1、整理Excel。文件名为Temp.xlsx,放到D:根盘目录下。每个sheet页是一个表,格式如下:

    2、打开PowerDesinger,新建模型

     3、打开命令执行功能。

     

     4、将脚本复制到窗口中,点Run,生成PD结构

     附:脚本文件

    '开始
    Option Explicit
     
    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 "D:Temp.xlsx" '指定 excel文档路径
    Else
        HaveExcel = False
    End If
     
    a x1, mdl
     
    sub a(x1, mdl)
    dim rwIndex
    dim tableName
    dim colname
    dim table
    dim col
    dim count
    dim sheetIndex
    on error Resume Next
    For sheetIndex = 1 To 200 '指定要遍历的 Sheet
        x1.Workbooks(1).Worksheets(sheetIndex).Activate '指定要打开的sheet名称
        With x1.Workbooks(1).Worksheets(sheetIndex)
        If .Cells(1, 1).Value = "" Then
            Exit For
        End If
        set table = mdl.Tables.CreateNew '创建一个 表实体
        table.Name = .Cells(1, 2).Value '指定 表名,如果在 Excel文档里有,也可以 .Cells(rwIndex, 3).Value 这样指定
        table.Code = .Cells(1, 4).Value '指定 表名
        count = count + 1
     
        For rwIndex = 3 To 1000 '指定要遍历的 Excel行标 由于第2行是列的 表头, 从第3行开始
             
                If .Cells(rwIndex, 1).Value = "" Then
                Exit For
                End If
     
                set col = table.Columns.CreateNew '创建一列/字段
                'MsgBox .Cells(rwIndex, 1).Value, vbOK + vbInformation, "列"
                If .Cells(rwIndex, 1).Value = "" Then
                    col.Name = .Cells(rwIndex, 2).Value '指定列名-----如果第1列(Name)为空,则显示第2列的Code
                Else
                    col.Name = .Cells(rwIndex, 1).Value
                End If
                'MsgBox col.Name, vbOK + vbInformation, "列"
                col.Code = .Cells(rwIndex, 2).Value '指定列名-------第2列是Code
                col.DataType = .Cells(rwIndex, 3).Value '指定列数据类型-----第3列是类型
                col.Comment = .Cells(rwIndex, 5).Value '指定列说明-------第5列是列说明
                If .Cells(rwIndex, 4).Value = "否" Then
                    col.Mandatory = true '指定列是否可空 true 为不可空 ------第4列指定列是否允许为空
                End If
                If rwIndex = 3 Then
                    col.Primary = true '指定主键-------第3行是主键列
                End If
             
        Next
        MsgBox "生成数据 表结构共计 " + CStr(count), vbOK + vbInformation, " 表"
        End With
    Next
    Exit Sub
    End sub

      说明:

      可进一步完善,将类型和长度分开、增加精度、表说明等等。

    问题:the object has no symbol

    解决方案:右键PhysicalDiagram,选择show symbols,点击select all,点击ok即可。

  • 相关阅读:
    poj 3273 Monthly Expense(贪心+二分)
    codeforces 235 div2 C Team
    ZOJ 3607 Lazier Salesgirl(贪心)
    poj 1185 炮兵阵地(三维状态压缩dP)
    poj 2411 Mondriaan's Dream(状态压缩dP)
    sdut 2819 比赛排名(边表 拓扑排序)
    hdu 1421 搬寝室(dp)
    hdu 1243 反恐训练营(dp 最大公共子序列变形)
    Codeforces Round #232 (Div. 2) B. On Corruption and Numbers
    hdu 1559 最大子矩阵 (简单dp)
  • 原文地址:https://www.cnblogs.com/roboot/p/9956071.html
Copyright © 2011-2022 走看看