|
|
|
|
|
'******************************************************************************
|
|
|
'* File: excel2pdm.vbs
|
|
|
'* Purpose: 将在excel中设计的表导入到pdm文件
|
|
|
'* Category:
|
|
|
'* Version: 1.0
|
|
|
'* time : 2014-6-11
|
|
|
'* 因为喜欢在excel中做数据库表设计,所以用该程序导入到pdm。
|
|
|
'* 该程序对联合主键联合唯一没有做很好的处理,需要导入后手工修改。
|
|
|
'*该程序参考了网络上其他人的代码,但是这里是可以将sheet中所有的表一次导入。
|
|
|
'*
|
|
|
'* 所有的表设计都放在一个excel的一个sheet中,每个表中间空一行,表体都有表头说明如下,
|
|
|
'* 再前面一行是表名和表的说明,分别在A和C列。下面格式直接拷贝到excel中就可以看到,空格是制表符。
|
|
|
'******************************************************************************
|
|
|
' Excel 格式如下
|
|
|
'icontract_master_t 文件头表
|
|
|
'列名 类型 键 非空 注释
|
|
|
'contract_m_id NUMBER 主键 N 主键
|
|
|
'******************************************************************************
|
|
|
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 "E:\Run\mWTAI\Bin\Doc\iWTAI_DataStructure.xlsx"
|
|
|
x1.Workbooks(1).Worksheets("Table").Activate '指定要打开的sheet名称
|
|
|
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 abc
|
|
|
|
|
|
on error Resume Next
|
|
|
'--------------------------------
|
|
|
'下面是读取excel,添加表实体属性
|
|
|
'--------------------------------
|
|
|
For rwIndex = 2 To 457 '指定要遍历的Excel行标 由于第2行是表头,从第1行开始,看你这个表设计多少行
|
|
|
With x1.Workbooks(1).Worksheets("Table")'需要循环的sheet名称
|
|
|
If .Cells(rwIndex,1).Value <> "" And .Cells(rwIndex,3).Value <> "" And .Cells(rwIndex,4).Value = "Table" Then
|
|
|
set table = mdl.Tables.CreateNew '创建一个表实体
|
|
|
table.Code = .Cells(rwIndex,3).Value'从excel中取得表名称和编码
|
|
|
table.Name = .Cells(rwIndex,1).Value'
|
|
|
table.Comment = .Cells(rwIndex,1).Value '指定列说明
|
|
|
count = count + 1
|
|
|
|
|
|
'MsgBox .Cells(rwIndex,1).Value + .Cells(rwIndex,3).Value + .Cells(rwIndex,4).Value, vbOK + vbInformation, "表"
|
|
|
|
|
|
|
|
|
Continue
|
|
|
End If
|
|
|
|
|
|
If .Cells(rwIndex,2).Value = "" Or .Cells(rwIndex,3).Value = "" Or (.Cells(rwIndex,1).Value = "序号" And .Cells(rwIndex,2).Value = "列名")Then
|
|
|
|
|
|
continue
|
|
|
Else
|
|
|
set col =table.Columns.CreateNew '创建一列/字段
|
|
|
col.Name = .Cells(rwIndex, 2).Value '指定列name
|
|
|
col.Code = .Cells(rwIndex, 3).Value '指定列code
|
|
|
col.DataType = .Cells(rwIndex, 4).Value '指定列数据类型
|
|
|
If.Cells(rwIndex, 5).Value <> "" Then'指定主键
|
|
|
col.Primary =true
|
|
|
End If
|
|
|
If.Cells(rwIndex, 8).Value = "Y" Then'指定列是否可空 true 为不可空
|
|
|
|
|
|
col.Mandatory =true
|
|
|
End If
|
|
|
col.Comment = .Cells(rwIndex, 2).Value '指定列说明
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'col.Length =.Cells(rwIndex, 4).Value '指定字段长度
|
|
|
|
|
|
'col.Precision =.Cells(rwIndex, 5).Value '指定字段长度
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
End If
|
|
|
|
|
|
End With
|
|
|
Next
|
|
|
|
|
|
MsgBox "生成数据表结构共计 " + CStr(count), vbOK + vbInformation, "表"
|
|
|
|
|
|
Exit Sub
|
|
|
End sub
|