PDM文件转换生成excel文件

执行步骤:

1、菜单找到Tools

2、下拉中找到Execute Commands

3、选中Edit/Run Script

4、弹窗里黏贴上上面的代码

5、执行

场景一:

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

'* Powerdesigner 导出Excel格式数据字典 导出Excel格式文件

'* Created:

'* Version: 1.0

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

vbscript 复制代码
Option Explicit  
   Dim rowsNum  
   rowsNum = 2

Dim Model  
Set Model = ActiveModel  
If (Model Is Nothing) Or (Not Model.IsKindOf(PdPDM.cls_Model)) Then  
  Debug.print "null"
Else  
    ' Get the tables collection  
    '创建EXCEL APP  
    dim beginrow  
    DIM EXCEL, SHEET  
    set EXCEL = CREATEOBJECT("Excel.Application")  
    EXCEL.workbooks.add  '添加工作表  
    SET sheet = EXCEL.workbooks(1).sheets(1)  
    sheet.name ="数据字典"

   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.cells(rowsNum, 8) = "默认值"  
     sheet.cells(rowsNum, 9) = "说明"  
     sheet.cells(rowsNum, 10) = "表名称"
     sheet.cells(rowsNum, 11) = "表中文名称"
     sheet.cells(rowsNum, 12) = "表说明"
     sheet.Range(sheet.cells(rowsNum,1),sheet.cells(rowsNum,12)).Interior.Color=rgb(166,166,166)      

   beginrow = rowsNum+1  

   Dim tab  
   For Each tab In Model.tables  
      TableLoop tab,SHEET  
   Next    

    EXCEL.visible = true  
    '设置列宽和自动换行  
    sheet.Columns(1).ColumnWidth  =10
    sheet.Columns(2).ColumnWidth  =15
    sheet.Columns(4).ColumnWidth  =20
    sheet.Columns(5).ColumnWidth  =15
    sheet.Columns(6).ColumnWidth  =15

    sheet.Columns("C:C").EntireColumn.AutoFit
    sheet.Columns("i:i").EntireColumn.AutoFit    
End If  

Sub TableLoop(tab, sheet)  
   If IsObject(tab) Then  
      Dim rangFlag  

      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.code
         sheet.cells(rowsNum, 3) = col.datatype
         sheet.cells(rowsNum, 4) = IIF(col.Length<>0,col.Length,"")
         sheet.cells(rowsNum, 5) = IIF(col.Primary,"√","")
         sheet.cells(rowsNum, 6) = IIF(col.Primary,"√","")
         sheet.cells(rowsNum, 7) = IIF(col.Mandatory,"√","")
         sheet.cells(rowsNum, 8) = "无"
         sheet.cells(rowsNum, 10) = tab.code
         sheet.cells(rowsNum, 11) = tab.name
         sheet.cells(rowsNum, 12) = tab.comment
      next  

      '设置边框  
      DIM RanagBorder
      SET RanagBorder =sheet.Range(sheet.cells(rowsNum-colsNum,1),sheet.cells(rowsNum,12))
      RanagBorder.Borders.LineStyle = "1"
      'RaneBorderFun RanagBorder        


   End If  
End Sub  

function IIF(flg,tstr,fstr)
   if flg then
      IIF= tstr
   else
      IIF= fstr
   end if
End function

场景二:

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

'* Powerdesigner 导出Excel格式数据字典 导出Excel格式文件分包存放

'* Created: 根网科技

'* Version: 1.0

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

vbscript 复制代码
Option Explicit  
   Dim rowsNum  
   rowsNum = 2

Dim Model
Dim  pkg
Set Model = ActiveModel
If (Model Is Nothing) Or (Not Model.IsKindOf(PdPDM.cls_Model)) Then  
  Debug.print "null"
else
      ' Get the tables collection  
    '创建EXCEL APP  
    dim beginrow  ,p
    DIM EXCEL, SHEET  
    set EXCEL = CREATEOBJECT("Excel.Application")  

    EXCEL.workbooks.add  '添加工作表
    For Each pkg In Model.packages  

        'MsgBox pkg.name         

        'MsgBox EXCEL.workbooks(1).Sheets.Count        
        SET sheet = EXCEL.workbooks(1).sheets(1)  
        sheet.name =pkg.name

        'MsgBox sheet.name
        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.cells(rowsNum, 8) = "默认值"  
         sheet.cells(rowsNum, 9) = "说明"  
         sheet.cells(rowsNum, 10) = "表名称"
         sheet.cells(rowsNum, 11) = "表中文名称"
         sheet.cells(rowsNum, 12) = "表说明"
         sheet.Range(sheet.cells(rowsNum,1),sheet.cells(rowsNum,12)).Interior.Color=rgb(166,166,166)      

       beginrow = rowsNum+1  

       Dim tab  
       For Each tab In pkg.tables  
          TableLoop tab,SHEET  
          p=1
          'MsgBox sheet.name
       Next    
       EXCEL.workbooks(1).sheets.add  '添加工作表

    next
            EXCEL.visible = true  
        '设置列宽和自动换行  
        sheet.Columns(1).ColumnWidth  =10
        sheet.Columns(2).ColumnWidth  =15
        sheet.Columns(4).ColumnWidth  =20
        sheet.Columns(5).ColumnWidth  =15
        sheet.Columns(6).ColumnWidth  =15

        sheet.Columns("C:C").EntireColumn.AutoFit
        sheet.Columns("i:i").EntireColumn.AutoFit
end if
Sub TableLoop(tab, sheet)  
   If IsObject(tab) Then  
      Dim rangFlag  

      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.code
         sheet.cells(rowsNum, 3) = col.datatype
         sheet.cells(rowsNum, 4) = IIF(col.Length<>0,col.Length,"")
         sheet.cells(rowsNum, 5) = IIF(col.Primary,"√","")
         sheet.cells(rowsNum, 6) = IIF(col.Primary,"√","")
         sheet.cells(rowsNum, 7) = IIF(col.Mandatory,"√","")
         sheet.cells(rowsNum, 8) = "无"
         sheet.cells(rowsNum, 10) = tab.code
         sheet.cells(rowsNum, 11) = tab.name
         sheet.cells(rowsNum, 12) = tab.comment
      next  

      '设置边框  
      DIM RanagBorder
      SET RanagBorder =sheet.Range(sheet.cells(rowsNum-colsNum,1),sheet.cells(rowsNum,12))
      RanagBorder.Borders.LineStyle = "1"
      'RaneBorderFun RanagBorder        


   End If  
End Sub  

function IIF(flg,tstr,fstr)
   if flg then
      IIF= tstr
   else
      IIF= fstr
   end if
End function
相关推荐
ltl11 小时前
QUIC 握手实现:Initial 到 1-RTT 的最小路径
linux
Android系统攻城狮13 小时前
Linux PipeWire深度解析之pw_init调用流程与实战(八十三)
linux·运维·服务器·音频进阶·pipewire音频进阶
M78佐菲13 小时前
Linux学习笔记:进程
linux·笔记·学习·算法
zbyyd15 小时前
Linux 进程管理详解:从概念到实战
linux·运维·服务器
薛定猫AI15 小时前
OpenAI Codex本地完整配置教程|(Windows/Mac/Linux全平台,修复鉴权报错)
linux·windows·macos
w01_02_0316 小时前
deepseek, harness , windows , 安装。
windows
辻弋20117 小时前
手动关服务会自动重启、组策略家庭版用不了——Windows Update Blocker用“禁用+锁定”双保险,让Win10/11自动更新彻底闭嘴
服务器·人工智能·windows·电脑·开源软件
躺不平的理查德17 小时前
OpenSSL 的异步 TLS 1.3 加密
linux·运维·服务器
tedcloud12317 小时前
Awesome DSH Plugin 怎么用?给 DeepSeek Harness 搭建自己的插件生态
大数据·linux·服务器·人工智能·音视频