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
    

      说明:

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

  • 相关阅读:
    golang学习笔记 ---接口
    golang学习笔记 --类与方法
    golang学习笔记--面向对象编程
    golang学习笔记---错误处理
    golang学习笔记---defer[延迟函数]
    golang学习笔记--闭包
    golang学习笔记---函数
    SSD技术扫盲之:什么是NVMe? NVMe SSD有什么特点?
    云原生存储系列文章:云原生应用的基石
    发财树的养殖方法
  • 原文地址:https://www.cnblogs.com/xianhan/p/7364324.html
Copyright © 2011-2022 走看看