Foxtable(狐表)用户栏目专家坐堂 → [求助]如何在汇总模式移除指定的分组行


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

主题:[求助]如何在汇总模式移除指定的分组行

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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
[求助]如何在汇总模式移除指定的分组行  发帖心情 Post By:2019/4/15 11:50:00 [只看该作者]

Dim t As Table = e.Form.Controls("Table1").Table
Dim g As Subtotalgroup
t.SubtotalGroups.Clear()

g = New Subtotalgroup '定义一个新的分组
g.Aggregate = AggregateEnum.Sum '统计类型为求和
g.GroupOn = "母卷号" '分组列为客户
g.TotalOn = "重量" '统计数量和金额列
g.Caption = "{0} 小计" '设置标题
t.SubtotalGroups.Add(g) '加到分组集合中

g = New Subtotalgroup 
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "牌号"
g.TotalOn = "重量"
g.Caption = "{0} 小计"
t.SubtotalGroups.Add(g)
'定义总计分组
g = New Subtotalgroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "*" '注意总计分组用符号*表示.
g.TotalOn = "重量"
g.Caption = "总计"
t.SubtotalGroups.Add(g)
t.Subtotal() '生成汇总模式


Dim r As Row
For i As Integer = 0 To t.Rows.Count(True) - 1
    r = t.Rows(i,True)
    If r.IsGroup And r("牌号").Contains("304")  And r("牌号").Contains("小计")
        r.Remove
    End If
Next

代码的目的是移除分组行是 "304  小计" 的这一行,上面代码无效,请问老师如何解决,谢谢!
[此贴子已经被作者于2019/4/15 11:50:52编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/15 12:13:00 [只看该作者]

参考

 

Dim t As Table = Tables("表A")
For i As Integer = 0 To t.Rows.count(True) -1
    If t.Rows(i).IsGroup Then
        t.grid.Rows(i+t.HeaderRows).visible = False
    End If
Next


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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2019/4/15 12:55:00 [只看该作者]

老师,这个方法只是隐藏,导出到EXCEL后这个隐藏的行还在,只是也在EXCEL中隐藏了,能在导出后也不要有这个行吗?而不是隐藏

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/15 12:58:00 [只看该作者]

以下是引用huangfanzi在2019/4/15 12:55:00的发言:
老师,这个方法只是隐藏,导出到EXCEL后这个隐藏的行还在,只是也在EXCEL中隐藏了,能在导出后也不要有这个行吗?而不是隐藏

 

这个没办法。要不你导出后,再写代码打开excel,删除对应的行。


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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2019/4/15 13:07:00 [只看该作者]

我看了帮助文件中Excel与VBA这一章,没有找到 Find 这类的方法,我如何定位到 某一行的第一列内容是 “304  小计”呢,用遍历查找吗?
下面是我用的方法,才200条数据就用了近8秒,效率不行啊!

Dim t As Table = e.Form.Controls("Table1").Table
Dim dlg As New SaveFileDialog '定义一个新的SaveFileDialog
dlg.Filter= "Excel文件|*.xls" '设置筛选器
dlg.FileName = "测试"
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    t.SaveExcel(dlg.FileName, "测试")  '保存文件
End If
Dim n As Integer = t.Rows.Count(True)
Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(dlg.FileName)
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
Dim Rg As MSExcel.Range
Dim Rg1 As MSExcel.Range

For i As Integer = 1 To n
        Rg = Ws.Cells(i,1)
        If Rg.value = "SUS304 小计"
            Rg1 = Ws.Rows(i & ":" & i)
            Rg1.Delete(MSExcel.XlDirection.xlUp) '下面的单元格上移
        End If
Next
App.Visible = True
[此贴子已经被作者于2019/4/15 14:05:18编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/15 15:20:00 [只看该作者]

方法一:可以判断行的高度吧?如果行的高度等于0小于10,就删除。

 

方法二:可以用比如 Ws.Cells(i,1).text.contains(" 小计") 这样比较吧?


 回到顶部