以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [分享]第5种创建表结构方法:根据Excel的表结构生成内部表 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=139539) |
|
-- 作者:shenyl0211 -- 发布时间:2019/8/15 10:56:00 -- [分享]第5种创建表结构方法:根据Excel的表结构生成内部表 《Foxtable数据库应用开发宝典》介绍了4种创建表结构的方法,这里介绍第5种,是最好的。理由是:用户可以看到的表结构不是开发者所能决定的,所以,创建表前必须征求用户的意见,此时的征求意见内容不仅是表名、列名、标题、类型、长度、表达式,还有顺序,显然,这些内容应该先在Excel表中编写、修改、排序、定稿。直接利用已经完善的、完整的Excel形式的表结构,再结合ADOXBuilder,就可以快速创建表结构。 1
下列代码所用的Excel表格形式为:A列表名、B列列名、C列标题、D列类型、E列长度、F列表达式。 2
创建新项目,在命令窗口执行下列代码动态创建新的表和列。 3
重新打开项目,查看添加结果。 4
后续完善工作:需改为数字开头的列用手工或代码设置标题;增加或插入表达式列、长整数列。 Dim filename As String Dim dlg As New OpenFileDialog dlg.Filter = "Excel文件|*.xls;*.xlsx" If dlg.ShowDialog = DialogResult.OK Then filename = dlg.FileName Else Return Nothing End If Dim Builder As New ADOXBuilder Dim tbl As ADOXTable Dim App As New MSExcel.Application Dim book As MSExcel.WorkBook =
App.WorkBooks.Open(filename) Dim ws As MSExcel.WorkSheet =
book.WorkSheets(1) Dim rg As MSExcel.Range = ws.usedRange Dim str1,str2,bm,lx As String Dim i,k As Integer Builder.Open() app.visible = False For i = 1 To Rg.Rows.Count Str1 = Ws.Cells(i,1).value Str2 = Ws.Cells(i,2).value If str1 = Nothing AndAlso
str2 = Nothing Then \'空行 Continue For End If If str2 = Nothing Then \'第二列空则就是表名所在行,str1为表名 If bm IsNot
Nothing Then
Builder.AddTable(tbl) \'用AddTable将创建的表增加到Builder中 End If bm =
str1.trim.ToUpper tbl =
Builder.NewTable(bm) \'用NewTable方法创建表 Else \'为列名 str1 =
Ws.Cells(i,6).value If str1 IsNot
Nothing Then \'是表达式列
Continue For End If Lx =
Ws.Cells(i,4).value Select Case
lx.trim.ToLower
Case "text"
tbl.AddColumn(str2,ADOXType.Text)
Case "datetime"
tbl.AddColumn(str2,ADOXType.DateTime)
Case "boolean"
tbl.AddColumn(str2,ADOXType.Boolean)
Case "single"
tbl.AddColumn(str2,ADOXType.Single)
Case "double"
tbl.AddColumn(str2,ADOXType.Double)
Case "integer"
tbl.AddColumn(str2,ADOXType.Integer)
Case "string"
K = Ws.Cells(i,5).value
tbl.AddColumn(str2,ADOXType.String,k)
Case "long"
Continue For End Select End If Next Builder.AddTable(tbl) Builder.Close() [此贴子已经被作者于2019/8/19 15:19:10编辑过]
|
|
-- 作者:有点蓝 -- 发布时间:2019/8/15 11:36:00 -- 多谢分享 |
|
-- 作者:y2287958 -- 发布时间:2019/8/15 12:13:00 -- 鼓励一下 |
|
-- 作者:百灵 -- 发布时间:2019/8/15 20:54:00 -- http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=95427这种方式更好 |
|
-- 作者:shenyl0211 -- 发布时间:2019/8/16 10:48:00 --
[此贴子已经被作者于2019/8/16 10:55:09编辑过]
|
|
-- 作者:蓝才文百 -- 发布时间:2019/11/15 16:28:00 -- 强大! |
|
-- 作者:wei0769 -- 发布时间:2019/11/16 10:12:00 -- 谢谢分享 |
|
-- 作者:ychsit -- 发布时间:2019/11/16 10:56:00 -- 学习 |