1. 程式人生 > >PowerDesigner 資料模型匯入匯出 Excel

PowerDesigner 資料模型匯入匯出 Excel

目錄

匯出

資料模型匯出成 Excel

匯入

Excel 匯入成資料模型

附: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 ,解決方案:如下連結。

https://blog.csdn.net/sinat_34104446/article/details/80210424#3.2%20WPS%E8%A7%A3%E5%86%B3%E6%AD%A5%E9%AA%A4

如果上面的方法還沒有解決,請換臺電腦或者重啟電腦試一下。

 指令碼借鑑大佬連結如下:

https://www.cnblogs.com/chenz/articles/3456340.html