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
相关推荐
AOwhisky30 分钟前
Linux 文本处理三剑客:awk、grep、sed 完全指南
linux·运维·服务器·网络·云计算·运维开发
Gavin_9151 小时前
从零开始部署经典开源项目管理系统最新版redmine6-Linux Debian12
linux·ruby on rails·开源·debian·ruby·redmine
花小璇学linux1 小时前
imx6ull-驱动开发篇31——Linux异步通知
linux·驱动开发·嵌入式软件
shelutai1 小时前
ubuntu 编译ffmpeg6.1 增加drawtext,libx264,libx265等
linux·ubuntu·ffmpeg
runfarther2 小时前
搭建LLaMA-Factory环境
linux·运维·服务器·python·自然语言处理·ai编程·llama-factory
hello_ world.2 小时前
RHCA10NUMA
linux
神秘人X7073 小时前
Linux高效备份:rsync + inotify实时同步
linux·服务器·rsync
轻松Ai享生活3 小时前
一步步学习Linux initrd/initramfs
linux
轻松Ai享生活3 小时前
一步步深入学习Linux Process Scheduling
linux
绵绵细雨中的乡音4 小时前
网络基础知识
linux·网络