PowerDesigner 16.5 使用VBScript脚本从Excel导入物理数据模型

本文使用的数据库类型是Oracle 11g

最近在工作中遇到一个问题:数据的设计以表格的形式保存在Excel文件中。(由于保密原因,我只能看到数据库设计文档,无法访问数据库。=_=!)

其中包括Name,Code,DataType,Unit,Length,Precision,Primary,Foreign Key,Mandatory,Comment等字段。

现在我要使用PowerDesigner重新建立这些表的物理模型,但是面对好几百个表,如果使用复制粘贴的方式不但费事费力,而且容易出错。

PowerDesigner提供了很多扩展功能,其中包括从Excel文件导入物理数据模型。

导入的方式有两种,一种是把表的设计模型整理为PowerDesigner要求的格式,另外一种是编写VBScript脚本。

由于编写VBScritp比较灵活,而且把表的设计整理为PowerDesigner需要的格式也比较麻烦,所以通过编写VBScript脚本导入Excel中的模型数据。

  1 '============================================================
  2 '从Excel文件中导入PowerDesigner 物理数据模型
  3 '
  4 '注意:1,Excel表格中不能有合并的单元格
  5 '      2,列之间不能有空行
  6 '============================================================
  7 
  8 
  9 Option Explicit
 10 
 11 '============================================================
 12 '私有全局变量。
 13 '============================================================
 14 Private CURRENT_MODEL
 15 Private TABLES
 16 Private EXCEL_APP
 17 Private FILE_PATH
 18 
 19 Set CURRENT_MODEL = ActiveModel
 20 Set EXCEL_APP = CreateObject("Excel.Application")
 21 FILE_PATH="D:\models.xlsx"    '文件的绝对路径
 22 
 23 
 24 '检查文件是否存在
 25 If CheckFileExsistence() Then
 26    '检查当前是否有已经打开的物理图
 27    If CURRENT_MODEL is Nothing Then
 28       MsgBox("请先打开一个物理数据模型(Physical Data Model),然后再进执行导入!")
 29    Else
 30       Set TABLES = CURRENT_MODEL.Tables
 31       '根据EXCEL表格创建模型
 32       ImportModels()
 33    End If
 34 Else
 35    MsgBox "文件" + FILE_PATH + "不存在!"
 36 End If
 37 
 38 
 39 '============================================================
 40 '检查文件是否存在
 41 '============================================================
 42 Function CheckFileExsistence
 43    Dim fso
 44    Set fso = CreateObject("Scripting.FileSystemObject")
 45    CheckFileExsistence = fso.FileExists(FILE_PATH)
 46 End Function
 47 
 48 
 49 '============================================================
 50 '导入模型
 51 '============================================================
 52 Sub ImportModels
 53    '打开Excel文件
 54    EXCEL_APP.Workbooks.Open FILE_PATH
 55 
 56    Dim worksheets
 57    Dim worksheetCount
 58    Set worksheets = EXCEL_APP.Worksheets
 59    worksheetCount = worksheets.Count
 60    If worksheetCount <= 0 Then
 61       Exit Sub
 62    End If
 63    
 64    Dim index
 65    Dim currentSheet
 66    For index = 1 to worksheetCount
 67       Set currentSheet = worksheets(index)
 68       CreateTable currentSheet
 69    Next
 70    
 71    '关闭Excel文件
 72    EXCEL_APP.Workbooks.Close
 73 End Sub
 74 
 75 
 76 '============================================================
 77 '创建表
 78 '============================================================
 79 Sub CreateTable(worksheet)
 80    Dim cells
 81    Set cells = worksheet.Cells
 82    '检查具有相同名称的表是否已经存在
 83    If TableExists(cells(1, 1).Value) Then
 84       MsgBox "表“" + cells(1, 1).Value + "”已经存在!"
 85       Exit Sub
 86    End If
 87    
 88    Dim table
 89    Set table = TABLES.CreateNew
 90    table.Name = cells(1, 1).Value
 91    table.Code = cells(2, 1).Value
 92    table.Comment = cells(3, 1).Value
 93    
 94    
 95    Dim index
 96    Dim rows
 97    Dim col
 98    Set rows = worksheet.Rows
 99    For index = 4 to 512
100       If EXCEL_APP.WorksheetFunction.CountA(rows(index)) <= 0 Then
101          Exit For
102       End If
103    
104       Set col = table.Columns.CreateNew
105       col.Name = cells(index, 1).Value                  '字段的中文含义
106       col.Code = cells(index, 2).Value                  '字段名
107       col.Unit = cells(index, 4).Value                  '字段的单位
108       col.DataType = cells(index, 3).Value              '字段的数据类型
109       col.Comment = cells(index, 8).Value               '字段的注释
110    Next
111 End Sub
112 
113 
114 '============================================================
115 '检查表是否已经存在
116 '============================================================
117 Function TableExists(tableName)
118 Dim tbl
119 For Each tbl in TABLES
120    If StrComp(tbl.Name, tableName) = 0 Then
121       TableExists = True
122       Exit Function
123    End If
124 Next
125    TableExists = False
126 End Function
View Code

下面是测试脚本使用的Excel文件格式:

前三行的第一个单元格中的值分别是:表名称,数据库表名称,表的说明信息。

第4行到低7行都是列信息。

A到H列依次为:列名,字段名称,数据类型,单位,是否主键,是否外键,是否非空,列注释信息。

 

以下是Excel导入的步骤:

1,在PowerDesigner中先打开一个物理数据模型,然后按Ctrl + Shift + X执行脚本。

   执行完成之后的界面如下:

导入完成之后PhysicalDiagram_1中并没有显示表的符号。

在PowerDesigner的元数据模型API文档中没有找到对应的API所以就这样将就了;D

2,展开上图所示的Tables文件夹。左键点击图标,把表拖到指定的物理图(Physical Diagram)中。

这样就实现了从Excel中导入数据库物理模型。

 

总结:

这个脚本虽然实现了导入功能,但是还不够完善。第二步要手动完成,因为我没有找到相应的API =_=!。

此外,脚本中没有设置相应的主键,外键和非空约束等。

如果哪位知道如何使用脚本实现第二步,请告诉我!谢谢!

 

你可能感兴趣的:(PowerDesigner 16.5 使用VBScript脚本从Excel导入物理数据模型)