PowerDesigner 資料模型匯入匯出 Excel
阿新 • • 發佈:2018-11-27
目錄
附:PowerDesigner16.5 安裝包地址
連結:https://pan.baidu.com/s/1-JC2QF727OVW7U1zdiGd3A
提取碼:zam6
匯出
資料模型匯出成 Excel
最近專案組正在整理開發流程規範,其中對於資料庫的管理個人整理如下。
先看一眼效果圖:
資料庫物理表輸入輸出要素.xlsx
實現如上效果,需執行一段 VBScript 指令碼,網上借鑑了一些 ,根據自己的需求我又重新寫了一下,如下:
執行路徑【Tools - Execute Command - Run Script】或者快捷鍵【Ctrl + Shift + X】,點選執行:
'****************************************************************************** '* Title: pdm export to excel '* Describe: To export the tables and columns to Excel '* Model: Physical Data Model '* Objects: Table, Column, View '* Author: baicun '* Created: 2018-10-18 '* Version: 1.0 '****************************************************************************** Option Explicit Dim rowsNum rowsNum = 0 '----------------------------------------------------------------------------- ' Main function '----------------------------------------------------------------------------- ' 定義 Model 變數,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 ' 定義變數,建立EXCEL APP DIM beginrow DIM EXCEL, SHEET, SHEETLIST, INDEXLIST set EXCEL = CREATEOBJECT("Excel.Application") EXCEL.workbooks.add(-4167)'新增工作表 EXCEL.workbooks(1).sheets(1).name ="資料庫表清單" set SHEET = EXCEL.workbooks(1).sheets("資料庫表清單") EXCEL.workbooks(1).sheets.add EXCEL.workbooks(1).sheets(1).name ="資料庫表要素" set SHEETLIST = EXCEL.workbooks(1).sheets("資料庫表要素") EXCEL.workbooks(1).sheets.add EXCEL.workbooks(1).sheets(1).name ="索引清單" set INDEXLIST = EXCEL.workbooks(1).sheets("索引清單") ' 索引清單 sheet IndexProperties Model ' 資料庫表清單 sheet ShowTableList Model,SHEETLIST ' 資料庫表要素 sheet ShowProperties Model, SHEET,SHEETLIST EXCEL.workbooks(1).Sheets(3).Select EXCEL.visible = true '設定列寬和自動換行 sheet.Columns(1).ColumnWidth = 20 sheet.Columns(2).ColumnWidth = 20 sheet.Columns(3).ColumnWidth = 20 sheet.Columns(4).ColumnWidth = 40 sheet.Columns(5).ColumnWidth = 10 sheet.Columns(6).ColumnWidth = 10 sheet.Columns(1).WrapText =true sheet.Columns(2).WrapText =true sheet.Columns(4).WrapText =true '不顯示網格線 'EXCEL.ActiveWindow.DisplayGridlines = False End If '----------------------------------------------------------------------------- ' Show properties of 資料庫表清單 sheet '----------------------------------------------------------------------------- Sub ShowProperties(mdl, sheet,SheetList) ' Show tables of the current model/package rowsNum=0 beginrow = rowsNum+1 Dim rowIndex rowIndex=3 ' For each table output "export begin " Dim tab For Each tab In mdl.tables If rowsNum = 0 Then rowsNum = 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) = "表中文名" End If ShowTable 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 output "export end " End Sub '----------------------------------------------------------------------------- ' Show 資料庫表清單 sheet properties '----------------------------------------------------------------------------- Sub ShowTable(tab, sheet,rowIndex,sheetList) If IsObject(tab) Then Dim rangFlag ' Show properties Output "================================" '設定超連結,從資料庫表清單點選表名去檢視資料庫表要素 'sheetList.Hyperlinks.Add sheetList.cells(rowIndex,2), "","資料庫表清單"&"!B"&rowsNum '設定邊框 'sheet.Range(sheet.cells(rowsNum-1, 2),sheet.cells(rowsNum, 7)).Borders.LineStyle = "1" 'sheet.Range(sheet.cells(rowsNum-1, 4),sheet.cells(rowsNum, 9)).Borders.LineStyle = "1" '字型為11號 'sheet.Range(sheet.cells(rowsNum-1, 1),sheet.cells(rowsNum, 7)).Font.Size=11 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) = col.comment If col.Primary = true Then sheet.cells(rowsNum, 5) = "Y" Else sheet.cells(rowsNum, 5) = " " End If If col.Mandatory = true Then sheet.cells(rowsNum, 6) = "Y" Else sheet.cells(rowsNum, 6) = " " End If sheet.cells(rowsNum, 7) = col.defaultvalue sheet.cells(rowsNum, 8) = "" sheet.cells(rowsNum, 9) = tab.code sheet.cells(rowsNum, 10) = tab.name next 'sheet.Range(sheet.cells(rowsNum-colsNum+1,1),sheet.cells(rowsNum,7)).Borders.LineStyle = "3" 'sheet.Range(sheet.cells(rowsNum-colsNum+1,1),sheet.cells(rowsNum,7)).Font.Size = 11 Output "FullDescription: " + tab.Name End If End Sub '----------------------------------------------------------------------------- ' Show List Of Table '----------------------------------------------------------------------------- Sub ShowTableList(mdl, SheetList) ' Show tables of the current model/package Dim rowsNo rowsNo=1 ' 設定 sheet 內欄位值 output "sheet begin " SheetList.cells(rowsNo, 1) = "資料庫" SheetList.cells(rowsNo, 2) = "表中文名" SheetList.cells(rowsNo, 3) = "表英文名" SheetList.cells(rowsNo, 4) = "表說明" SheetList.cells(rowsNo, 5) = "更新日期" SheetList.cells(rowsNo, 6) = "更新使用者" rowsNo = rowsNo + 1 ' 設定 sheet 名稱 SheetList.cells(rowsNo, 1) = mdl.name Dim tab 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 SheetList.cells(rowsNo, 4) = tab.comment SheetList.cells(rowsNo, 5) = "" SheetList.cells(rowsNo, 6) = "" End If Next SheetList.Columns(1).ColumnWidth = 20 SheetList.Columns(2).ColumnWidth = 20 SheetList.Columns(3).ColumnWidth = 30 SheetList.Columns(4).ColumnWidth = 60 output "end" End Sub '----------------------------------------------------------------------------- ' Show Index Of Table '----------------------------------------------------------------------------- Sub IndexProperties(mdl) ' Show tables of the current model/package rowsNum=0 beginrow = rowsNum+1 Dim rowIndex rowIndex=3 Dim idx For Each idx In mdl.tables If rowsNum = 0 Then rowsNum = 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) = "更新使用者" End If 'IndexTable idx 'rowIndex = rowIndex +1 Next output "end" End Sub
執行完成後,可以自己做一個差異化的編輯。
資料字典 .xlsx
匯入
Excel 匯入成資料模型
以上兩個指令碼分別以後綴名稱為“.vbs”的方式儲存;
注意:匯出 excel 檔案,開啟時發現同時開啟倆個檔案,一個名為 Sheet1 ,解決方案:如下連結。
如果上面的方法還沒有解決,請換臺電腦或者重啟電腦試一下。
指令碼借鑑大佬連結如下: