Foxtable(狐表)用户栏目专家坐堂 → 怎么实现遍历表列名并遍历赋值?


  共有3548人关注过本帖树形打印复制链接

主题:怎么实现遍历表列名并遍历赋值?

帅哥哟,离线,有人找我吗?
cnsjroom
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
怎么实现遍历表列名并遍历赋值?  发帖心情 Post By:2021/11/29 10:54:00 [只看该作者]

怎么实现遍历表列名并遍历赋值?

当前窗体有一个table11表 来源字段列   拟用来接收选择的textbox2中的excel表中的列名值  当有来源字段列后,怎么遍历textbox2中的excel表获取表行数据对应到排序这个表中各自的列呢?
当前代码如下:(已经实现获取列并生成对应的排序临时表,怎么获取excel表数据呢?)红色部分代码该怎么写呢?
Dim r As Row
Dim t As Table = e.Form.Controls("Table11").Table     '
Dim i As Integer
Dim Book As New XLS.Book(e.Form.Controls("TextBox2").value)
Dim Sheet As XLS.Sheet = Book.Sheets(e.sender.value)
t.StopRedraw
t.DataTable.DataRows.clear
For i = 0 To Sheet.Cols.count - 1
    If Sheet(0,i).text > ""
        r = t.AddNew()
        r("来源字段") = Sheet(0,i).Value
    End If
Next
t.ResumeRedraw

Dim Products As List(Of String)
Products = T.DataTable.GetValues("来源字段")
Dim dtb As New DataTableBuilder("排序")
For Each Product As String In Products
    If Product.Contains("交易金额") Then
        dtb.AddDef(Product, Gettype(Double), 32)
    Else
        dtb.AddDef(Product, Gettype(String), 32)
    End If
Next
dtb.Build()
MainTable=Tables("排序")

Tables("排序").stopRedraw
……
Tables("排序").ResumeRedraw
[此贴子已经被作者于2021/11/29 10:55:14编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110750 积分:563676 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/11/29 11:08:00 [只看该作者]

之前不是做过这个功能了吗?记录"来源字段"同时记录execl表里的列索引使用啊

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)之前不是做过这个功能了吗?记录"来源...  发帖心情 Post By:2021/11/29 12:46:00 [只看该作者]

已修正代码实现数据的匹配写入:

Dim r As Row
Dim t As Table = e.Form.Controls("Table11").Table    
Dim t1 As Table = e.Form.Controls("Table1").Table    '
Dim i As Integer
Dim Book As New XLS.Book(e.Form.Controls("TextBox2").value)
Dim Sheet As XLS.Sheet = Book.Sheets(e.sender.value)
t.StopRedraw
t.DataTable.DataRows.clear
For i = 0 To Sheet.Cols.count - 1
    If Sheet(0,i).text > ""
        r = t.AddNew()
        r("来源字段") = Sheet(0,i).Value
        r("接收字段") = Sheet(0,i).Value
        r("来源列数")=i
    End If
Next
t.ResumeRedraw

Dim Products As List(Of String)
Products = T.DataTable.GetValues("来源字段")
Dim dtb As New DataTableBuilder("排序")
For Each Product As String In Products
    If Product.Contains("交易金额") Then
        dtb.AddDef(Product, Gettype(Double), 32)
    Else
        dtb.AddDef(Product, Gettype(String), 255)
    End If
Next
dtb.Build()
MainTable=Tables("排序")
Dim str As String
Dim i1,j As Integer
Tables("排序").stopRedraw
For i1 = 1 To Sheet.Rows.Count -1
    
    Dim r1 As Row = Tables("排序").addnew
    For j = 0 To t.Rows.count - 1
        Dim ss As String  =Sheet(i1,t.Rows(j)("来源列数")).Value
        r1(t.Rows(j)("接收字段")) = ss.Replace(" ", "").Trim
    Next
Next
Tables("排序").ResumeRedraw

t1.DataSource =DataTables("排序")



[此贴子已经被作者于2021/11/29 13:46:25编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110750 积分:563676 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/11/29 13:31:00 [只看该作者]

t3.Table.DataSource =Tables("排序")
t3.Table.Sort=ss

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)t3.Table.DataSource =Tables("排序"...  发帖心情 Post By:2021/11/29 14:18:00 [只看该作者]

谢谢老师的耐心指导 


根据客户和日期排序,其中日期为降序,也就是相同客户的订单,最新的订单排在前面:

Tables("订单").Sort = "客户,日期 DESC"


根据上述帮助内容,我拟c9、10、11、2四个组合进行排序,前三个任意列内容保持原有排序,c2采用降序,怎么操作呢?

下述代码操作后是c9、10、11、2四个都是降序了


Dim c7 As WinForm.ComboBox = e.Form.Controls("ComboBox7")
Dim c9 As WinForm.ComboBox = e.Form.Controls("ComboBox9")
Dim c10 As WinForm.ComboBox = e.Form.Controls("ComboBox10")
Dim c11 As WinForm.ComboBox = e.Form.Controls("ComboBox01")
Dim c2 As WinForm.ComboBox = e.Form.Controls("ComboBox2")
Dim t3 As WinForm.Table = e.Form.Controls("Table3")
t3.Table.DataSource =DataTables("排序")
Dim ss As String

If c9.text<>"" Then
    ss = c9.text & ","
End If
If  c10.text<>"" Then
    ss = ss & c10.text & ","
End If
If  c11.text<>"" Then
    ss = ss & c11.text & ","
End If
If c2.text<>"" Then
    ss = ss & c2.text
End If

If  c7.text="降序" Then
    ss=ss & " desc"
Else If c7.text="升序" And c7.text="" Then
    ss=ss & " desc"
End If
'MessageBox.Show(ss)
Tables("排序").Sort=ss
t3.Table.Sort=ss

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110750 积分:563676 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/11/29 14:44:00 [只看该作者]

If c2.text<>"" Then
If  c7.text="降序" Then
    ss=ss & c2.text & " desc"
Else
    ss=ss  & c2.text
End If
End If
MessageBox.Show(ss)

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)If c2.text<>"" ThenIf  ...  发帖心情 Post By:2021/11/29 15:23:00 [只看该作者]

老师  根据你的指导  我得到排序的数据后 我用下面的方式导出Excel

tables(“排序”).saveExcel(“c:\\123.XLS”,“排序”)
导出得到的数据只有十二条    实际数据大于十二条

有没有办法修正显示全部数据呢

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110750 积分:563676 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/11/29 15:25:00 [只看该作者]

如果有筛选条件,去掉

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)如果有筛选条件,去掉  发帖心情 Post By:2021/11/29 15:53:00 [只看该作者]

没有设置筛选条件  直接是母本表进行排序后 将排序结果显示在table3副本表中  然后直接保存为Excel表   只有十二条数据 部分数据没有显示出来

如果用导出Excel的方式 可以导出表完整数据  但是导出得到的表格式和母本表格式不一样

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110750 积分:563676 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/11/29 16:01:00 [只看该作者]

不可能的,saveExcel只能导出tables(“排序”)看得到的数据,如果没有肯定被筛选掉了

 回到顶部