PowerDesigner 数据库设计导出到Excel

在PowerDesigner 中 ctrl+shift+x 弹出执行脚本界面,输入如下代码就会生成 Excel

生成效果如下

 

代码:

'****************************************************************************** 
'* File:     pdm2excel.txt 
'* Title:    pdm export to excel 
'* Purpose:  To export the tables and columns to Excel 
'* Model:    Physical Data Model 
'* Objects:  Table, Column, View 
'* Author:   Linsheng 
'* Created:  2019-02-22
'* Version:  1.0 
'****************************************************************************** 
Option Explicit 
   Dim rowsNum 
   rowsNum = 0 
'----------------------------------------------------------------------------- 
' Main function 
'----------------------------------------------------------------------------- 
' Get the current active model 
Dim Model 
Set Model = ActiveModel 
If (Model Is Nothing) Or (Not Model.IsKindOf(PdPDM.cls_Model)) Then 
  MsgBox "The current model is not an PDM model." 
Else 
 ' Get the tables collection 
 '创建EXCEL APP 
 
Dim beginrow
 Dim EXCEL, BOOK, SHEET
 Set EXCEL = CreateObject("Excel.Application")
 EXCEL.Visible = True
 Set BOOK = EXCEL.Workbooks.Add(-4167) '新建工作簿
 
 BOOK.Sheets(1).Name = "数据库表目录"
 Set SHEET = EXCEL.workbooks(1).sheets("数据库表目录")
  
 '设置列宽和自动换行
 SHEET.Columns(1).ColumnWidth = 10   
 SHEET.Columns(2).ColumnWidth = 30   
 SHEET.Columns(3).ColumnWidth = 30   
 SHEET.Columns(4).ColumnWidth = 30   
 SHEET.Columns(1).RowHeight = 20 
 SHEET.Columns(1).WrapText =true 
 SHEET.Columns(2).WrapText =true 
 SHEET.Columns(3).WrapText =true 
 SHEET.Columns(4).WrapText =true 

 ShowProperties Model, SHEET
 EXCEL.visible = true 
 
End If
 
'----------------------------------------------------------------------------- 
' Show properties of tables 
'----------------------------------------------------------------------------- 
Sub ShowProperties(mdl, sheet) 
   ' Show tables of the current model/package 
   rowsNum=0 
   beginrow = rowsNum+1 
   ' For each table 
   output "begin" 
   Dim tab 
   For Each tab In mdl.tables 
      ShowTable tab,sheet 
   Next 
   if mdl.tables.count > 0 then 
        sheet.Range("A" & beginrow + 1 & ":A" & rowsNum).Rows.Group 
   end if 
   output "end" 
End Sub
 
'----------------------------------------------------------------------------- 
' 数据表查询 
'-----------------------------------------------------------------------------
Sub ShowTable(tab, sheet)   
   If IsObject(tab) Then 
     Dim rangFlag
      sheet.cells(1, 1) = "序号" 
      sheet.cells(1, 2) = "表名"
      sheet.cells(1, 3) = "英文名"
      sheet.cells(1, 4) = "描述"
	  
      '设置边框 
      sheet.Range(sheet.cells(1, 1),sheet.cells(1, 4)).Borders.LineStyle = "1"
 
      rowsNum = rowsNum + 1
      sheet.cells(rowsNum+1, 1) = rowsNum 
      sheet.cells(rowsNum+1, 2) = tab.name
      sheet.cells(rowsNum+1, 3) = tab.code
      sheet.cells(rowsNum+1, 4) = tab.comment
      '设置边框
      sheet.Range(sheet.cells(rowsNum+1,1),sheet.cells(rowsNum+1,4)).Borders.LineStyle = "1"
	  
	  '增加Sheet
      BOOK.Sheets.Add , BOOK.Sheets(BOOK.Sheets.count)
      BOOK.Sheets(rowsNum+1).Name = tab.code 
	  
	  '设置连接
	  sheet.Hyperlinks.Add sheet.cells(rowsNum+1, 2), "",tab.code&"!A1"
 
      Dim shtn
      Set shtn = EXCEL.workbooks(1).sheets(tab.code)
      '设置列宽和换行
       shtn.Columns(1).ColumnWidth = 12   
       shtn.Columns(2).ColumnWidth = 18   
       shtn.Columns(3).ColumnWidth = 12
       shtn.Columns(4).ColumnWidth = 8
       shtn.Columns(5).ColumnWidth = 8  
       shtn.Columns(6).ColumnWidth = 30   
       shtn.Columns(1).RowHeight = 20
 
       '设置列标题
       shtn.cells(1, 1) = "回目录" 
       shtn.cells(2, 1) = tab.name&" :"&tab.code
       shtn.cells(3, 1) = "名称"
       shtn.cells(3, 2) = "字段"
       shtn.cells(3, 3) = "类型"
       shtn.cells(3, 4) = "长度"
       shtn.cells(3, 5) = "空"
       shtn.cells(3, 6) = "备注"
       '设置边框 
       shtn.Range(shtn.cells(3, 1),shtn.cells(3, 6)).Borders.LineStyle = "1"
	   '设置连接
	   shtn.Hyperlinks.Add shtn.cells(1, 1), "","数据库表目录!B"&rowsNum+1
	   shtn.Range(shtn.Cells(2, 1), shtn.Cells(2, 6)).Merge()
      Dim col ' running column 
      Dim colsNum
      Dim rNum 
      colsNum = 0
      rNum = 2 
	for each col in tab.columns 
	  rNum = rNum + 1 
	  colsNum = colsNum + 1 

	shtn.cells(rNum+1, 1) = col.name 
	shtn.cells(rNum+1, 2) = col.code 
	shtn.cells(rNum+1, 3) = col.datatype 
	shtn.cells(rNum+1, 4) = col.length 
	If col.Mandatory = true Then
		shtn.cells(rNum+1, 5) = "否" 
	Else
		shtn.cells(rNum+1, 5) = " " 
	End If
	shtn.cells(rNum+1, 6) = col.comment 
	next 
	shtn.Range(shtn.cells(rNum-colsNum+2,1),shtn.cells(rNum+1,6)).Borders.LineStyle = "1"         
	rNum = rNum + 1 

	Output "FullDescription: "       + tab.Name
 
   End If   
End Sub

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lsbd1993/article/details/87880303

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值