powerDesigner導(dǎo)出Excel腳本

分目錄遞歸,查找當(dāng)前PDM下所有表,并導(dǎo)出Excel

'******************************************************************************
'* File:     Exported_Excel_page.vbs
'* Purpose:  分目錄遞歸,查找當(dāng)前PDM下所有表碉京,并導(dǎo)出Excel
'* Title:    
'* Category: 
'* Version:  1.0
'* Author:  787681084@qq.com
'******************************************************************************

Option Explicit
ValidationMode = True
InteractiveMode = im_Batch

'-----------------------------------------------------------------------------
' 主函數(shù)
'-----------------------------------------------------------------------------
' 獲取當(dāng)前活動(dòng)模型
Dim mdl ' 當(dāng)前的模型
Set mdl = ActiveModel
Dim EXCEL,catalog,sheet,catalogNum,rowsNum,linkNum
rowsNum = 1
catalogNum = 1
linkNum = 1

If (mdl Is Nothing) Then
    MsgBox "There is no Active Model"
Else
    SetCatalog
    ListObjects(mdl)
End If

'----------------------------------------------------------------------------------------------
' 子過(guò)程僵芹,用于掃描當(dāng)前包并從當(dāng)前包中打印對(duì)象的信息瀑志,然后對(duì)當(dāng)前包的所有子包再次調(diào)用相同的子過(guò)程
'----------------------------------------------------------------------------------------------
Private Sub ListObjects(fldr)
    output "Scanning " & fldr.code
    Dim obj ' 運(yùn)行對(duì)象
    For Each obj In fldr.children
        ' 調(diào)用子過(guò)程來(lái)打印對(duì)象上的信息
        DescribeObject obj
    Next
    ' 進(jìn)入子包
    Dim f ' 運(yùn)行文件夾
    For Each f In fldr.Packages
        '調(diào)用子程序掃描子程序包
        ListObjects f
    Next
End Sub

