PowerDesigner uses VBScript to export table structure to Excel

Posted by sy-co on Thu, 13 Feb 2020 21:17:02 +0100

The previous article introduced how to import the table structure written by Excel into PowerDesigner (see the link: PowerDesigner import table structure from Excel )In the actual work, it is often that the two transform into each other.

Here is the export script corresponding to the agreed Excel format in that article:

'******************************************************************************
'* 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
 'Establish EXCEL APP
 dim beginrow
 DIM EXCEL, SHEET
 set EXCEL = CREATEOBJECT("Excel.Application")
 EXCEL.workbooks.add(-4167)'Add sheet
 EXCEL.workbooks(1).sheets(1).name ="test"
 set sheet = EXCEL.workbooks(1).sheets("test")
 
 ShowProperties Model, SHEET
 EXCEL.visible = true
 'Set column width and wrap
 sheet.Columns(1).ColumnWidth = 40 
 sheet.Columns(2).ColumnWidth = 30 
 sheet.Columns(4).ColumnWidth = 30 
 sheet.Columns(5).ColumnWidth = 30 
 sheet.Columns(6).ColumnWidth = 20 
 sheet.Columns(7).ColumnWidth = 40 
 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
      sheet.cells(rowsNum, 1) = tab.name
      sheet.cells(rowsNum, 2) = tab.code
	  sheet.Range(sheet.cells(rowsNum-colsNum+1,1),sheet.cells(rowsNum,2)).Borders.LineStyle = "1"
	  sheet.Range(sheet.cells(rowsNum,1),sheet.cells(rowsNum,2)).Font.Size=20

	  
	  rowsNum = rowsNum + 1
      sheet.cells(rowsNum, 1) = "Field meaning"
      sheet.cells(rowsNum, 2) = "Field name"
      sheet.cells(rowsNum, 3) = "Field type"
      sheet.cells(rowsNum, 4) = "Is the primary key?"
      sheet.cells(rowsNum, 5) = "Default value"
      sheet.cells(rowsNum, 6) = "Is it available?"
	  sheet.cells(rowsNum, 7) = "Notes"
	  sheet.Range(sheet.cells(rowsNum-colsNum+1,1),sheet.cells(rowsNum,7)).Borders.LineStyle = "1"
	  sheet.Range(sheet.cells(rowsNum,1),sheet.cells(rowsNum,7)).Font.Size=14


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) = ""
      sheet.cells(rowsNum, 4) = ""
      sheet.cells(rowsNum, 5) = ""
      sheet.cells(rowsNum, 6) = ""
	  sheet.cells(rowsNum, 7) = col.name
      next
      sheet.Range(sheet.cells(rowsNum-colsNum+1,1),sheet.cells(rowsNum,7)).Borders.LineStyle = "2"      
 
      Output "FullDescription: "       + tab.Name
   End If
End Sub

Just call up the command window with Crtl+Shift+X, and execute this script to export the table structure of PowerDesigner to an Excel file of the agreed format.

The exported Excel looks like this:


Topics: Excel