1. 程式人生 > >powerDesigner 從資料庫匯出表結構,並生產excel ,有效

powerDesigner 從資料庫匯出表結構,並生產excel ,有效

將資料庫中的表匯入到PowerDesigner中並轉為excel文件

1、開啟PowerDesigner12,在選單中按照如下方式進行操作

   file->Reverse Engineer->DataBase

   點選後,彈出 New Physical Data Model 的對話方塊

2、在General選項卡中

    Model name:模板名字,自己命名。

    DMBMS    :根據需要選擇,我選擇的是ORACLEVersion 10g

點確定後彈出 Database Reverse Engineering Option 對話方塊

3  Selection選項卡中,選中Using a data source選項

   注意如果是第一次匯入資料,需要你先自己配製ODBC資料來源,方法如下:

1)點選 下面 右側的資料庫 連線按鈕,彈出 Connect to a Data Source 的對話方塊

       2)選中 ODBC machine data source 選項,點選 Modify按鈕右邊的 Configure 按鈕   彈出Configure Data Connections

3)在 ODBC Machine Data Sources選項卡   下面的工具欄中點選 第二個 資料庫 配置按鈕(Add Data Source(Ctrl+N)) 彈出建立新資料來源視窗 ,選擇檔案資料來源,    選擇相應的資料來源驅動程式(我選Oracle),點下一步(Modify),給資料來源起個名字,選擇伺服器,下一步,輸入相應的密碼 

配置完畢 後 點選確定

4,選擇剛剛配置的資料來源,輸入相應的使用者名稱和密碼   即可。 、

選擇需要匯入的表

PowerDesigner中,shift+ctrl+X,開啟指令碼執行,指令碼如下:

'******************************************************************************

'* File:     pdm2excel.txt

'* Title:    pdm export to excel

'* Purpose:  To export the tables and columns to Excel

'* Model:    Physical Data Model

'* Objects:  Table, Column, View

'* Author:   ziyan

'* Created:  2012-05-03

'* Version:  1.0

'******************************************************************************

Option Explicit

   Dim rowsNum

   rowsNum = 0

'-----------------------------------------------------------------------------

' Main function

'-----------------------------------------------------------------------------

' Get the current activemodel

Dim Model

Set Model = ActiveModel

If (Model Is Nothing) Or (NotModel.IsKindOf(PdPDM.cls_Model)) Then

  MsgBox "The current model is not an PDMmodel."

Else

 ' Get the tables collection

 '建立EXCEL APP

 dim beginrow

 DIM EXCEL, SHEET

 set EXCEL =CREATEOBJECT("Excel.Application")

 EXCEL.workbooks.add(-4167)'新增工作表

 EXCEL.workbooks(1).sheets(1).name="test"

 set sheet = EXCEL.workbooks(1).sheets("test")

 ShowProperties Model, SHEET

 EXCEL.visible = true

 '設定列寬和自動換行

 sheet.Columns(1).ColumnWidth = 20

 sheet.Columns(2).ColumnWidth = 40

 sheet.Columns(4).ColumnWidth = 20

 sheet.Columns(5).ColumnWidth = 20

 sheet.Columns(6).ColumnWidth = 15

 sheet.Columns(7).ColumnWidth = 10

 sheet.Columns(8).ColumnWidth = 10

 sheet.Columns(9).ColumnWidth = 10

 sheet.Columns(1).WrapText =true

 sheet.Columns(2).WrapText =true

 sheet.Columns(4).WrapText =true

 End If

'-----------------------------------------------------------------------------

' Show properties of tables

'-----------------------------------------------------------------------------

Sub ShowProperties(mdl,sheet)

   ' Show tables of the current model/package

   rowsNum=0

   beginrow = rowsNum+1

   ' For each table

   output "begin"

   Dim tab

   For Each tab In mdl.tables

      ShowTable tab,sheet

   Next

   if mdl.tables.count > 0 then

        sheet.Range("A" &beginrow + 1 & ":A" & rowsNum).Rows.Group

   end if

   output "end"

End Sub

'-----------------------------------------------------------------------------

' Show table properties

'-----------------------------------------------------------------------------

Sub ShowTable(tab, sheet)

   If IsObject(tab) Then

     Dim rangFlag

     rowsNum = rowsNum + 1

      ' Show properties

      Output"================================"

      sheet.cells(rowsNum, 1) = "實體名"

      sheet.cells(rowsNum, 2) =tab.name

      sheet.cells(rowsNum, 3) = ""

      sheet.cells(rowsNum, 4) = "表名"

      sheet.cells(rowsNum, 5) = tab.code

      sheet.Range(sheet.cells(rowsNum,5),sheet.cells(rowsNum, 9)).Merge

      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.Range(sheet.cells(rowsNum-1,1),sheet.cells(rowsNum, 2)).Borders.LineStyle = "1"

      sheet.Range(sheet.cells(rowsNum-1,4),sheet.cells(rowsNum, 9)).Borders.LineStyle = "1"

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.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

      sheet.cells(rowsNum, 9) = col.mandatory

      next

     sheet.Range(sheet.cells(rowsNum-colsNum+1,1),sheet.cells(rowsNum,2)).Borders.LineStyle= "2"      

     sheet.Range(sheet.cells(rowsNum-colsNum+1,4),sheet.cells(rowsNum,9)).Borders.LineStyle= "2"

      rowsNum = rowsNum + 1

      Output "FullDescription: "       + tab.Name

   End If

End Sub