我的excel结构是这样的
然后要批量导入power designer生成GP数据库格式的PD文件
批量导入的脚本应该怎么改
Dim HaveExcel
Dim RQ
RQ = vbYes 'MsgBox("Is Excel Installed on your machine ?", vbYesNo + vbInformation, "Confirmation")
If RQ = vbYes Then
HaveExcel = True
' Open & Create Excel Document
Dim x1 '
Set x1 = CreateObject("Excel.Application")
x1.Workbooks.Open "C:\Users\123\Desktop\3.xlsx"
x1.Workbooks(1).Worksheets("sheet1").Activate
Else
HaveExcel = False
End If
a x1, mdl
sub a(x1,mdl)
dim rwIndex
dim tableName
dim colname
dim table
dim col
dim count
dim i
'on error Resume Next
For i = 1 To 20
For rwIndex = 1 To 1000 step 1
With x1.Workbooks(1).Worksheets("sheet"&i)
'MsgBox "生成数据表结构共计1 ="+CStr(.Cells(2,2).Value ), vbOK + vbInformation, "表"
If .Cells(rwIndex, 1).Value = "" Then
Exit For
End If
If .Cells(rwIndex, 3).Value = "" and rwIndex = 1 Then
set table = mdl.Tables.CreateNew
table.Name = UCase(.Cells(rwIndex , 1).Value & "(" & .Cells(rwIndex , 2).Value & ")")
table.Code = UCase(.Cells(rwIndex , 1).Value)
table.Comment = .Cells(rwIndex , 2).Value
count = count + 1
Else
colName = .Cells(rwIndex, 1).Value
set col = table.Columns.CreateNew
'MsgBox .Cells(rwIndex, 1).Value, vbOK + vbInformation, "列"
col.Name = UCase(.Cells(rwIndex, 1).Value)
'MsgBox col.Name, vbOK + vbInformation, "列"
col.Code = UCase(.Cells(rwIndex, 1).Value)
col.Comment = .Cells(rwIndex,3).Value
col.DataType = UCase(.Cells(rwIndex, 2).Value)
End If
End With
Next
Next
MsgBox "生成数据表结构共计" + CStr(count), vbOK + vbInformation, "表"
Exit Sub
End sub
1、对于这种需求,我一般考虑先在数据库中建表,再使用pd的逆向工程导表
2、如果要建表,可以根据你现在的表格构建建表语句类似下图所示:
其中的 I1 为表名提取,我看你的表名即为sheet名,其公式为
I1:=RIGHT(CELL("filename"),LEN(CELL("filename"))-FIND("]",CELL("filename")))
其他的单元格:
F1:=CONCATENATE("CREATE TABLE ", I1," (" )
F2:=CONCATENATE(A2," ",B2,IF(D2="否"," NOT ","")," NULL,")
中间的列直接拉公式即可
最后一行主键(我这里是F4):=CONCATENATE( " PRIMARY KEY( ", VLOOKUP("是",A1:C3,1,TRUE), " ) );")
复合主键手工完善,这个应该比较少
后面的COMMENT列
I2:=CONCATENATE("COMMENT COLUMN ", $I$1, ".",A3," is '",E3,"';")
下面的列拉公式即可
3、如果表多,建议直接将其他sheet中的表格内容直接复制到一个公式完整的表格中,再将表名直接复制到I2列,这样就可以直接生成建表及备注语句,可直接在数据库中建表,然后再使用PD的逆向工程即可