pdm转excel(基于PowerDesigner软件)

一、下载安装PowerDesigner

二、PowerDesigner中导入pdm文件

三、双击打开

四、打开运行窗口Run

五、Run代码

六、完啦,没有啦!还看个锤子

 

 

七、运行代码!

代码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, SHEET, SHEETLIST

      set EXCEL = CREATEOBJECT("Excel.Application")

      EXCEL.workbooks.add(-4167)'添加工作表

      EXCEL.workbooks(1).sheets(1).name ="表结构"

      set SHEET = EXCEL.workbooks(1).sheets("表结构")

       

      EXCEL.workbooks(1).sheets.add

      EXCEL.workbooks(1).sheets(1).name ="目录"

      set SHEETLIST = EXCEL.workbooks(1).sheets("目录")

      ShowTableList Model,SHEETLIST

 

      ShowProperties Model, SHEET,SHEETLIST

       

       

      EXCEL.workbooks(1).Sheets(2).Select

      EXCEL.visible = true

      '设置列宽和自动换行

      sheet.Columns(1).ColumnWidth = 20 

      sheet.Columns(2).ColumnWidth = 20 

      sheet.Columns(3).ColumnWidth = 20 

      sheet.Columns(4).ColumnWidth = 40 

      sheet.Columns(5).ColumnWidth = 10 

      sheet.Columns(6).ColumnWidth = 10 

      sheet.Columns(1).WrapText =true

      sheet.Columns(2).WrapText =true

      sheet.Columns(4).WrapText =true

      '不显示网格线

      EXCEL.ActiveWindow.DisplayGridlines = False

       

       

 End If

'-----------------------------------------------------------------------------

' Show properties of tables

'-----------------------------------------------------------------------------

Sub ShowProperties(mdl, sheet,SheetList)

   ' Show tables of the current model/package

   rowsNum=0

   beginrow = rowsNum+1

   Dim rowIndex 

   rowIndex=3

   ' For each table

   output "begin"

   Dim tab

   For Each tab In mdl.tables

      ShowTable tab,sheet,rowIndex,sheetList

      rowIndex = rowIndex +1

   Next

   if mdl.tables.count > 0 then

        sheet.Range("A" & beginrow + 1 & ":A" & rowsNum).Rows.Group

   end if

   output "end"

End Sub

'-----------------------------------------------------------------------------

' Show table properties

'-----------------------------------------------------------------------------

