Foxtable(狐表)用户栏目专家坐堂 → 关于输出表的表样式问题


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

主题:关于输出表的表样式问题

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


加好友 发短信
等级:幼狐 帖子:163 积分:1071 威望:0 精华:0 注册:2023/9/19 11:27:00
关于输出表的表样式问题  发帖心情 Post By:2025/1/3 16:31:00 [只看该作者]

老师好,按您给整合的导出数据按钮命令代码都实现了预期的功能,现在想拓展一下,对导出的表格设置一些样式(网格线,字体,颜色,对齐方式等) 把这些设置样式的代码加进去后,也不报错,就是导出表的时候,导出的表格没有达到预期设定的样式,老师给看看样式文件代码有啥问题


咱们是这样的,定义的dt变量 Dim dt As Table = Tables("报表形式导出表格_table1")是窗口中的作为预览用和后面导出折叠模式的动态表,而导出的表Sheet也是随窗口中的动态表而变化导出的表名和数据,咱们就是想在导出的动态表名和数据中进行设置表样式,最后落脚点就是下面代码的dt   我琢磨了好多遍这个动态dt这么写  ,另外老师看看表样式的代码放置位置对不对,请老师看看代码问题出在哪儿  谢谢老师


   '        Sheet(dt.Rows.Count - 1 , Lms.length - 1).Style = Style  

   

        Sheet(Tables("& name & ").Rows.Count - 1 , Lms.length - 1).Style = Style


'下面是导出数据按钮命令代码

Dim dlg As New SaveFileDialog

dlg.filter = "Excel文件|*.xls"

dlg.OverwritePrompt = True '弹出覆盖警告