'-----------------------------------------------------------------------------
' 子過(guò)程坛猪,用于在輸出中打印當(dāng)前對(duì)象的信息
'-----------------------------------------------------------------------------
Private Sub DescribeObject(CurrentObject)
    if not CurrentObject.Iskindof(cls_NamedObject) then exit sub
    if CurrentObject.Iskindof(cls_Table) then 
        AddSheet CurrentObject.code
        ExportTable CurrentObject, sheet
        ExportCatalog CurrentObject
    else
        output "Found "+CurrentObject.ClassName+" """+CurrentObject.Name+""", Created by "+CurrentObject.Creator+" On "+Cstr(CurrentObject.CreationDate)   
    End if
End Sub

'----------------------------------------------------------------------------------------------
' 設(shè)置Excel的sheet頁(yè)
'----------------------------------------------------------------------------------------------
Sub SetExcel()
    Set EXCEL= CreateObject("Excel.Application")

    ' 使Excel通過(guò)應(yīng)用程序?qū)ο罂梢?jiàn)脖阵。
    EXCEL.Visible = True
    EXCEL.workbooks.add(-4167)'添加工作表
    EXCEL.workbooks(1).sheets(1).name ="pdm"
    set sheet = EXCEL.workbooks(1).sheets("pdm")

    ' 將一些文本放在工作表的第一行
    sheet.Cells(rowsNum, 1).Value = "表名"
    sheet.Cells(rowsNum, 2).Value = "表中文名"
    sheet.Cells(rowsNum, 3).Value = "表備注"
    sheet.Cells(rowsNum, 4).Value = "字段ID"
    sheet.Cells(rowsNum, 5).Value = "字段名"
    sheet.Cells(rowsNum, 6).Value = "字段中文名"
    sheet.Cells(rowsNum, 7).Value = "字段類型"
    sheet.Cells(rowsNum, 8).Value = "字段備注"
    sheet.cells(rowsNum, 9).Value = "主鍵"
    sheet.cells(rowsNum, 10).Value = "非空"
    sheet.cells(rowsNum, 11).Value = "默認(rèn)值"
End Sub

'----------------------------------------------------------------------------------------------
' 導(dǎo)出目錄結(jié)構(gòu)
'----------------------------------------------------------------------------------------------
Sub ExportCatalog(tab)
    catalogNum = catalogNum + 1
    catalog.cells(catalogNum, 1).Value = tab.parent.name
    catalog.cells(catalogNum, 2).Value = tab.code
    catalog.cells(catalogNum, 3).Value = tab.comment
    '設(shè)置超鏈接
    catalog.Hyperlinks.Add catalog.cells(catalogNum,2), "",tab.code&"!A2"
End Sub 

'----------------------------------------------------------------------------------------------
' 導(dǎo)出sheet頁(yè)
'----------------------------------------------------------------------------------------------
Sub ExportTable(tab, sheet)
    Dim col ' 運(yùn)行列
    Dim colsNum
    colsNum = 0
    for each col in tab.columns
        colsNum = colsNum + 1
        rowsNum = rowsNum + 1
        sheet.Cells(rowsNum, 1).Value = tab.code
        'sheet.Cells(rowsNum, 2).Value = tab.name
        sheet.Cells(rowsNum, 2).Value = tab.comment
        'sheet.Cells(rowsNum, 4).Value = colsNum
        sheet.Cells(rowsNum, 3).Value = col.code
        'sheet.Cells(rowsNum, 4).Value = col.name
        sheet.Cells(rowsNum, 4).Value = col.datatype
        sheet.Cells(rowsNum, 5).Value = col.comment
        
        If col.Primary = true Then
            sheet.cells(rowsNum, 6) = "Y" 
        Else
            sheet.cells(rowsNum, 6) = "" 
        End If
        If col.Mandatory = true Then
            sheet.cells(rowsNum, 7) = "Y" 
        Else
            sheet.cells(rowsNum, 7) = "" 
        End If
        
        sheet.cells(rowsNum, 8).Value = col.defaultvalue
        '設(shè)置居中顯示
        sheet.cells(rowsNum,6).HorizontalAlignment = 3
        sheet.cells(rowsNum,7).HorizontalAlignment = 3
    next
    output "Exported table: "+ +tab.Code+"("+tab.Name+")"
End Sub 

'----------------------------------------------------------------------------------------------
' 設(shè)置Excel目錄頁(yè)
'----------------------------------------------------------------------------------------------
Sub SetCatalog()
    Set EXCEL= CreateObject("Excel.Application")
    
    ' 使Excel通過(guò)應(yīng)用程序?qū)ο罂梢?jiàn)。
    EXCEL.Visible = True
    EXCEL.workbooks.add(-4167)'添加工作表
    EXCEL.workbooks(1).sheets(1).name ="表結(jié)構(gòu)"
    EXCEL.workbooks(1).sheets.add
    EXCEL.workbooks(1).sheets(1).name ="目錄"
    set catalog = EXCEL.workbooks(1).sheets("目錄")

    catalog.cells(catalogNum, 1) = "模塊"
    catalog.cells(catalogNum, 2) = "表名"
    catalog.cells(catalogNum, 3) = "表注釋"
    
    ' 設(shè)置列寬和自動(dòng)換行
    catalog.Columns(1).ColumnWidth = 20
    catalog.Columns(2).ColumnWidth = 25
    catalog.Columns(3).ColumnWidth = 55
    
    '設(shè)置首行居中顯示
    
    catalog.Range(catalog.cells(1,1),catalog.cells(1,3)).HorizontalAlignment = 3
    '設(shè)置首行字體加粗
    catalog.Range(catalog.cells(1,1),catalog.cells(1,3)).Font.Bold = True
End Sub 

'----------------------------------------------------------------------------------------------
' 新增sheet頁(yè)
'----------------------------------------------------------------------------------------------
Sub AddSheet(sheetName)
    EXCEL.workbooks(1).Sheets(2).Select
    EXCEL.workbooks(1).sheets.add
    EXCEL.workbooks(1).sheets(2).name = sheetName
    set sheet = EXCEL.workbooks(1).sheets(sheetName)
    rowsNum = 1
    '將一些文本放在工作表的第一行
    sheet.Cells(rowsNum, 1).Value = "表名"
    'sheet.Cells(rowsNum, 2).Value = "表中文名"
    sheet.Cells(rowsNum, 2).Value = "表備注"
    'sheet.Cells(rowsNum, 4).Value = "字段ID"
    sheet.Cells(rowsNum, 3).Value = "字段名"
    'sheet.Cells(rowsNum, 4).Value = "字段中文名"
    sheet.Cells(rowsNum, 4).Value = "字段類型"
    sheet.Cells(rowsNum, 5).Value = "字段備注"
    sheet.cells(rowsNum, 6).Value = "主鍵"
    sheet.cells(rowsNum, 7).Value = "非空"
    sheet.cells(rowsNum, 8).Value = "默認(rèn)值"
    
    '設(shè)置列寬
    sheet.Columns(1).ColumnWidth = 20
    sheet.Columns(2).ColumnWidth = 20
    sheet.Columns(3).ColumnWidth = 20
    sheet.Columns(4).ColumnWidth = 20
    sheet.Columns(5).ColumnWidth = 20
    sheet.Columns(6).ColumnWidth = 5
    sheet.Columns(7).ColumnWidth = 5
    sheet.Columns(8).ColumnWidth = 10

    '設(shè)置首行居中顯示
    sheet.Range(sheet.cells(1,1),sheet.cells(1,8)).HorizontalAlignment = 3
    '設(shè)置首行字體加粗
    sheet.Range(sheet.cells(1,1),sheet.cells(1,8)).Font.Bold = True
    
    linkNum = linkNum + 1
    '設(shè)置超鏈接
    sheet.Hyperlinks.Add sheet.cells(1,1), "","目錄"&"!B"&linkNum
End Sub 

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末墅茉,一起剝皮案震驚了整個(gè)濱河市命黔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌就斤,老刑警劉巖悍募,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異洋机,居然都是意外死亡坠宴,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門绷旗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)喜鼓,“玉大人,你說(shuō)我怎么就攤上這事刁标〉咄ǎ” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵膀懈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我谨垃,道長(zhǎng)启搂,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任刘陶,我火速辦了婚禮胳赌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘匙隔。我一直安慰自己疑苫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布纷责。 她就那樣靜靜地躺著捍掺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪再膳。 梳的紋絲不亂的頭發(fā)上挺勿,一...
    開(kāi)封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音喂柒,去河邊找鬼不瓶。 笑死禾嫉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蚊丐。 我是一名探鬼主播熙参,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼麦备!你這毒婦竟也來(lái)了孽椰?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤泥兰,失蹤者是張志新(化名)和其女友劉穎弄屡,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鞋诗,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡膀捷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了削彬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片全庸。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖融痛,靈堂內(nèi)的尸體忽然破棺而出壶笼,到底是詐尸還是另有隱情,我是刑警寧澤雁刷,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布覆劈,位于F島的核電站,受9級(jí)特大地震影響沛励,放射性物質(zhì)發(fā)生泄漏责语。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一目派、第九天 我趴在偏房一處隱蔽的房頂上張望坤候。 院中可真熱鬧,春花似錦企蹭、人聲如沸白筹。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)徒河。三九已至,卻和暖如春螟凭,著一層夾襖步出監(jiān)牢的瞬間虚青,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工螺男, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棒厘,地道東北人纵穿。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像奢人,于是被迫代替她去往敵國(guó)和親谓媒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容