Foxtable(狐表)用户栏目专家坐堂 → [求助] 折叠模式下,有条件的导出数据


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

主题:[求助] 折叠模式下,有条件的导出数据

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


加好友 发短信
等级:二尾狐 帖子:580 积分:5598 威望:0 精华:0 注册:2018/11/6 10:54:00
[求助] 折叠模式下,有条件的导出数据  发帖心情 Post By:2022/7/6 14:16:00 [只看该作者]

表在折叠模式下,有的行为1层,有的行为2至3层,现在只导出没有子行的行和有子行的第二层(有子行只导出第二层,第一层或第三层忽略),不想在导出的表中有空白行,
按帮助,修改了一下,出错http://www.foxtable.com/webhelp/topics/3435.htm

Dim dt As Table = Tables("调度排工_Table1")
Dim nms() As String = {"编号","用车日期","车辆来源","车辆牌照","司机","指挥","车型","计费车型","用车单位","二级单位或地点","作业内容","联系人","联系电话","到场时间","预计用时","备注"} '要导出的列名
Dim szs() As Integer = {200,100,80,80,80,80,80,80,100,100,150,80,80,80,80,150} '对应的列宽
Dim Book As New XLS.Book '定义一个Excel工作簿
Dim Sheet As XLS.Sheet = Book.Sheets(0) '引用工作簿的第一个工作表
Dim i As Integer = 0 '记录忽略的行数,折叠模式下只导出没有子行的第一层和第二层,其它忽略.
For c As Integer = 0 To nms.length -1
    Sheet(0, c).Value = nms(c) '指定列标题
    Sheet.Cols(c).Width = szs(c) '指定列宽
Next
For r As Integer = 0 To dt.Rows.Count - 1 '填入数据
    Dim rw As Row  = dt.rows(r)
    For c As Integer = 0 To nms.length -1
        If dt.GridTreeVisible Then '如果处于折叠模式
            '==================选择性导出行==========================
            If rw.Hierarchy=0 And rw.HasChild()=False  Or rw.Hierarchy=1  Then  '没有子行的第一层和第二层,直接导出
                Sheet(r - i + 1,c).Value = rw(nms(c))  ‘出错位置
            Else
                i += 1
                Continue For  '其它忽略
            End If
            '========================================================
        End If
    Next
Next
Dim dlg As New SaveFileDialog '定义一个新的SaveFileDialog
dlg.Filter= "Excel文件|*.xls" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then
    Book.Save(dlg.FileName)
    Dim Proc As New Process
    Proc.File = dlg.FileName
    Proc.Start()
End If
[此贴子已经被作者于2022/7/6 14:17:32编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:112527 积分:572933 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/7/6 14:27:00 [只看该作者]

dim idx as integer = 1
For r As Integer = 0 To dt.Rows.Count - 1 '填入数据
    Dim rw As Row  = dt.rows(r)
    For c As Integer = 0 To nms.length -1
        If dt.GridTreeVisible Then '如果处于折叠模式
            '==================选择性导出行==========================
            If rw.Hierarchy=0 And rw.HasChild()=False  Or rw.Hierarchy=1  Then  '没有子行的第一层和第二层,直接导出
                Sheet(idx,c).Value = rw(nms(c))  ‘出错位置
idx += 1
            End If
            '========================================================
        End If
    Next
Next

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


加好友 发短信
等级:二尾狐 帖子:580 积分:5598 威望:0 精华:0 注册:2018/11/6 10:54:00
  发帖心情 Post By:2022/7/6 15:49:00 [只看该作者]

谢谢,但是执行逻辑要调整一下,第二个遍历在判断之后执行

For r As Integer = 0 To dt.Rows.Count - 1 '填入数据
    Dim rw As Row  = dt.rows(r)
    If dt.GridTreeVisible Then '如果处于折叠模式
        '==================选择性导出行==========================
        If rw.Hierarchy=0 And rw.HasChild()=False  Or rw.Hierarchy=1  Then  '没有子行的第一层和第二层,直接导出
            For c As Integer = 0 To nms.length -1
                Sheet(idx,c).Value = rw(nms(c))
            Next
            idx += 1
        End If
        '========================================================
    End If
Next

 回到顶部