以文本方式查看主题

-  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=172052)

--  作者:huizhong
--  发布时间:2021/9/20 14:26:00
--  数据导出 - 列名称问题
老师,窗口中有一个副本表,以下是查询代码
    Dim DA1 As Date = e.Form.Controls("DateTimePicker1").VALUE
    Dim DA2 As Date = e.Form.Controls("DateTimePicker2").VALUE
    Dim b As New CrossTableBuilder("统计表1",DataTables("整车返利录入表"))
    b.Filter ="[开票日期] >= #" & DA1 & "# And [开票日期] <= #" & DA2 & "#"
    b.HGroups.AddDef("开票日期" ,DateGroupEnum.Day.None) \'添加客户列用于水平分组
    b.HGroups.AddDef("结算日期",DateGroupEnum.Day.None) \'添加客户列用于水平分组
    b.HGroups.AddDef("客户姓名") \'添加客户列用于水平分组
    b.HGroups.AddDef("车型") \'添加客户列用于水平分组
    b.HGroups.AddDef("VIN码") \'添加客户列用于水平分组
    b.HGroups.AddDef("进货类型") \'添加客户列用于水平分组
    b.VGroups.AddDef("返利名称") \'添加产品列用于垂直分组
    b.Totals.AddDef("返利金额") \'添加数量列用于统计
    b.VerticalTotal= True \'垂直汇总
    b.HorizontalTotal = True \'水平汇总
    b.Decimals = 2
    Tables("查询 返利窗口_Table1").DataSource = b.builddatasource
    Tables("查询 返利窗口_Table1").AutoSizeCols() \'自动设置所有列的宽度

因为“返利名称”是不固定的,不同的车型“返利名称“有所不同,不同时期“返利名称“也有所不同,因此,导出的代码中没有指定列名称,代码如下:
If Tables("查询 返利窗口_Table1").rows.count > 0 Then
    Dim dt As Table = Tables("查询 返利窗口_Table1")
    Dim Book As New XLS.Book \'定义一个Excel工作簿
    Dim Sheet As XLS.Sheet = Book.Sheets(0) \'引用工作簿的第一个工作表
    Dim Style As Xls.Style = Book.NewStyle \'新建一个样式
    
    For c As Integer = 0 To dt.Cols.Count -1 \'添加列标题
        Sheet(0, c).Value = dt.Cols(c).Name
    Next
    For r As Integer = 0 To dt.Rows.Count - 1 \'填入数据
        For c As Integer = 0 To dt.Cols.Count -1
            Sheet(r +1, c).Value = dt.rows(r)(c)
        Next
    Next
    
    Dim St2 As XLS.Style = Book.NewStyle
    St2.Format = "yyyy-MM-dd"
    Sheet.Cols(dt.Cols("开票日期").Index).Style = st2
    Sheet.Cols(dt.Cols("结算日期").Index).Style = st2
    
    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
Else
    MessageBox.Show("没有要导出的数据,请重试刷新")
    e.Cancel = True
End If

请教:以上的导出代码导出数据的列名称为:返利金额1;返利金额2.....如何能实现,导出的表中体现窗口表的 “实际列标题“,也就是以”返利名称“为列标题

--  作者:有点蓝
--  发布时间:2021/9/22 9:13:00
--  
    For c As Integer = 0 To dt.Cols.Count -1 \'添加列标题
        Sheet(0, c).Value = dt.Cols(c).Name
    Next

改为

    For c As Integer = 0 To dt.Cols.Count -1 \'添加列标题
if dt.Cols(c).caption > "" then
        Sheet(0, c).Value = dt.Cols(c).caption 
else
        Sheet(0, c).Value = dt.Cols(c).Name
end if
    Next

--  作者:huizhong
--  发布时间:2021/9/22 14:41:00
--  
谢谢老师