Sub ShowTable(tab, sheet,rowIndex,sheetList)

   If IsObject(tab) Then

     Dim rangFlag

     rowsNum = rowsNum + 1

      ' Show properties

      Output "================================"

      sheet.cells(rowsNum, 1) =tab.name

      sheet.cells(rowsNum, 1).HorizontalAlignment=3

      sheet.cells(rowsNum, 2) = tab.code

      'sheet.cells(rowsNum, 5).HorizontalAlignment=3

      'sheet.cells(rowsNum, 6) = ""

      'sheet.cells(rowsNum, 7) = "表说明"

      sheet.cells(rowsNum, 3) = tab.comment

      'sheet.cells(rowsNum, 8).HorizontalAlignment=3

      sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 7)).Merge

      '设置超链接,从目录点击表名去查看表结构

      '字段中文名    字段英文名    字段类型    注释    是否主键    是否非空    默认值

      sheetList.Hyperlinks.Add sheetList.cells(rowIndex,2), "","表结构"&"!B"&rowsNum

      rowsNum = rowsNum + 1

      sheet.cells(rowsNum, 1) = "字段中文名"

      sheet.cells(rowsNum, 2) = "字段英文名"

      sheet.cells(rowsNum, 3) = "字段类型"

      sheet.cells(rowsNum, 4) = "注释"

      sheet.cells(rowsNum, 5) = "是否主键"

      sheet.cells(rowsNum, 6) = "是否非空"

      sheet.cells(rowsNum, 7) = "默认值"

      '设置边框

      sheet.Range(sheet.cells(rowsNum-1, 1),sheet.cells(rowsNum, 7)).Borders.LineStyle = "1"

      'sheet.Range(sheet.cells(rowsNum-1, 4),sheet.cells(rowsNum, 9)).Borders.LineStyle = "1"

      '字体为10号

      sheet.Range(sheet.cells(rowsNum-1, 1),sheet.cells(rowsNum, 7)).Font.Size=10

            Dim col ' running column

            Dim colsNum

            colsNum = 0

      for each col in tab.columns

        rowsNum = rowsNum + 1

        colsNum = colsNum + 1

          sheet.cells(rowsNum, 1) = col.name

        'sheet.cells(rowsNum, 3) = ""

          'sheet.cells(rowsNum, 4) = col.name

          sheet.cells(rowsNum, 2) = col.code

          sheet.cells(rowsNum, 3) = col.datatype

        sheet.cells(rowsNum, 4) = col.comment

          If col.Primary = true Then

        sheet.cells(rowsNum, 5) = "Y" 

        Else

        sheet.cells(rowsNum, 5) = " " 

        End If

        If col.Mandatory = true Then

        sheet.cells(rowsNum, 6) = "Y" 

        Else

        sheet.cells(rowsNum, 6) = " " 

        End If

        sheet.cells(rowsNum, 7) =  col.defaultvalue

      next

      sheet.Range(sheet.cells(rowsNum-colsNum+1,1),sheet.cells(rowsNum,7)).Borders.LineStyle = "3"       

      'sheet.Range(sheet.cells(rowsNum-colsNum+1,4),sheet.cells(rowsNum,9)).Borders.LineStyle = "3"

      sheet.Range(sheet.cells(rowsNum-colsNum+1,1),sheet.cells(rowsNum,7)).Font.Size = 10

      rowsNum = rowsNum + 2

       

      Output "FullDescription: "       + tab.Name

   End If

    

End Sub

'-----------------------------------------------------------------------------

' Show List Of Table

'-----------------------------------------------------------------------------

Sub ShowTableList(mdl, SheetList)

   ' Show tables of the current model/package

   Dim rowsNo

   rowsNo=1

   ' For each table

   output "begin"

   SheetList.cells(rowsNo, 1) = "主题"

   SheetList.cells(rowsNo, 2) = "表中文名"

   SheetList.cells(rowsNo, 3) = "表英文名"

   SheetList.cells(rowsNo, 4) = "表说明"

   rowsNo = rowsNo + 1

   SheetList.cells(rowsNo, 1) = mdl.name

   Dim tab

   For Each tab In mdl.tables

     If IsObject(tab) Then

         rowsNo = rowsNo + 1

      SheetList.cells(rowsNo, 1) = ""

      SheetList.cells(rowsNo, 2) = tab.name

      SheetList.cells(rowsNo, 3) = tab.code

      SheetList.cells(rowsNo, 4) = tab.comment

     End If

   Next

    SheetList.Columns(1).ColumnWidth = 20 

      SheetList.Columns(2).ColumnWidth = 20 

      SheetList.Columns(3).ColumnWidth = 30 

     SheetList.Columns(4).ColumnWidth = 60 

   output "end"

End Sub

代码1(普通版):

'******************************************************************************

'* 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:   ziyan

'* Created:  2012-05-03

'* 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, SHEET

 set EXCEL = CREATEOBJECT("Excel.Application")

 EXCEL.workbooks.add(-4167)'添加工作表

 EXCEL.workbooks(1).sheets(1).name ="test"

 set sheet = EXCEL.workbooks(1).sheets("test")

 

 ShowProperties Model, SHEET

 EXCEL.visible = true

 '设置列宽和自动换行

 sheet.Columns(1).ColumnWidth = 20 

 sheet.Columns(2).ColumnWidth = 40 

 sheet.Columns(4).ColumnWidth = 20 

 sheet.Columns(5).ColumnWidth = 20 

 sheet.Columns(6).ColumnWidth = 15 

 sheet.Columns(1).WrapText =true

 sheet.Columns(2).WrapText =true

 sheet.Columns(4).WrapText =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

