编码导出折叠模式数据
编码导出折叠模式的数据,并根据行的从属关系自动缩进, 关键在于Row的GetValue方法和Hierarchy属性。
我们来看一个例子:
1、打开CaseStudy目录下的示例文件: 折叠模式.Table
2、选择表"项目"表,并打开折叠模式。
3、在命令窗口执行以下代码:
Dim
dt As
Table = Tables("项目")
Dim
nms() As
String = {"级码","项目","数量","单价","金额"}
'要导出的列名
Dim
szs() As
Integer = {150,200,80,80,120}
'对应的列宽
Dim
Book As
New XLS.Book
'定义一个Excel工作簿
Dim
Sheet As
XLS.Sheet =
Book.Sheets(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 nms(c) 
= "金额"
Then
                Sheet(r 
+ 1, c).Value 
= rw.GetValue("金额")
            ElseIf 
nms(c) = 
"项目"
                Sheet(r 
+ 1, c).Value  
= new String(" 
", rw.Hierarchy 
* 2) &
rw("项目")
            Else
                Sheet(r 
+ 1, c).Value 
= rw(nms(c))
            End If
        Else
            Sheet(r 
+ 1, c).Value 
= rw(nms(c))
        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
提示:金额列的值必须用GetValue方法获取,常规方法获取分组行金额列的值,返回的是0。
得到的Excel表如下,项目列已经按照行的从属关系进行了自动缩进:
