Powerd911 – Numéro #1 au Canada

Exporter les métadonnées des tables, colonnes vers un chiffrier Excel

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

Laisser un commentaire