从开发流程上来说,通常是先做设计书,在进行开发。
但是还是有很多项目由于各种各样的原因,需要后期补设计书。
本文的所述的方式是,通过PowerDesigner直连Mysql数据库(以此为例)。将DB结构导入到PowerDesigner中,而后通过vbs脚本,逆向生成Execl的DB设计书。
第一步:连DB。
关于 ODBC连接的配置方式
参考:https://blog.csdn.net/weixin_42517649/article/details/114475744
第二步:引入表结构之后,会发现不显示字段中文名
第三步:执行以下操作,先调出 code列
勾选Code
第四步:执行VBS,将code列转成comment的值
Comment2Name.vbs代码如下
Option Explicit
ValidationMode = True
InteractiveMode = im_Batch
Dim mdl ' the current model
' get the current active model
Set mdl = ActiveModel
If (mdl Is Nothing) Then
MsgBox "There is no current Model "
ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then
MsgBox "The current model is not an Physical Data model. "
Else
ProcessFolder mdl
End If
Private sub ProcessFolder(folder)
On Error Resume Next
Dim Tab 'running table
for each Tab in folder.tables
if not tab.isShortcut then
tab.name = tab.comment
Dim col ' running column
for each col in tab.columns
if col.comment="" then
else
col.name= col.comment
end if
next
end if
next
Dim view 'running view
for each view in folder.Views
if not view.isShortcut then
view.name = view.comment
end if
next
' go into the sub-packages
Dim f ' running folder
For Each f In folder.Packages
if not f.IsShortcut then
ProcessFolder f
end if
Next
end sub
运行后效果
使用导出脚本
自行创建一个.vbs文件即可。
Option Explicit
Dim rowsNum
rowsNum = 0
'-----------------------------------------------------------------------------
' Main function
'-----------------------------------------------------------------------------
' 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
' Get the tables collection
' 创建EXCEL APP
dim beginrow
DIM EXCEL, BOOK, SHEETLIST ,FRISTSHEET,SECONDSHEET
set EXCEL = CREATEOBJECT("Excel.Application")
set BOOK = EXCEL.workbooks.add(-4167) ' 创建工作簿
'封面页
BOOK.sheets(1).name ="封面" 'Sheet名称
set FRISTSHEET = BOOK.sheets("封面") 'Sheet对象
output "[line(21) info]: book.Sheet: " + FRISTSHEET.Name
'编辑封面页
ShowFristSheet FRISTSHEET
BOOK.sheets.add,BOOK.Sheets(1) ' 添加工作表Sheet
BOOK.sheets(2).name ="改版履历" 'Sheet名称
set SECONDSHEET = BOOK.sheets("改版履历") 'Sheet对象
output "[line(21) info]: book.Sheet: " + SECONDSHEET.Name
ShowSecondSheet SECONDSHEET
BOOK.sheets.add,BOOK.Sheets(2) ' 添加工作表Sheet
BOOK.sheets(3).name ="目录" 'Sheet名称
set SHEETLIST = BOOK.sheets("目录") 'Sheet对象
output "[line(21) info]: book.Sheet: " + SHEETLIST.Name
BOOK.sheets.add,BOOK.Sheets(BOOK.Sheets.Count) ' 添加工作表Sheet
output "[line(24) info]: book.Sheet: " + BOOK.Sheets(1).Name
'EXCEL.workbooks(1).sheets(1).name ="表结构" 'Sheet1名称
'set SHEET = EXCEL.workbooks(1).sheets("表结构") 'Sheet1对象
ShowTableList Model, SHEETLIST
ShowProperties Model, BOOK
output "[line(32) info]: Select: " + BOOK.Sheets(BOOK.Sheets.count).name
BOOK.Sheets(1).Select '选择默认打开的工作表
EXCEL.visible = true ' 弹出Excel工作簿
'不显示网格线
'EXCEL.ActiveWindow.DisplayGridlines = True
End If
'-----------------------------------------------------------------------------
' Show properties of tables
'-----------------------------------------------------------------------------
Sub ShowProperties(mdl, book)
' Show tables of the current model/package
rowsNum=0
beginrow = rowsNum+1
output "[line(46) info]: tables count : " &mdl.tables.count
output "[line(50) info]: 表结构 begin ========================"
' For each table
Dim tab ' Power Tables
For Each tab In mdl.tables
ShowTable mdl,tab,book
EXCEL.visible = true
Next
output "[line(58) info]: 表结构 end !Sheet totals is : " & book.Sheets.count
End Sub
'-----------------------------------------------------------------------------
' Show table properties
'-----------------------------------------------------------------------------
Sub ShowTable(mdl, tab, book)
If IsObject(tab) Then
Output "输出表 [" + tab.name + UCase(tab.code) + "] 开始"
rowsNum = 0
rowsNum = rowsNum + 1 'rowsNum=1,工作表第一行
Dim sheet
dim tableName
set sheet = book.Sheets(book.Sheets.Count)
tableName = tab.name
tableName = replace(tableName,"/","")
tableName = replace(tableName,"\","")
tableName = replace(tableName,"?","")
tableName = replace(tableName,"*","")
if Len(tab.name) > 30 then
sheet.name =left(tableName,30)
else
sheet.name =tableName
end if
Dim rangFlag
' Show properties
Output "================================"
sheet.Rows.RowHeight = 15
sheet.Rows(1).RowHeight = 6
rowsNum = rowsNum + 1
sheet.Columns.ColumnWidth = 3
sheet.Columns(1).ColumnWidth = 1
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 30)).Borders.LineStyle = 1
sheet.Columns.Font.Size = 10
sheet.Columns.Font.Name = "SimSun"
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 30)).Font.Size = 10.5
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 30)).HorizontalAlignment = -4108
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 2)).Borders(7).LineStyle = 3
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 2)).Borders(7).weight = 3
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 30)).Borders(8).LineStyle = 3
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 30)).Borders(8).weight = 3
sheet.Range(sheet.cells(rowsNum, 30),sheet.cells(rowsNum+3, 30)).Borders(10).LineStyle = 3
sheet.Range(sheet.cells(rowsNum, 30),sheet.cells(rowsNum+3, 30)).Borders(10).weight = 3
sheet.Range(sheet.cells(rowsNum+3, 2),sheet.cells(rowsNum+3, 30)).Borders(9).LineStyle = 3
sheet.Range(sheet.cells(rowsNum+3, 2),sheet.cells(rowsNum+3, 30)).Borders(9).weight = 3
sheet.cells(rowsNum, 2) = "####公司"
sheet.cells(rowsNum, 2).Interior.ColorIndex=35
sheet.cells(rowsNum, 2).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+1, 8)).Merge
sheet.cells(rowsNum, 9) = "系统名"
sheet.cells(rowsNum, 9).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 12)).Merge
sheet.cells(rowsNum, 13) = "子系统名"
sheet.cells(rowsNum, 13).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 13),sheet.cells(rowsNum, 16)).Merge
sheet.cells(rowsNum, 17) = "####项目-DB设计书"
sheet.cells(rowsNum, 17).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 17),sheet.cells(rowsNum+1, 30)).Merge
rowsNum = rowsNum + 1
sheet.cells(rowsNum, 9) = "####"
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 12)).Merge
sheet.cells(rowsNum, 13) = "####"
sheet.Range(sheet.cells(rowsNum, 13),sheet.cells(rowsNum, 16)).Merge
rowsNum = rowsNum + 1
sheet.cells(rowsNum, 2) = "版 数"
sheet.cells(rowsNum, 2).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 8)).Merge
sheet.cells(rowsNum, 9) = "章 节"
sheet.cells(rowsNum, 9).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 16)).Merge
sheet.cells(rowsNum, 17) = "改版日"
sheet.cells(rowsNum, 17).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 17),sheet.cells(rowsNum, 20)).Merge
sheet.cells(rowsNum, 21) = "改版者"
sheet.cells(rowsNum, 21).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 21),sheet.cells(rowsNum, 23)).Merge
sheet.cells(rowsNum, 24) = "作成日"
sheet.cells(rowsNum, 24).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 24),sheet.cells(rowsNum, 27)).Merge
sheet.cells(rowsNum, 28) = "作成者"
sheet.cells(rowsNum, 28).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 28),sheet.cells(rowsNum, 30)).Merge
rowsNum = rowsNum + 1
sheet.cells(rowsNum, 2) = "V1.0"
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 8)).Merge
sheet.cells(rowsNum, 9) = tab.name
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 16)).Merge
sheet.cells(rowsNum, 17) = Format_Time(Now(),2)
sheet.Range(sheet.cells(rowsNum, 17),sheet.cells(rowsNum, 20)).Merge
sheet.cells(rowsNum, 21) = "####"
sheet.Range(sheet.cells(rowsNum, 21),sheet.cells(rowsNum, 23)).Merge
sheet.cells(rowsNum, 24) = Format_Time(Now(),2)
sheet.Range(sheet.cells(rowsNum, 24),sheet.cells(rowsNum, 27)).Merge
sheet.cells(rowsNum, 28) = "####"
sheet.Range(sheet.cells(rowsNum, 28),sheet.cells(rowsNum, 30)).Merge
rowsNum = rowsNum + 1
sheet.Rows(rowsNum).RowHeight = 6
rowsNum = rowsNum + 1
sheet.cells(rowsNum, 2) = "表名(英文)"
'对齐
sheet.cells(rowsNum, 2).HorizontalAlignment = -4108
'背景色
sheet.cells(rowsNum, 2).Interior.ColorIndex=35
'合并单元格
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 5)).Merge
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 5)).Borders.LineStyle = "1"
sheet.cells(rowsNum, 6) = UCase(tab.code)
sheet.Range(sheet.cells(rowsNum, 6),sheet.cells(rowsNum, 14)).Merge
sheet.Range(sheet.cells(rowsNum, 6),sheet.cells(rowsNum, 14)).Borders.LineStyle = "1"
sheet.cells(rowsNum, 15) = "表名(中文)"
sheet.cells(rowsNum, 15).Interior.ColorIndex=35
'对齐
sheet.cells(rowsNum, 15).HorizontalAlignment = -4108
sheet.Range(sheet.cells(rowsNum, 15),sheet.cells(rowsNum, 19)).Merge
sheet.Range(sheet.cells(rowsNum, 15),sheet.cells(rowsNum, 19)).Borders.LineStyle = "1"
sheet.cells(rowsNum, 20) = tab.name
sheet.Range(sheet.cells(rowsNum, 20),sheet.cells(rowsNum, 30)).Merge
sheet.Range(sheet.cells(rowsNum, 20),sheet.cells(rowsNum, 30)).Borders.LineStyle = "1"
'sheet.cells(rowsNum, 10) = "封面"
'sheet.cells(rowsNum, 11) = ""
'高度
'sheet.Rows(1).RowHeight = 30
rowsNum = rowsNum + 1
'对齐
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 30)).HorizontalAlignment = -4108
sheet.cells(rowsNum, 2) = "No"
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 2)).Borders.LineStyle = "1"
sheet.cells(rowsNum, 3) = "Field"
sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 8)).Merge
sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 8)).Borders.LineStyle = "1"
sheet.cells(rowsNum, 9) = "Comment"
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 14)).Merge
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 14)).Borders.LineStyle = "1"
sheet.cells(rowsNum, 15) = "Type"
sheet.Range(sheet.cells(rowsNum, 15),sheet.cells(rowsNum, 18)).Merge
sheet.Range(sheet.cells(rowsNum, 15),sheet.cells(rowsNum, 18)).Borders.LineStyle = "1"
sheet.cells(rowsNum, 19) = "Not Null"
sheet.Range(sheet.cells(rowsNum, 19),sheet.cells(rowsNum, 20)).Merge
sheet.Range(sheet.cells(rowsNum, 19),sheet.cells(rowsNum, 20)).Borders.LineStyle = "1"
sheet.cells(rowsNum, 21) = "PK"
sheet.cells(rowsNum, 22) = "Index1"
sheet.Range(sheet.cells(rowsNum, 22),sheet.cells(rowsNum, 23)).Merge
sheet.Range(sheet.cells(rowsNum, 22),sheet.cells(rowsNum, 23)).Borders.LineStyle = "1"
sheet.cells(rowsNum, 24) = "Index2"
sheet.Range(sheet.cells(rowsNum, 24),sheet.cells(rowsNum, 25)).Merge
sheet.Range(sheet.cells(rowsNum, 24),sheet.cells(rowsNum, 25)).Borders.LineStyle = "1"
sheet.cells(rowsNum, 26) = "Default"
sheet.Range(sheet.cells(rowsNum, 26),sheet.cells(rowsNum, 27)).Merge
sheet.cells(rowsNum, 28) = "remark"
sheet.Range(sheet.cells(rowsNum, 28),sheet.cells(rowsNum, 30)).Merge
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 30)).Interior.ColorIndex=35
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 30)).Borders.LineStyle = "1"
'设置边框
Dim col ' running column
Dim colsNum
colsNum = 0
Dim fristDataRows
fristDataRows = rowsNum + 1
for each col in tab.columns
rowsNum = rowsNum + 1
colsNum = colsNum + 1
sheet.cells(rowsNum, 2) = colsNum
sheet.cells(rowsNum, 2).HorizontalAlignment = 1
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 2)).Borders.LineStyle = "1"
sheet.cells(rowsNum, 3) = col.code
sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 8)).Merge
sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 8)).Borders.LineStyle = "1"
sheet.cells(rowsNum, 9) = col.name
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 14)).Merge
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 14)).Borders.LineStyle = "1"
sheet.cells(rowsNum, 15) = col.datatype
sheet.Range(sheet.cells(rowsNum, 15),sheet.cells(rowsNum, 18)).Merge
sheet.Range(sheet.cells(rowsNum, 15),sheet.cells(rowsNum, 18)).Borders.LineStyle = "1"
If col.Mandatory = true Then
sheet.cells(rowsNum, 19) = "Y"
Else
sheet.cells(rowsNum, 19) = " "
End If
sheet.Range(sheet.cells(rowsNum, 19),sheet.cells(rowsNum, 20)).Merge
sheet.Range(sheet.cells(rowsNum, 19),sheet.cells(rowsNum, 20)).Borders.LineStyle = "1"
If col.Primary = true Then
sheet.cells(rowsNum, 21) = "○"
Else
sheet.cells(rowsNum, 21) = " "
End If
sheet.Range(sheet.cells(rowsNum, 21),sheet.cells(rowsNum, 21)).Borders.LineStyle = "1"
sheet.Range(sheet.cells(rowsNum, 22),sheet.cells(rowsNum, 23)).Merge
sheet.Range(sheet.cells(rowsNum, 22),sheet.cells(rowsNum, 23)).Borders.LineStyle = "1"
sheet.Range(sheet.cells(rowsNum, 24),sheet.cells(rowsNum, 25)).Merge
sheet.Range(sheet.cells(rowsNum, 24),sheet.cells(rowsNum, 25)).Borders.LineStyle = "1"
sheet.Range(sheet.cells(rowsNum, 26),sheet.cells(rowsNum, 27)).Merge
sheet.Range(sheet.cells(rowsNum, 26),sheet.cells(rowsNum, 27)).Borders.LineStyle = "1"
sheet.Range(sheet.cells(rowsNum, 28),sheet.cells(rowsNum, 30)).Merge
sheet.Range(sheet.cells(rowsNum, 28),sheet.cells(rowsNum, 30)).Borders.LineStyle = "1"
'sheet.cells(rowsNum, 10) = col.name
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 30)).Borders(8).LineStyle = 3
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 30)).Borders(8).weight = 1
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 30)).Borders(9).LineStyle = 3
next
sheet.Range(sheet.cells(fristDataRows, 2),sheet.cells(fristDataRows, 30)).Borders(8).LineStyle = 1
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 30)).Borders(9).LineStyle = 1
'设置列宽和自动换行
sheet.Columns(1).WrapText =true
sheet.Columns(2).WrapText =true
sheet.Columns(10).WrapText =true
'sheet.Range(sheet.cells(rowsNum-colsNum+1,1),sheet.cells(rowsNum,11)).Borders.LineStyle = "1"
'sheet.Range(sheet.cells(rowsNum-colsNum+1,4),sheet.cells(rowsNum,8)).Borders.LineStyle = "2"
rowsNum = rowsNum + 1
If book.Sheets.count-3 < mdl.tables.count Then book.Sheets.Add,book.Sheets(book.Sheets.Count)
End If
End Sub
Function Format_Time(s_Time, n_Flag)
Dim y, m, d, h, mi, s
Format_Time = ""
If IsDate(s_Time) = False Then Exit Function
y = cstr(year(s_Time))
m = cstr(month(s_Time))
If len(m) = 1 Then m = "0" & m
d = cstr(day(s_Time))
If len(d) = 1 Then d = "0" & d
h = cstr(hour(s_Time))
If len(h) = 1 Then h = "0" & h
mi = cstr(minute(s_Time))
If len(mi) = 1 Then mi = "0" & mi
s = cstr(second(s_Time))
If len(s) = 1 Then s = "0" & s
Select Case n_Flag
Case 1
' yyyy-mm-dd hh:mm:ss
Format_Time = y & "-" & m & "-" & d & " "& h &":" & mi &":" & s
Case 2
' yyyy-mm-dd
Format_Time = y & "-" & m & "-" & d
Case 3
' hh:mm:ss
Format_Time = h & ":" & mi & ":" & s
Case 4
' yyyy年mm月dd日
Format_Time = y & "年" & m & "月" & d & "日"
Case 5
' yyyymmdd
Format_Time = y & m & d
End Select
End Function
'-----------------------------------------------------------------------------
' Show List Of Table
'-----------------------------------------------------------------------------
Sub ShowTableList(mdl, sheet)
' Show tables of the current model/package
Dim rowsNum
dim fristDataRows
rowsNum=1
output "[line(131) info]: 目录程序 begin"
sheet.Rows.RowHeight = 15
sheet.Rows(1).RowHeight = 6
rowsNum = rowsNum + 1
sheet.Columns.ColumnWidth = 3
sheet.Columns(1).ColumnWidth = 1
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 30)).Borders.LineStyle = 1
sheet.Columns.Font.Size = 10
sheet.Columns.Font.Name = "SimSun"
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 30)).Font.Size = 10.5
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 30)).HorizontalAlignment = -4108
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 2)).Borders(7).LineStyle = 3
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 2)).Borders(7).weight = 3
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 30)).Borders(8).LineStyle = 3
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 30)).Borders(8).weight = 3
sheet.Range(sheet.cells(rowsNum, 30),sheet.cells(rowsNum+3, 30)).Borders(10).LineStyle = 3
sheet.Range(sheet.cells(rowsNum, 30),sheet.cells(rowsNum+3, 30)).Borders(10).weight = 3
sheet.Range(sheet.cells(rowsNum+3, 2),sheet.cells(rowsNum+3, 30)).Borders(9).LineStyle = 3
sheet.Range(sheet.cells(rowsNum+3, 2),sheet.cells(rowsNum+3, 30)).Borders(9).weight = 3
sheet.cells(rowsNum, 2) = "####公司"
sheet.cells(rowsNum, 2).Interior.ColorIndex=35
sheet.cells(rowsNum, 2).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+1, 8)).Merge
sheet.cells(rowsNum, 9) = "系统名"
sheet.cells(rowsNum, 9).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 12)).Merge
sheet.cells(rowsNum, 13) = "子系统名"
sheet.cells(rowsNum, 13).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 13),sheet.cells(rowsNum, 16)).Merge
sheet.cells(rowsNum, 17) = "####项目-DB设计书"
sheet.cells(rowsNum, 17).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 17),sheet.cells(rowsNum+1, 30)).Merge
rowsNum = rowsNum + 1
sheet.cells(rowsNum, 9) = "####"
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 12)).Merge
sheet.cells(rowsNum, 13) = "####平台"
sheet.Range(sheet.cells(rowsNum, 13),sheet.cells(rowsNum, 16)).Merge
rowsNum = rowsNum + 1
sheet.cells(rowsNum, 2) = "版 数"
sheet.cells(rowsNum, 2).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 8)).Merge
sheet.cells(rowsNum, 9) = "章 节"
sheet.cells(rowsNum, 9).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 16)).Merge
sheet.cells(rowsNum, 17) = "改版日"
sheet.cells(rowsNum, 17).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 17),sheet.cells(rowsNum, 20)).Merge
sheet.cells(rowsNum, 21) = "改版者"
sheet.cells(rowsNum, 21).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 21),sheet.cells(rowsNum, 23)).Merge
sheet.cells(rowsNum, 24) = "作成日"
sheet.cells(rowsNum, 24).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 24),sheet.cells(rowsNum, 27)).Merge
sheet.cells(rowsNum, 28) = "作成者"
sheet.cells(rowsNum, 28).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 28),sheet.cells(rowsNum, 30)).Merge
rowsNum = rowsNum + 1
sheet.cells(rowsNum, 2) = "V1.0"
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 8)).Merge
sheet.cells(rowsNum, 9) = "目录"
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 16)).Merge
sheet.cells(rowsNum, 17) = Format_Time(Now(),2)
sheet.Range(sheet.cells(rowsNum, 17),sheet.cells(rowsNum, 20)).Merge
sheet.cells(rowsNum, 21) = "####"
sheet.Range(sheet.cells(rowsNum, 21),sheet.cells(rowsNum, 23)).Merge
sheet.cells(rowsNum, 24) = Format_Time(Now(),2)
sheet.Range(sheet.cells(rowsNum, 24),sheet.cells(rowsNum, 27)).Merge
sheet.cells(rowsNum, 28) = "####"
sheet.Range(sheet.cells(rowsNum, 28),sheet.cells(rowsNum, 30)).Merge
rowsNum = rowsNum + 1
fristDataRows = rowsNum + 1
sheet.Rows(rowsNum).RowHeight = 6
rowsNum = rowsNum + 4
sheet.cells(rowsNum, 3) = "- 目录 -"
rowsNum = rowsNum + 1
' For each table
Dim tab
Dim count
count = 0
For Each tab In mdl.tables
If IsObject(tab) Then
rowsNum = rowsNum + 1
count = count + 1
sheet.cells(rowsNum, 3) = tab.code
sheet.cells(rowsNum, 27) = count
sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 27)).Borders(9).LineStyle = 3
sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 27)).Borders(9).weight = 1
End If
Next
sheet.Range(sheet.cells(fristDataRows, 2),sheet.cells(fristDataRows+60, 30)).Interior.ColorIndex=2
sheet.Range(sheet.cells(fristDataRows, 2),sheet.cells(fristDataRows+60, 2)).Borders(7).LineStyle = 3
sheet.Range(sheet.cells(fristDataRows, 2),sheet.cells(fristDataRows+60, 2)).Borders(7).weight = 3
sheet.Range(sheet.cells(fristDataRows, 2),sheet.cells(fristDataRows, 30)).Borders(8).LineStyle = 3
sheet.Range(sheet.cells(fristDataRows, 2),sheet.cells(fristDataRows, 30)).Borders(8).weight = 3
sheet.Range(sheet.cells(fristDataRows, 30),sheet.cells(fristDataRows+60, 30)).Borders(10).LineStyle = 3
sheet.Range(sheet.cells(fristDataRows, 30),sheet.cells(fristDataRows+60, 30)).Borders(10).weight = 3
sheet.Range(sheet.cells(fristDataRows+60, 2),sheet.cells(fristDataRows+60, 30)).Borders(9).LineStyle = 3
sheet.Range(sheet.cells(fristDataRows+60, 2),sheet.cells(fristDataRows+60, 30)).Borders(9).weight = 3
End Sub
'-----------------------------------------------------------------------------
' ShowFristSheet
'-----------------------------------------------------------------------------
Sub ShowFristSheet(sheet)
' Show tables of the current model/package
Dim rowsNum
dim fristDataRows
rowsNum=1
output "[line(131) info]: 目录程序 begin"
sheet.Rows.RowHeight = 15
sheet.Rows(1).RowHeight = 6
rowsNum = rowsNum + 1
sheet.Columns.ColumnWidth = 3
sheet.Columns(1).ColumnWidth = 1
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 30)).Borders.LineStyle = 1
sheet.Columns.Font.Size = 10
sheet.Columns.Font.Name = "SimSun"
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 30)).Font.Size = 10.5
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 30)).HorizontalAlignment = -4108
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 2)).Borders(7).LineStyle = 3
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 2)).Borders(7).weight = 3
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 30)).Borders(8).LineStyle = 3
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 30)).Borders(8).weight = 3
sheet.Range(sheet.cells(rowsNum, 30),sheet.cells(rowsNum+3, 30)).Borders(10).LineStyle = 3
sheet.Range(sheet.cells(rowsNum, 30),sheet.cells(rowsNum+3, 30)).Borders(10).weight = 3
sheet.Range(sheet.cells(rowsNum+3, 2),sheet.cells(rowsNum+3, 30)).Borders(9).LineStyle = 3
sheet.Range(sheet.cells(rowsNum+3, 2),sheet.cells(rowsNum+3, 30)).Borders(9).weight = 3
sheet.cells(rowsNum, 2) = "####公司"
sheet.cells(rowsNum, 2).Interior.ColorIndex=35
sheet.cells(rowsNum, 2).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+1, 8)).Merge
sheet.cells(rowsNum, 9) = "系统名"
sheet.cells(rowsNum, 9).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 12)).Merge
sheet.cells(rowsNum, 13) = "子系统名"
sheet.cells(rowsNum, 13).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 13),sheet.cells(rowsNum, 16)).Merge
sheet.cells(rowsNum, 17) = "####项目-DB设计书"
sheet.cells(rowsNum, 17).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 17),sheet.cells(rowsNum+1, 30)).Merge
rowsNum = rowsNum + 1
sheet.cells(rowsNum, 9) = "####"
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 12)).Merge
sheet.cells(rowsNum, 13) = "####平台"
sheet.Range(sheet.cells(rowsNum, 13),sheet.cells(rowsNum, 16)).Merge
rowsNum = rowsNum + 1
sheet.cells(rowsNum, 2) = "版 数"
sheet.cells(rowsNum, 2).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 8)).Merge
sheet.cells(rowsNum, 9) = "章 节"
sheet.cells(rowsNum, 9).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 16)).Merge
sheet.cells(rowsNum, 17) = "改版日"
sheet.cells(rowsNum, 17).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 17),sheet.cells(rowsNum, 20)).Merge
sheet.cells(rowsNum, 21) = "改版者"
sheet.cells(rowsNum, 21).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 21),sheet.cells(rowsNum, 23)).Merge
sheet.cells(rowsNum, 24) = "作成日"
sheet.cells(rowsNum, 24).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 24),sheet.cells(rowsNum, 27)).Merge
sheet.cells(rowsNum, 28) = "作成者"
sheet.cells(rowsNum, 28).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 28),sheet.cells(rowsNum, 30)).Merge
rowsNum = rowsNum + 1
sheet.cells(rowsNum, 2) = "V1.0"
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 8)).Merge
sheet.cells(rowsNum, 9) = "封面"
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 16)).Merge
sheet.cells(rowsNum, 17) = Format_Time(Now(),2)
sheet.Range(sheet.cells(rowsNum, 17),sheet.cells(rowsNum, 20)).Merge
sheet.cells(rowsNum, 21) = "####"
sheet.Range(sheet.cells(rowsNum, 21),sheet.cells(rowsNum, 23)).Merge
sheet.cells(rowsNum, 24) = Format_Time(Now(),2)
sheet.Range(sheet.cells(rowsNum, 24),sheet.cells(rowsNum, 27)).Merge
sheet.cells(rowsNum, 28) = "####"
sheet.Range(sheet.cells(rowsNum, 28),sheet.cells(rowsNum, 30)).Merge
rowsNum = rowsNum + 1
fristDataRows = rowsNum + 1
sheet.Rows(rowsNum).RowHeight = 6
rowsNum = rowsNum + 23
sheet.cells(rowsNum, 2) = "#### 项目"
sheet.cells(rowsNum, 2).Font.Size = 28
sheet.cells(rowsNum, 2).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+4, 30)).Merge
sheet.cells(rowsNum, 2).HorizontalAlignment = -4108
rowsNum = rowsNum + 8
sheet.cells(rowsNum, 2) = "- DB设计书 -"
sheet.cells(rowsNum, 2).Font.Size = 28
sheet.cells(rowsNum, 2).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+4, 30)).Merge
sheet.cells(rowsNum, 2).HorizontalAlignment = -4108
rowsNum = rowsNum + 6
sheet.cells(rowsNum, 2) = "Ver. 1.0"
sheet.cells(rowsNum, 2).Font.Size = 28
sheet.cells(rowsNum, 2).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+4, 30)).Merge
sheet.cells(rowsNum, 2).HorizontalAlignment = -4108
sheet.Range(sheet.cells(fristDataRows, 2),sheet.cells(fristDataRows+60, 30)).Interior.ColorIndex=2
sheet.Range(sheet.cells(fristDataRows, 2),sheet.cells(fristDataRows+60, 2)).Borders(7).LineStyle = 3
sheet.Range(sheet.cells(fristDataRows, 2),sheet.cells(fristDataRows+60, 2)).Borders(7).weight = 3
sheet.Range(sheet.cells(fristDataRows, 2),sheet.cells(fristDataRows, 30)).Borders(8).LineStyle = 3
sheet.Range(sheet.cells(fristDataRows, 2),sheet.cells(fristDataRows, 30)).Borders(8).weight = 3
sheet.Range(sheet.cells(fristDataRows, 30),sheet.cells(fristDataRows+60, 30)).Borders(10).LineStyle = 3
sheet.Range(sheet.cells(fristDataRows, 30),sheet.cells(fristDataRows+60, 30)).Borders(10).weight = 3
sheet.Range(sheet.cells(fristDataRows+60, 2),sheet.cells(fristDataRows+60, 30)).Borders(9).LineStyle = 3
sheet.Range(sheet.cells(fristDataRows+60, 2),sheet.cells(fristDataRows+60, 30)).Borders(9).weight = 3
End Sub
'-----------------------------------------------------------------------------
' ShowSecondSheet
'-----------------------------------------------------------------------------
Sub ShowSecondSheet(sheet)
' Show tables of the current model/package
Dim rowsNum
dim colNum
dim fristDataRows
rowsNum=1
colNum = 1
output "[line(131) info]: 目录程序 begin"
sheet.Rows.RowHeight = 15
sheet.Rows(1).RowHeight = 6
rowsNum = rowsNum + 1
sheet.Columns.ColumnWidth = 3
sheet.Columns(1).ColumnWidth = 1
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 30)).Borders.LineStyle = 1
sheet.Columns.Font.Size = 10
sheet.Columns.Font.Name = "SimSun"
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 30)).Font.Size = 10.5
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 30)).HorizontalAlignment = -4108
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 2)).Borders(7).LineStyle = 3
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+3, 2)).Borders(7).weight = 3
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 30)).Borders(8).LineStyle = 3
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 30)).Borders(8).weight = 3
sheet.Range(sheet.cells(rowsNum, 30),sheet.cells(rowsNum+3, 30)).Borders(10).LineStyle = 3
sheet.Range(sheet.cells(rowsNum, 30),sheet.cells(rowsNum+3, 30)).Borders(10).weight = 3
sheet.Range(sheet.cells(rowsNum+3, 2),sheet.cells(rowsNum+3, 30)).Borders(9).LineStyle = 3
sheet.Range(sheet.cells(rowsNum+3, 2),sheet.cells(rowsNum+3, 30)).Borders(9).weight = 3
sheet.cells(rowsNum, 2) = "####公司"
sheet.cells(rowsNum, 2).Interior.ColorIndex=35
sheet.cells(rowsNum, 2).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum+1, 8)).Merge
sheet.cells(rowsNum, 9) = "系统名"
sheet.cells(rowsNum, 9).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 12)).Merge
sheet.cells(rowsNum, 13) = "子系统名"
sheet.cells(rowsNum, 13).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 13),sheet.cells(rowsNum, 16)).Merge
sheet.cells(rowsNum, 17) = "####项目-DB设计书"
sheet.cells(rowsNum, 17).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 17),sheet.cells(rowsNum+1, 30)).Merge
rowsNum = rowsNum + 1
sheet.cells(rowsNum, 9) = "####"
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 12)).Merge
sheet.cells(rowsNum, 13) = "####平台"
sheet.Range(sheet.cells(rowsNum, 13),sheet.cells(rowsNum, 16)).Merge
rowsNum = rowsNum + 1
sheet.cells(rowsNum, 2) = "版 数"
sheet.cells(rowsNum, 2).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 8)).Merge
sheet.cells(rowsNum, 9) = "章 节"
sheet.cells(rowsNum, 9).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 16)).Merge
sheet.cells(rowsNum, 17) = "改版日"
sheet.cells(rowsNum, 17).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 17),sheet.cells(rowsNum, 20)).Merge
sheet.cells(rowsNum, 21) = "改版者"
sheet.cells(rowsNum, 21).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 21),sheet.cells(rowsNum, 23)).Merge
sheet.cells(rowsNum, 24) = "作成日"
sheet.cells(rowsNum, 24).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 24),sheet.cells(rowsNum, 27)).Merge
sheet.cells(rowsNum, 28) = "作成者"
sheet.cells(rowsNum, 28).Font.Bold=true
sheet.Range(sheet.cells(rowsNum, 28),sheet.cells(rowsNum, 30)).Merge
rowsNum = rowsNum + 1
sheet.cells(rowsNum, 2) = "V1.0"
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 8)).Merge
sheet.cells(rowsNum, 9) = "改版履历"
sheet.Range(sheet.cells(rowsNum, 9),sheet.cells(rowsNum, 16)).Merge
sheet.cells(rowsNum, 17) = Format_Time(Now(),2)
sheet.Range(sheet.cells(rowsNum, 17),sheet.cells(rowsNum, 20)).Merge
sheet.cells(rowsNum, 21) = "####"
sheet.Range(sheet.cells(rowsNum, 21),sheet.cells(rowsNum, 23)).Merge
sheet.cells(rowsNum, 24) = Format_Time(Now(),2)
sheet.Range(sheet.cells(rowsNum, 24),sheet.cells(rowsNum, 27)).Merge
sheet.cells(rowsNum, 28) = "####"
sheet.Range(sheet.cells(rowsNum, 28),sheet.cells(rowsNum, 30)).Merge
rowsNum = rowsNum + 1
fristDataRows = rowsNum + 1
sheet.Range(sheet.cells(fristDataRows, 2),sheet.cells(fristDataRows+60, 30)).Interior.ColorIndex=2
sheet.Range(sheet.cells(fristDataRows, 2),sheet.cells(fristDataRows+60, 2)).Borders(7).LineStyle = 3
sheet.Range(sheet.cells(fristDataRows, 2),sheet.cells(fristDataRows+60, 2)).Borders(7).weight = 3
sheet.Range(sheet.cells(fristDataRows, 2),sheet.cells(fristDataRows, 30)).Borders(8).LineStyle = 3
sheet.Range(sheet.cells(fristDataRows, 2),sheet.cells(fristDataRows, 30)).Borders(8).weight = 3
sheet.Range(sheet.cells(fristDataRows, 30),sheet.cells(fristDataRows+60, 30)).Borders(10).LineStyle = 3
sheet.Range(sheet.cells(fristDataRows, 30),sheet.cells(fristDataRows+60, 30)).Borders(10).weight = 3
sheet.Range(sheet.cells(fristDataRows+60, 2),sheet.cells(fristDataRows+60, 30)).Borders(9).LineStyle = 3
sheet.Range(sheet.cells(fristDataRows+60, 2),sheet.cells(fristDataRows+60, 30)).Borders(9).weight = 3
sheet.Rows(rowsNum).RowHeight = 6
rowsNum = rowsNum + 4
sheet.cells(rowsNum, colNum+2) = "'- 改版履历 -"
rowsNum = rowsNum + 2
sheet.cells(rowsNum, 3) = "项"
sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 4)).Merge
sheet.cells(rowsNum, 5) = "版数"
sheet.Range(sheet.cells(rowsNum, 5),sheet.cells(rowsNum, 7)).Merge
sheet.cells(rowsNum, 8) = "年月日"
sheet.Range(sheet.cells(rowsNum, 8),sheet.cells(rowsNum, 11)).Merge
sheet.cells(rowsNum, 12) = "作成者"
sheet.Range(sheet.cells(rowsNum, 12),sheet.cells(rowsNum, 15)).Merge
sheet.cells(rowsNum, 16) = "承认者"
sheet.Range(sheet.cells(rowsNum, 16),sheet.cells(rowsNum, 18)).Merge
sheet.cells(rowsNum, 19) = "内容"
sheet.Range(sheet.cells(rowsNum, 19),sheet.cells(rowsNum, 28)).Merge
sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 28)).Borders.LineStyle = 1
sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 28)).Interior.ColorIndex=15
sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 28)).HorizontalAlignment = -4108
rowsNum = rowsNum + 1
sheet.cells(rowsNum, 3) = "1"
sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 4)).Merge
sheet.cells(rowsNum, 5) = "第1.0版"
sheet.Range(sheet.cells(rowsNum, 5),sheet.cells(rowsNum, 7)).Merge
sheet.cells(rowsNum, 8) = Format_Time(Now(),2)
sheet.Range(sheet.cells(rowsNum, 8),sheet.cells(rowsNum, 11)).Merge
sheet.cells(rowsNum, 12) = "####"
sheet.Range(sheet.cells(rowsNum, 12),sheet.cells(rowsNum, 15)).Merge
sheet.cells(rowsNum, 16) = "####"
sheet.Range(sheet.cells(rowsNum, 16),sheet.cells(rowsNum, 18)).Merge
sheet.cells(rowsNum, 19) = ""
sheet.Range(sheet.cells(rowsNum, 19),sheet.cells(rowsNum, 28)).Merge
sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 28)).Borders.LineStyle = 1
sheet.Range(sheet.cells(rowsNum, 3),sheet.cells(rowsNum, 28)).Interior.ColorIndex=2
End Sub
运行
弹出execl文档,自行保存即可。格式可以根据需求去调整vbs代码。也可以保存后自行编辑execl。