'-----------------------------------------------------------------------------

' Show table properties

'-----------------------------------------------------------------------------

Sub ShowTable(tab, sheet)

   If IsObject(tab) Then

     Dim rangFlag

     rowsNum = rowsNum + 1

      ' Show properties

      Output "================================"

      sheet.cells(rowsNum, 1) = "实体名"

      sheet.cells(rowsNum, 2) =tab.name

      sheet.cells(rowsNum, 3) = ""

      sheet.cells(rowsNum, 4) = "表名"

      sheet.cells(rowsNum, 5) = tab.code

      sheet.Range(sheet.cells(rowsNum, 5),sheet.cells(rowsNum, 6)).Merge

      rowsNum = rowsNum + 1

      sheet.cells(rowsNum, 1) = "属性名"

      sheet.cells(rowsNum, 2) = "说明"

      sheet.cells(rowsNum, 3) = ""

      sheet.cells(rowsNum, 4) = "字段中文名"

      sheet.cells(rowsNum, 5) = "字段名"

      sheet.cells(rowsNum, 6) = "字段类型"

      '设置边框

      sheet.Range(sheet.cells(rowsNum-1, 1),sheet.cells(rowsNum, 2)).Borders.LineStyle = "1"

      sheet.Range(sheet.cells(rowsNum-1, 4),sheet.cells(rowsNum, 6)).Borders.LineStyle = "1"

Dim col ' running column

Dim colsNum

colsNum = 0

      for each col in tab.columns

        rowsNum = rowsNum + 1

        colsNum = colsNum + 1

      sheet.cells(rowsNum, 1) = col.name

      sheet.cells(rowsNum, 2) = col.comment

        sheet.cells(rowsNum, 3) = ""

      sheet.cells(rowsNum, 4) = col.name

      sheet.cells(rowsNum, 5) = col.code

      sheet.cells(rowsNum, 6) = col.datatype

      next

      sheet.Range(sheet.cells(rowsNum-colsNum+1,1),sheet.cells(rowsNum,2)).Borders.LineStyle = "2"       

      sheet.Range(sheet.cells(rowsNum-colsNum+1,4),sheet.cells(rowsNum,6)).Borders.LineStyle = "2"

      rowsNum = rowsNum + 1

      

      Output "FullDescription: "       + tab.Name

   End If

End Sub

展示: 

代码2(彩色版):带目录结构哦

 
Option Explicit
 
Dim mdl 
Set mdl = ActiveModel
If (mdl Is Nothing) Then
   MsgBox "There is no Active Model"
End If
Dim EXCEL, SheetList
Set EXCEL = CreateObject("Excel.Application") 
EXCEL.Visible = True 
EXCEL.Workbooks.Add
 
Dim tab 
Dim sheet  
For Each tab In mdl.tables
        EXCEL.workbooks(1).sheets.add
        EXCEL.workbooks(1).sheets(1).name = tab.code
        set sheet = EXCEL.workbooks(1).sheets(tab.code)
        EXCEL.visible = true
        sheet.Columns(1).ColumnWidth = 25
        sheet.Columns(2).ColumnWidth = 20
        sheet.Columns(3).ColumnWidth = 15
        sheet.Columns(4).ColumnWidth = 7
        sheet.Columns(5).ColumnWidth = 7
        sheet.Columns(6).ColumnWidth = 10
        sheet.Columns(7).ColumnWidth = 60
        sheet.Columns(1).WrapText =true
        sheet.Columns(2).WrapText =true
        sheet.Columns(4).WrapText =true
        EXCEL.ActiveWindow.DisplayGridlines = False
        
Next
    EXCEL.workbooks(1).sheets.add
    EXCEL.workbooks(1).sheets(1).name ="目录"
    set SheetList = EXCEL.workbooks(1).sheets("目录")
    ShowTableList mdl, SheetList
    CreateTab mdl, SheetList
 
 
