EXCEL批量導入PowerDesigner

背景

第二篇文章出爐了,還是oracle數據庫的問題,公司需要我們把字段到powerdesigner中。拜託!我數據庫語句都寫了,怎麼可能再逐字逐句錄入進去???
於是我開始搜如何將數據庫建表語句逆向導入到powerdesigner中,方法倒是有,需要連接oracle數據庫。拜託!我就是沒有這個數據庫才被迫用的livesql!
冥思苦想突然發現,原來前人早就有從excel批量導入powerdesigner的方法。

方案

vbs腳本!
什麼?你不會?沒關係,我也懶得去編輯,我在網上找了個腳本,稍微改動了一下,大家可以下載…
what?沒積分了?
沒關係,來我手把手教你複製。

步驟

  1. 第一步:複製附錄代碼,在桌面建一個txt文件,粘貼代碼。
  2. 第二步:更改txt名稱,改爲excel.vbs
  3. 第三步:將你的excel格式改造如下圖所示:
    其中位置必須一致,可以縱向拓展,所有字段均嚴格按此圖排列(顏色沒必要)。
    其中第一行爲表的信息,第二行爲固定格式,第三行至第N行爲你的字段信息。
    如果想建多個表,就繼續加sheet,每個sheet佈局均需嚴格按照圖示。
    樣例
  4. 打開powerdesigner,打開新建的項目。記住紅框1的名字。項目
  5. 使用腳本。在這裏插入圖片描述
  6. 打開桌面腳本。在這裏插入圖片描述
  7. 選擇腳本。在這裏插入圖片描述
  8. 修改部分代碼:將代碼紅框位置改爲剛剛紅框1的名字。
    下面的路徑爲你excel的絕對路徑。RUN即可導入。 在這裏插入圖片描述

附錄

Option Explicit
Private CURRENT_MODEL_NAME
Private CURRENT_MODEL
Private TABLES
Private EXCEL_APP
Private FILE_PATH
CURRENT_MODEL_NAME = "數據庫"
Set EXCEL_APP = CreateObject("Excel.Application")
FILE_PATH="C:\Users\Dell\Desktop\data.xlsx"    '文件的絕對路徑

'檢查文件是否存在
If CheckFileExsistence() Then
   '檢查當前是否有已經打開的物理圖
   Call GetModelByName(CURRENT_MODEL)
   If CURRENT_MODEL Is Nothing Then
      MsgBox("請先打開一個名稱爲“" & CURRENT_MODEL_NAME & "”的物理數據模型(Physical Data Model),然後再進執行導入!")
   Else
      Set TABLES = CURRENT_MODEL.Tables
      '根據EXCEL表格創建模型
      ImportModels()
   End If
Else
   MsgBox "文件" + FILE_PATH + "不存在!"
End If


'============================================================
'導入模型
'============================================================
Sub ImportModels
   '打開Excel文件
   Dim Filename
   Dim ReadOnly
   EXCEL_APP.Workbooks.Open FILE_PATH

   Dim worksheets
   Dim worksheetCount
   Set worksheets = EXCEL_APP.Worksheets
   worksheetCount = worksheets.Count
   If worksheetCount <= 0 Then
      Exit Sub
   End If
   
   Dim index
   Dim currentSheet
   For index = 1 to worksheetCount
      Set currentSheet = worksheets(index)
      Call CreateTable(currentSheet)
   Next
   
   '關閉Excel文件
   EXCEL_APP.Workbooks.Close
   MsgBox "導入完成!"
End Sub


'============================================================
'創建表
'============================================================
Sub CreateTable(ByRef worksheet)
   Dim cells
   Set cells = worksheet.Cells
   Dim table
   
   '檢查具有相同名稱的表是否已經存在
   Call GetTableByName(table, worksheet.Name)
   If table Is Nothing Then
      Set table = TABLES.CreateNew
      table.Name = cells(1, 1).Value
      table.Code = cells(1, 2).Value
      table.Comment = cells(1, 3).Value
      'table.Name = worksheet.Name
      'table.Code = worksheet.Name
      'table.Comment = worksheet.Name
   End If
   
   Dim index
   Dim rows
   Dim col
   Set rows = worksheet.Rows
   For index = 3 to 512
      If EXCEL_APP.WorksheetFunction.CountA(rows(index)) <= 0 Then
         Exit For
      End If
      
      If ((cells(index,1).Value = "") or (cells(index,2).Value = "Name" ))Then '第二列爲空的都可以忽略
            'MsgBox "值2"
         'continue    '這裏忽略空行和表名行、表頭行
        Else 
            set col =table.Columns.CreateNew '創建一列/字段
         col.Code = cells(index, 1).Value    '指定列code
         'MsgBox "值3"
         col.DataType = cells(index, 3).Value    '指定列數據類型
         If cells(index, 4).Value = "Y" Then'指定主鍵
                col.Primary =true
         Else
            If cells(index, 5).Value = "否" Then'指定列是否可空 true 爲不可空
                   col.Mandatory =true
            
            End If
            
            End If
            col.Name = cells(index, 2).Value    '指定列name            
            col.Comment = cells(index, 2).Value  '指定列說明
         'count = count + 1
        End If    
   Next
End Sub


'============================================================
'檢查文件是否存在
'============================================================
Function CheckFileExsistence
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   CheckFileExsistence = fso.FileExists(FILE_PATH)
End Function


'============================================================
'根據數據類型名稱,精度和刻度生成數據類型
'============================================================
Function GenerateDataType(dataTypeName, precision, scale)
   Select Case Ucase(dataTypeName)
      Case Empty
         GenerateDataType = Empty
      Case "NUMBER"
         GenerateDataType = "NUMBER(" & precision & "," & scale & ")"
   End Select
End Function


'============================================================
'獲取指定指定名稱的數據模型
'============================================================
Sub GetModelByName(ByRef model)
   Dim md
   For Each md in Models
      If StrComp(md.Name, CURRENT_MODEL_NAME) = 0 Then
         Set model = md
         Exit Sub
      End If
   Next
   Set model = Nothing
End Sub


'============================================================
'根據表名稱獲取對應的表
'============================================================
Sub GetTableByName(ByRef table, tableName)
   Dim tb
   For Each tb in TABLES
      If StrComp(tb.Name, tableName) = 0 Then
         Set table = tb
         Exit Sub
      End If
   Next
   Set table = Nothing
End Sub


'============================================================
'檢查字段是否已經存在
'============================================================
Function ColumnExists(ByRef table, columnName)
   Dim col
   For Each col in table.Columns
      If StrComp(col.Name, columnName) = 0 Then
         ColumnExists = True
         Exit Function
      End If
   Next
   ColumnExists = False
End Function

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章