以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 关于输出表的表样式问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=194671) |
-- 作者:刘效功天津 -- 发布时间: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 |
-- 作者:有点蓝 -- 发布时间:2025/1/3 16:34:00 -- 样式放到赋值的代码后面 Sheet(r + 1, c).Value = .... Sheet(r + 1, c).Style = Style |
-- 作者:刘效功天津 -- 发布时间:2025/1/3 16:37:00 -- 谢谢老师,我试试 |
-- 作者:刘效功天津 -- 发布时间: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
|
-- 作者:有点蓝 -- 发布时间:2025/1/3 16:56:00 -- 定义样式的代码放到最外面,定义一次就行了,没有必要放到循环里 所有赋值的代码后面都要加上
|
-- 作者:刘效功天津 -- 发布时间:2025/1/3 17:00:00 -- 奥,谢谢老师知道,我试试 |
-- 作者:刘效功天津 -- 发布时间:2025/1/3 17:13:00 -- 谢谢老师指点,没问题了,您快下班了,我再问一问老师: 第一 我想加个部分单元格合并的代码,因为这些导出的表格有2行需要合并一下,这样看起来美观 ,这样代码有啥需要注意的地方,请老师给知道一下,这俩天我完善一下 第二 咱们导出的列表项目中有几个表是单独的表,不需要循环等这么费劲的代码,只是判断一下列表中的表名,如果等于某个字符串就启动 另外一套代码(该代码写在上面代码的下方),我这样的思路对吗,需要注意哪些问题,请老师指点一下,谢谢老师!
|
-- 作者:有点蓝 -- 发布时间:2025/1/3 17:38:00 -- 这些自己测试过才知道,我也不清楚 |