Sub CreateTab(mdl, SheetList)
    Dim rowsNum, tablecode, tablname
    rowsNum = 0
    For Each tab In mdl.tables
        rowsNum = 1
        set SHEET = EXCEL.workbooks(1).sheets(tab.code)
            sheet.cells(rowsNum, 1) = "表中文名"
        tablecode = tab.code
        tablname = tab.name
        tablname = replace(tablname, tablecode, "")
        sheet.cells(rowsNum, 2) = tablname
        sheet.cells(rowsNum, 3) = "表英文名"
        sheet.cells(rowsNum, 4) = tab.code
        sheet.Range(sheet.cells(rowsNum, 4),sheet.cells(rowsNum, 6)).Merge
        sheet.cells(rowsNum, 7) = "返回目录"
        sheet.Hyperlinks.Add sheet.cells(rowsNum,7), "","目录"&"!B"&rowsNum
        rowsNum = rowsNum + 1
        sheet.cells(rowsNum, 1) = "表中文说明"
        sheet.cells(rowsNum, 2) = tab.name
        sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 7)).Merge
        rowsNum = rowsNum + 1
        sheet.cells(rowsNum, 1) = "字段名"
        sheet.cells(rowsNum, 2) = "字段中文名"
        sheet.cells(rowsNum, 3) = "数据类型"
        sheet.cells(rowsNum, 4) = "空值"
        sheet.cells(rowsNum, 5) = "默认值"
        sheet.cells(rowsNum, 6) = "下拉菜单"
        sheet.cells(rowsNum, 7) = "字段说明"
        addTabsCol sheet, tab, rowsNum
        addTabsidx sheet, tab, rowsNum
        addTabPK sheet, tab, rowsNum
        
        sheet.Range(sheet.cells(1, 1),sheet.cells(rowsNum, 7)).Borders.LineStyle = "1"
        sheet.Range(sheet.cells(1, 1),sheet.cells(rowsNum, 7)).Font.Size=10
        sheet.Range(sheet.cells(1, 1),sheet.cells(rowsNum, 7)).Font.Name="微软雅黑"
        sheet.Range(sheet.cells(1, 1),sheet.cells(3, 7)).Interior.colorindex = "3"
        sheet.Range(sheet.cells(1, 1),sheet.cells(rowsNum, 7)).RowHeight = "21"
        sheet.Range(sheet.cells(1, 1),sheet.cells(3, 7)).Font.Bold = True
        sheet.Range(sheet.cells(3, 7),sheet.cells(rowsNum, 7)) = " "
    Next
    
    
End Sub
 
Sub addTabsCol(sheet, tab, rowsNum)
    Dim col 
    Dim colsNum
    colsNum = 0
        for each col in tab.columns
            rowsNum = rowsNum + 1
            colsNum = colsNum + 1
                sheet.cells(rowsNum, 1) = col.code
                sheet.cells(rowsNum, 2) = col.name
                sheet.cells(rowsNum, 3) = col.datatype
            If col.Mandatory = true Then
                sheet.cells(rowsNum, 4) = "非空" 
            Else
                sheet.cells(rowsNum, 4) = " " 
            End If
                sheet.cells(rowsNum, 5) = col.DefaultValue
                sheet.cells(rowsNum, 7) =  col.comment
        Next 
End Sub    
 
Sub addTabsidx(sheet, tab, rowsNum)
    rowsNum = rowsNum + 1
    sheet.cells(rowsNum, 1) = "索引名"
    sheet.cells(rowsNum, 2) = "索引类型"
    sheet.cells(rowsNum, 3) = "索引列表"
    sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 7)).Merge
    sheet.Range(sheet.cells(rowsNum, 1),sheet.cells(rowsNum, 7)).Font.Bold = True
    Dim index 
    Dim idxNm
    Dim indexstrlst  
    idxNm = 0
    for each index in tab.indexes
        rowsNum = rowsNum + 1
        idxNm = idxNm + 1
        sheet.cells(rowsNum, 1) = index.code
        if index.unique = "1" Then
            sheet.cells(rowsNum, 2) = "UNIQUE"
        Else
            sheet.cells(rowsNum, 2) = "NORM"
        End If
 
        Dim keystr
        Dim indexcol
        keystr = ""
        for each indexcol in index.IndexColumns
            keystr = keystr +","+ indexcol.code
        next
        keystr = mid(keystr, 2, len(keystr))
        sheet.cells(rowsNum, 3) = keystr
        sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 7)).Merge
      next
