以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助] 折叠模式下,有条件的导出数据  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=178487)

--  作者:foxtablefanse
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间: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
--  发布时间: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