以文本方式查看主题 - 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 |