End Sub 
 
Sub addTabPK(sheet, tab, rowsNum)
    
    Dim key
    Dim keyNm
    Dim keystr
    Dim flag
    Dim keycode
    Dim keycol
    rowsNum = rowsNum + 1
    sheet.cells(rowsNum, 1) = "主键"
    sheet.cells(rowsNum, 2) = "索引类型"
    sheet.cells(rowsNum, 3) = "主键列表"
    sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 7)).Merge
    sheet.Range(sheet.cells(rowsNum, 1),sheet.cells(rowsNum, 7)).Font.Bold = True 
    for each key in tab.keys
        keycode = key.code
        if key.Primary = true Then
            flag = 1
            keystr = ""
            for each keycol in key.columns
                keystr = keystr +","+ keycol.code
            next
            keystr = mid(keystr, 2, len(keystr))
        End If
        next
        if flag = 1 Then
            rowsNum = rowsNum + 1
            keyNm = 1
            'sheet.cells(rowsNum, 1) = keycode
            sheet.cells(rowsNum, 1) = "PK_"+tab.code
            sheet.cells(rowsNum, 2) = "UNIQUE"
            sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 7)).Merge
            sheet.cells(rowsNum, 3) = keystr
        End If
End Sub 
 
Sub ShowTableList(mdl, SheetList)
    Dim rowsNum
    rowsNum=1
    SheetList.cells(rowsNum, 1) = "主题"
    SheetList.cells(rowsNum, 2) = "表中文名"
    SheetList.cells(rowsNum, 3) = "表英文名"
    SheetList.cells(rowsNum, 4) = "表说明"
    SheetList.Columns(1).ColumnWidth = 20 
    SheetList.Columns(2).ColumnWidth = 30 
    SheetList.Columns(3).ColumnWidth = 35 
    SheetList.Columns(4).ColumnWidth = 70 
    rowsNum = rowsNum + 1
    SheetList.cells(rowsNum, 1) = mdl.name
    
    Dim tab
    For Each tab In mdl.tables
        If IsObject(tab) Then
            rowsNum = rowsNum + 1
            SheetList.cells(rowsNum, 1) = ""
            SheetList.cells(rowsNum, 2) = replace(tab.name, tab.code, "")
            SheetList.cells(rowsNum, 3) = tab.code
            SheetList.cells(rowsNum, 4) = tab.comment
            sheetList.Hyperlinks.Add sheetList.cells(rowsNum,3), "",tab.code&"!B1"
            sheetList.Hyperlinks.Add sheetList.cells(rowsNum,2), "",tab.code&"!B1"
 
        End If
    Next
    SheetList.Range(SheetList.cells(1, 1),SheetList.cells(rowsNum, 4)).Borders.LineStyle = "1"
    SheetList.Range(SheetList.cells(1, 1),SheetList.cells(rowsNum, 4)).Font.Size=10
    SheetList.Range(SheetList.cells(1, 1),SheetList.cells(rowsNum, 4)).Font.Name="微软雅黑"
    SheetList.Range(SheetList.cells(1, 1),SheetList.cells(1, 4)).Interior.colorindex = "3"
    SheetList.Range(SheetList.cells(1, 1),SheetList.cells(rowsNum, 4)).RowHeight = "20"
    SheetList.Range(SheetList.cells(1, 1),SheetList.cells(1, 4)).Font.Bold = True
    SheetList.Range(SheetList.cells(2, 1),SheetList.cells(rowsNum, 3)).Font.Bold = True
    SheetList.Range(SheetList.cells(1, 5),SheetList.cells(rowsNum, 5)) = " "
    EXCEL.ActiveWindow.DisplayGridlines = False
 
End Sub

展示:

注:参考链接    https://www.php.cn/mysql-tutorials-380113.html       

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值