以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 无法动态增加列? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=128860) |
||||
-- 作者:wmh -- 发布时间:2018/12/17 0:47:00 -- 无法动态增加列? 老师,我想制作一个自定义函数动态增加列。我先将一个表的列全部删除,然后增加列,代码如下 Dim tblname As String=args(0) Dim colname As String=args(1) Dim Col_Length As Integer=args(2) DataTables.Unload(tblname ) \'卸载表C DataTables.load(tblname) Dim Builder As New ADOXBuilder Builder.Open() \'打开ADOXBuilder With Builder.Tables(tblname) .AddColumn(colname ,ADOXType.String, Col_Length ) \'增加字符型列,长度指定为250 End With Builder.Close() \'关闭ADOXBuilder DataTables.Unload(tblname ) \'卸载表C DataTables.load(tblname) 代码运行后,没有增加列。错在哪里了呢? 烦请老师指点。 谢谢! |
||||
-- 作者:有点甜 -- 发布时间:2018/12/17 9:01:00 -- 我这样测试没问题
Dim tblname As String="表A" |
||||
-- 作者:wmh -- 发布时间:2018/12/17 10:20:00 -- 老师,我将表A的所有列删除后执行的上述代码。是不是不能删除所列? |
||||
-- 作者:有点甜 -- 发布时间:2018/12/17 10:35:00 -- 以下是引用wmh在2018/12/17 10:20:00的发言:
老师,我将表A的所有列删除后执行的上述代码。是不是不能删除所列?
贴出你写的完整代码。 |
||||
-- 作者:wmh -- 发布时间:2018/12/17 12:58:00 -- 老师,我用datacols 的add 方法添加临时列,还是不行。代码是在双击treeview1后运行,代码如下: Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1") Dim nd As WinForm.TreeNode=trv.selectedNode Dim str As String Dim j As Integer str=nd.Level If str<>"1" Then Return End If \'===========当双击的是第一级的时候,才调Excel. Dim pth As String="d:\\出图\\" & nd.ParentNode.name \' & nd.Name Dim tbl As Table=Tables("excel") \'messagebox.show(1) Dim dr As DataRow \' ======找出字符串,根据Excel的列名称,改变表的列名称. dr=DataTables("文档注册表").Find("[文档名称] = \'" & nd.ParentNode.name & "\' And [sheet]=\'" & nd.name & "\'") \' ====找出列名称数组,狐表中的文档注册表中,每个标准的行的键值,是需要显示的列名称 数组 Dim i As Integer i=Tables("文档注册表").findrow(dr) Dim sp As String=Tables("文档注册表").Rows(i)("键值") Dim sz() As String=sp.split("|") Dim va=Functions.Execute("ExcelToArry",pth,nd.name) Dim Endrow As Integer=ubound(va,1) Dim Endcol As Integer=ubound(va,2) messagebox.show("endrow=" & Endrow & " endcol=" & Endcol ) Functions.Execute("Delete_Allcols","excel") messagebox.show("tbl.Cols.count= " & tbl.Cols.count) If tbl.Rows.count<Endrow Then Syscmd.Row.AddNews(Endrow-tbl.Rows.count) End If With DataTables("excel") For j=1 To sz.length If va(1,sz(j-1)) <>"" Then .DataCols.Add( "列" & j ,Gettype(String),250,"",va(1,sz(j-1))) messagebox.show("列标题=" & .datacols("列" & j).caption & " va(1,sz(j-1))=" & va(1,sz(j-1))) DataTables.Unload("excel") DataTables.load("excel") For i=2 To Endrow .dataRows(i-2)("列" & j).value=va(i,j) Next End If Next End With messagebox.show(2) With Tables("标准管理_Table1") .MergeMode = MergeModeEnum.Standard \'标准合并模式 .MergeCols.Clear() \'清除原来的合并列 .MergeCols.Add(tbl.Cols(0).name) \'加入要合并的列 .MergeCols.Add(tbl.Cols(1).name) \'加入要合并的列 .MergeCols.Add(tbl.Cols(2).name) \'加入要合并的 \' .MergeSort = tbl.Cols(0).name & "," & tbl.Cols(1).name & "," & tbl.Cols(2).name \'设置合并模式下的排序方式 .AllowMerge = True \'启用合并模式 End With --------------------------------------------------------------------- 我编写的自定义函数 Delete_Allcols 代码如下: Dim tblname As String=args(0) DataTables.Unload(tblname) DataTables.load(tblname) Dim j As Integer Dim Builder As New ADOXBuilder Builder.Open() \'打开ADOXBuilder With Builder.Tables(tblname) For Each c As Col In Tables(tblname).Cols .DeleteColumn(c.name) j=j+1 Next End With Builder.Close() \'关闭ADOXBuilder DataTables.Unload(tblname) DataTables.load(tblname) Return j \'=======删除所有列 tblname是表名称.
|
||||
-- 作者:有点甜 -- 发布时间:2018/12/17 15:17:00 -- 1、是在删除列的时候报错,还是在增加列的时候报错?报什么错?
请先定位出错位置 http://www.foxtable.com/webhelp/scr/1485.htm
2、请做一个可以正常测试的实例发上来测试。 |