Ces quelques lignes de code en Visual Basic Script permettent d’exporter dans un chiffrier Excel les métadonnées sur les tables, colonnes d’un modèle physique (MPD).
Compatible avec PowerDesigner/PowerAMC 16.5
'******************************************************************************
'* Nom du fichier : PDM_TO_EXCEL.vbs
'* Définition : Export des métadonnées du modèle PDM vers Excel
'* Modèle: Modèle de données physique (PDM)
'* Objets: Table, Colonne
'* Auteur: Benoît Le Nabec
'* URL : http://www.Powerd911.guru
'* Créé: 2015-01-01
'* Version: 1.0
'******************************************************************************
Option Explicit
Dim rowsNum
rowsNum = 0
'------------------------------------------------- ----------------------------
'Programme principal
'------------------------------------------------- ----------------------------
Dim Model
Set Model = ActiveModel
If (Model Is Nothing) Or (Not Model.IsKindOf (PdPDM.cls_Model)) Then
MsgBox "Le modèle actif n'est pas un modèle physique"
Else
'Création d'un chiffrier EXCEL
dim beginrow
DIM EXCEL, SHEET, SHEETLIST
set EXCEL = CREATEOBJECT ("Excel.Application")
EXCEL.workbooks.add (-4167) 'Ajout d'une feuille de calcul
EXCEL.workbooks(1).sheets(1).name = "Structure des tables"
set SHEET = EXCEL.workbooks(1).sheets ("Structure des tables")
EXCEL.workbooks(1).sheets.add
EXCEL.workbooks(1).sheets(1).name = "Liste des tables"
set SHEETLIST = EXCEL.workbooks(1).sheets ("Liste des tables")
Affiche_Liste_Tables Model, SHEETLIST
Affiche_Proprietes Model, SHEET, SHEETLIST
EXCEL.workbooks(1).Sheets(2).Select
EXCEL.visible = true
sheetlist.Columns (1).ColumnWidth = 30
'Assigne la largeur des colonne et le renvoi automatique à la ligne
sheet.Columns (1).ColumnWidth = 20
sheet.Columns (2).ColumnWidth = 40
sheet.Columns (3).ColumnWidth = 20
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
'Ne pas afficher la grille
EXCEL.ActiveWindow.DisplayGridlines = False
End If
'------------------------------------------------- ----------------------------
'Affiche les propriétés des tables
'------------------------------------------------- ----------------------------
Sub Affiche_Proprietes (mdl, sheet, SheetList)
'Affiche les tables du modèle courant / package
Dim tab
Dim rowIndex
rowIndex = 3
rowsNum = 0
beginrow = rowsNum + 1
'Boucle pour chaque table
For Each tab In mdl.tables
Affiche_Table 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
End Sub
'------------------------------------------------- ----------------------------
'Affiche les propriétés de la table
'------------------------------------------------- ----------------------------
Sub Affiche_Table (tab, sheet, rowIndex, sheetList)
If IsObject (tab) Then
Dim rangFlag
rowsNum = rowsNum + 1
'Affiche les propriétés
Output "================================"
sheet.cells (rowsNum, 1) = "Nom de la table"
sheet.cells (rowsNum, 2) = tab.name
sheet.cells (rowsNum, 2).HorizontalAlignment = 3
sheet.cells (rowsNum, 3) = ""
sheet.cells (rowsNum, 4) = "Code de la table"
sheet.cells (rowsNum, 5) = tab.code
sheet.cells (rowsNum, 5).HorizontalAlignment = 3
sheet.Range (sheet.cells (rowsNum, 5), sheet.cells (rowsNum, 6)). Merge
'Assigne l'hyperlien, permet à l'utilisateur de cliquer sur le nom de la table à partir de la feuille Liste des tables
sheetList.Hyperlinks.Add sheetList.cells (rowIndex, 2), "", "'Structure des tables'" & "!B" & rowsNum
rowsNum = rowsNum + 1
sheet.cells (rowsNum, 1) = "Nom des colonnes"
sheet.cells (rowsNum, 2) = "Commentaire"
sheet.cells (rowsNum, 3) = ""
sheet.cells (rowsNum, 4) = "Nom des colonnes"
sheet.cells (rowsNum, 5) = "Code des colonnes"
sheet.cells (rowsNum, 6) = "Type"
sheet.cells (rowsNum, 7) = "Clef primaire"
sheet.cells (rowsNum, 8) = "Clef étrangère"
'Assigne les bordures
sheet.Range (sheet.cells (rowsNum-1, 1), sheet.cells (rowsNum, 2)). Borders.LineStyle = "1"
sheet.Range (sheet.cells (rowsNum-1, 4), sheet.cells (rowsNum, 8)). Borders.LineStyle = "1"
'Détermine que la taille de la police est de 10
sheet.Range (sheet.cells (rowsNum-1, 1), sheet.cells (rowsNum, 8)). Font.Size = 10
Dim col
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
sheet.cells (rowsNum, 7) = col.primary
sheet.cells (rowsNum, 8) = col.foreignkey
next
sheet.Range (sheet.cells (rowsNum-colsNum + 1,1), sheet.cells (rowsNum, 2)). Borders.LineStyle = "3"
sheet.Range (sheet.cells (rowsNum-colsNum + 1,4), sheet.cells (rowsNum, 8)). Borders.LineStyle = "3"
sheet.Range (sheet.cells (rowsNum-colsNum + 1,1), sheet.cells (rowsNum, 8)). Font.Size = 10
rowsNum = rowsNum + 2
Output "Description complète:" + tab.Name
End If
End Sub
'------------------------------------------------- ----------------------------
'Affiche la liste des tables
'------------------------------------------------- ----------------------------
Sub Affiche_Liste_Tables (mdl, SheetList)
'Affiche les tables du modèle actif
Dim rowsNo
Dim tab
rowsNo = 1
SheetList.cells (rowsNo, 1) = "Nom du modèle"
SheetList.cells (rowsNo, 2) = "Nom des tables"
SheetList.cells (rowsNo, 3) = "Code des tables"
rowsNo = rowsNo + 1
SheetList.cells (rowsNo, 1) = mdl.name
'Pour chaque table
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
End If
Next
SheetList.Columns (1).ColumnWidth = 20
SheetList.Columns (2).ColumnWidth = 20
SheetList.Columns (3).ColumnWidth = 30
End Sub