If dlg.ShowDialog = DialogResult.OK Then

   

    '定义点击不同单选框按钮时对应的列名显示代码

    Dim lms() As String

    Dim szs() As Integer

    If e.Form.Controls("导出理论数据").Checked = True Then

        lms = {"序号", "项目构成", "单位", "理论用量", "理论单价", "理论合价", "备注"} '要导出的列名

        szs = {45, 200, 65, 85, 85, 100, 250} '对应的列宽

       

    Else If e.Form.Controls("导出投标数据").Checked = True Then

    lms = {"序号", "项目构成", "单位", "投标用量", "投标单价", "投标合价", "备注"} '要导出的列名

    szs = {45, 200, 65, 85, 85, 100, 250} '对应的列宽

   

    Else If e.Form.Controls("导出理论数据").Checked = False And e.Form.Controls("导出投标数据").Checked = False Then

        MessageBox.Show("请选择导出数据的形式:是导出理论数据   还是导出投标数据")

       

    End If

   

    '下面代码都是定义导出数据表代码

    Dim dt As Table = Tables("报表形式导出表格_table1")

    Dim Book As New XLS.Book '定义一个Excel工作簿

    Dim Sheet As XLS.Sheet

   

 

    '下面代码是定义表样式代码

    '以下是定义单元格字体颜色及表格线的颜色代码代码代码

    Dim Style As XLS.Style = Book.NewStyle() '定义新样式

   

    Style.BorderTop = XLS.LineStyleEnum.Thin '设置表格线

    Style.BorderBottom = XLS.LineStyleEnum.Thin '设置表格线

    Style.BorderLeft = XLS.LineStyleEnum.Thin '设置表格线

    Style.BorderRight = XLS.LineStyleEnum.Thin '设置表格线

   

    Style.ForeColor = Color.black '设置样式的字体颜色

   

    Style.BorderColorTop = Color.black '设置单元格顶部表格线颜色

    Style.BorderColorBottom = Color.black '设置单元格底部表格线颜色

    Style.BorderColorLeft = Color.black '设置单元格左侧表格线颜色

    Style.BorderColorRight = Color.black '设置单元格右侧表格线颜色

   

    '定义复选组合框列表选择代码

    Dim ckl As WinForm.CheckedListBox = e.Form.Controls("lbk")

    Dim nms As New List(Of String)

    For i As Integer = 0 To ckl.Items.count - 1 '获取已经勾选的表名

        If ckl.GetItemChecked(i) Then

            nms.Add(ckl.Items(i))

        End If

    Next

    If nms.Count = 0 Then

        MessageBox.Show("至少要选择一个要导出的表名", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)

        Return

    End If

   

    For Each name As String In nms

        dt.Fill("se  lect *,用量 as 理论用量 ,单价 as 理论单价,合价 as 理论合价,报价调整1 as 投标用量,报价调整2 as 投标单价,报价调整3 as 投标合价  from {" & name & "}", True)

        Dim st As New InlineTreeSetting

        st.ParentCol = "科目编码"

        st.ChildCol = "项目构成"

        st.SortCol = "sysgrdtreesort"

        st.AggregateCols = {"合价|报价调整3"}

        st.UseStyle = True

        st.ExpandTo = -1

        dt.ShowGridTree(st)

        dt.Cols("科目编码").Visible = False

       

        Sheet = Book.Sheets.Add(name) '根据勾选表名动态增加工作表

        '定义导出表的表结构代码

        For c As Integer = 0 To lms.length - 1

            Sheet(0, c).Value = lms(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 lms.length - 1

                If dt.GridTreeVisible Then '如果处于折叠模式

                    If lms(c) = "合价" Then

                        Sheet(r + 1, c).Value = rw.GetValue("合价")

                    ElseIf lms(c) = "项目构成" Then

                        Sheet(r + 1, c).Value = New String(" ", rw.Hierarchy * 2) & rw("项目构成")

                    Else

                        Sheet(r + 1, c).Value = rw(lms(c))

                    End If

                Else

                    Sheet(r + 1, c).Value = rw(lms(c))

                End If

            Next

        Next

       

        '定义数据对齐代码

        Style.AlignHorz = XLS.AlignHorzEnum.Center'数据居中对齐

        Style.AlignVert = XLS.AlignVertEnum.Center'数据居中对齐

        '        Sheet(dt.Rows.Count - 1 , Lms.length - 1).Style = Style

       

        Sheet(Tables("& name & ").Rows.Count - 1 , Lms.length - 1).Style = Style

       

       

        '打开工作簿

        Book.Save(dlg.FileName)

        Dim Proc As New Process

        Proc.File = dlg.FileName

        Proc.Start()

    Next

End If


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


加好友 发短信
等级:超级版主 帖子:111567 积分:567941 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/1/3 16:34:00 [只看该作者]

样式放到赋值的代码后面

Sheet(r + 1, c).Value =  ....
Sheet(r + 1, c).Style = Style


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


加好友 发短信
等级:幼狐 帖子:163 积分:1071 威望:0 精华:0 注册:2023/9/19 11:27:00
  发帖心情 Post By:2025/1/3 16:37:00 [只看该作者]

谢谢老师,我试试

 回到顶部
帅哥哟,离线,有人找我吗?
刘效功天津
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:163 积分:1071 威望:0 精华:0 注册:2023/9/19 11:27:00
  发帖心情 Post By:2025/1/3 16:50:00 [只看该作者]

老师,我按您的指点放到后面,经过测试,不知为啥还是起不到作用,我还是没领悟到老师的指点,您再看看,谢谢老师  下面是我调整样式位置后的代码

Dim dlg As New SaveFileDialog
dlg.filter = "Excel文件|*.xls"
dlg.OverwritePrompt = True '弹出覆盖警告
If dlg.ShowDialog = DialogResult.OK Then
    
    '定义点击不同单选框按钮时对应的列名显示代码
    Dim lms() As String
    Dim szs() As Integer
    If e.Form.Controls("导出理论数据").Checked = True Then
        lms = {"序号", "项目构成", "单位", "理论用量", "理论单价", "理论合价", "备注"} '要导出的列名
        szs = {45, 200, 65, 85, 85, 100, 250} '对应的列宽
        
    Else If e.Form.Controls("导出投标数据").Checked = True Then
    lms = {"序号", "项目构成", "单位", "投标用量", "投标单价", "投标合价", "备注"} '要导出的列名
    szs = {45, 200, 65, 85, 85, 100, 250} '对应的列宽
    
    Else If e.Form.Controls("导出理论数据").Checked = False And e.Form.Controls("导出投标数据").Checked = False Then 
        MessageBox.Show("请选择导出数据的形式:是导出理论数据   还是导出投标数据")
        
    End If
    
    '定义复选组合框列表选择代码
    Dim ckl As WinForm.CheckedListBox = e.Form.Controls("lbk")
    Dim nms As New List(Of String)
    For i As Integer = 0 To ckl.Items.count - 1 '获取已经勾选的表名
        If ckl.GetItemChecked(i) Then
            nms.Add(ckl.Items(i))
        End If
    Next
    If nms.Count = 0 Then
        MessageBox.Show("至少要选择一个要导出的表名", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Return
    End If
    
    '下面代码都是定义导出数据表代码
    Dim dt As Table = Tables("报表形式导出表格_table1")
    Dim Book As New XLS.Book '定义一个Excel工作簿
    Dim Sheet As XLS.Sheet
    
    For Each name As String In nms
        dt.Fill("sel  ect *,用量 as 理论用量 ,单价 as 理论单价,合价 as 理论合价,报价调整1 as 投标用量,报价调整2 as 投标单价,报价调整3 as 投标合价  from {" & name & "}", True)
        Dim st As New InlineTreeSetting
        st.ParentCol = "科目编码"
        st.ChildCol = "项目构成"
        st.SortCol = "sysgrdtreesort"
        st.AggregateCols = {"合价|报价调整3"}
        st.UseStyle = True
        st.ExpandTo = -1
        dt.ShowGridTree(st)
        dt.Cols("科目编码").Visible = False
        
        Sheet = Book.Sheets.Add(name) '根据勾选表名动态增加工作表
        '定义导出表的表结构代码
        For c As Integer = 0 To lms.length - 1
            Sheet(0, c).Value = lms(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 lms.length - 1
                If dt.GridTreeVisible Then '如果处于折叠模式
                    If lms(c) = "合价" Then
                        Sheet(r + 1, c).Value = rw.GetValue("合价")
                    ElseIf lms(c) = "项目构成" Then
                        Sheet(r + 1, c).Value = New String(" ", rw.Hierarchy * 2) & rw("项目构成")
                    Else
                        Sheet(r + 1, c).Value = rw(lms(c))
                    End If
                Else
                    Sheet(r + 1, c).Value = rw(lms(c))
                    
                    '下面代码是定义表样式代码
                    '以下是定义单元格字体颜色及表格线的颜色代码代码代码
                    Dim Style As XLS.Style = Book.NewStyle() '定义新样式
                    
                    Style.BorderTop = XLS.LineStyleEnum.Thin '设置表格线
                    Style.BorderBottom = XLS.LineStyleEnum.Thin '设置表格线
                    Style.BorderLeft = XLS.LineStyleEnum.Thin '设置表格线
                    Style.BorderRight = XLS.LineStyleEnum.Thin '设置表格线
                    
                    Style.ForeColor = Color.black '设置样式的字体颜色
                    
                    Style.BorderColorTop = Color.black '设置单元格顶部表格线颜色
                    Style.BorderColorBottom = Color.black '设置单元格底部表格线颜色
                    Style.BorderColorLeft = Color.black '设置单元格左侧表格线颜色
                    Style.BorderColorRight = Color.black '设置单元格右侧表格线颜色
                    
                    '定义数据对齐代码
                    Style.AlignHorz = XLS.AlignHorzEnum.Center'数据居中对齐
                    Style.AlignVert = XLS.AlignVertEnum.Center'数据居中对齐
                    '                     Sheet(dt.Rows.Count - 1 , Lms.length - 1).Style = Style
                    Sheet(r + 1, c).Style = Style
                    
                End If
            Next
        Next
        
        '打开工作簿
        Book.Save(dlg.FileName)
        Dim Proc As New Process
        Proc.File = dlg.FileName
        Proc.Start()
    Next
End If

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


加好友 发短信
等级:超级版主 帖子:111567 积分:567941 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/1/3 16:56:00 [只看该作者]

定义样式的代码放到最外面,定义一次就行了,没有必要放到循环里

所有赋值的代码后面都要加上

 回到顶部
帅哥哟,离线,有人找我吗?
刘效功天津
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:163 积分:1071 威望:0 精华:0 注册:2023/9/19 11:27:00
  发帖心情 Post By:2025/1/3 17:00:00 [只看该作者]

奥,谢谢老师知道,我试试

 回到顶部
帅哥哟,离线,有人找我吗?
刘效功天津
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:163 积分:1071 威望:0 精华:0 注册:2023/9/19 11:27:00
  发帖心情 Post By:2025/1/3 17:13:00 [只看该作者]

谢谢老师指点,没问题了,您快下班了,我再问一问老师:
第一   我想加个部分单元格合并的代码,因为这些导出的表格有2行需要合并一下,这样看起来美观  ,这样代码有啥需要注意的地方,请老师给知道一下,这俩天我完善一下
第二   咱们导出的列表项目中有几个表是单独的表,不需要循环等这么费劲的代码,只是判断一下列表中的表名,如果等于某个字符串就启动 另外一套代码(该代码写在上面代码的下方),我这样的思路对吗,需要注意哪些问题,请老师指点一下,谢谢老师!

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


加好友 发短信
等级:超级版主 帖子:111567 积分:567941 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/1/3 17:38:00 [只看该作者]

这些自己测试过才知道,我也不清楚

 回到顶部