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