以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  excel模板中 如何实现第一列是统计总数列 接下来的列是将统计的数据逐行显示呢?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=165347)

--  作者:cnsjroom
--  发布时间:2021/5/14 16:05:00
--  excel模板中 如何实现第一列是统计总数列 接下来的列是将统计的数据逐行显示呢?
excel模板中  如何实现第一列是统计总数列  接下来的列是将统计的数据逐行显示呢?

图片点击可在新窗口打开查看此主题相关图片如下:11.png
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2021/5/14 16:10:00
--  
模板实现不了这种。

1、使用代码手工导出数据,比如:http://www.foxtable.com/webhelp/topics/1148.htm
2、使用专业报表

--  作者:cnsjroom
--  发布时间:2021/5/14 17:13:00
--  回复:(有点蓝)模板实现不了这种。1、使用代码手工导...
一个表会有多个不同的数据类型进行条件判断  多个条件怎么进行添加呢?

图片点击可在新窗口打开查看此主题相关图片如下:11.png
图片点击可在新窗口打开查看

登记类型:有专题党课  为民实事   课题调研  主题活动等值
怎么添加多个条件  然后再不同的列显示不同的对应类型的值呢?

图片点击可在新窗口打开查看此主题相关图片如下:22.png
图片点击可在新窗口打开查看



--  作者:有点蓝
--  发布时间:2021/5/14 17:38:00
--  
这里没有办法使用条件。
--  作者:cnsjroom
--  发布时间:2021/5/14 17:42:00
--  回复:(有点蓝)这里没有办法使用条件。
那使用代码
Dim cmd As New SQLCommand
\'cmd.C

Dim
 nms() As String = {"产品","数量","单价","金额","日期"}
cmd
.CommandText = "Sel ect 产品,数量,单价, 数量 * 单价 As 金额,日期 From {订单} Where 客户 = \'CS01\' "
Dim
 dt As DataTable = cmd.ExecuteReader()
Dim
 Book As New XLS.Book
Dim
 Sheet As XLS.Sheet = Book.Sheets(0)
Dim
 Style As Xls.Style = Book.NewStyle
Style
.BackColor = Color.Red
For
 c As Integer = 0 To nms.Count -1
    Sheet(0, c).Value = nms(c)

Next
For
 r As Integer = 0 To dt.DataRows.Count - 1
    For c As Integer = 0 To nms.Count -1
        Sheet(r +1, c).Value = dt.DataRows(r)(nms(c))
    
Next

Next

\'
打开工作簿
Book
.Save("c:\\reports\\test.xls")
Dim
 Proc As New Process
Proc
.File = "c:\\reports\\test.xls"
Proc
.Start()

是否可以实现呢?怎么实现呢 ?老师可否指导一下


或者老师有没有专业报表实现的方法或者例子  我学习一下
[此贴子已经被作者于2021/5/14 17:44:33编辑过]

--  作者:有点蓝
--  发布时间:2021/5/14 17:51:00
--  
就是自己遍历新增行,然后手工给对应单元格填入需要的数据。上面就已经是完整的实现代码

做专业报表先把专业报表这章内容全部看一遍:http://www.foxtable.com/webhelp/topics/1166.htm

--  作者:cnsjroom
--  发布时间:2021/5/14 18:39:00
--  回复:(有点蓝)就是自己遍历新增行,然后手工给对应...
Dim dt As Table = Tables("计划事件")
Dim Book As New XLS.Book \'定义一个Excel工作簿
Dim Sheet As XLS.Sheet = Book.Sheets(0) \'引用工作簿的第一个工作表
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.BorderColorTop = Color.Black
Style.BorderColorBottom = Color.Black
Style.BorderColorLeft = Color.Black
Style.BorderColorRight = Color.Black

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)
        Sheet(r+1,c).Style = Style
    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
Sheet.Cols(dt.Cols("周期时间").Index).Style = st2
Book.Save("c:\\reports\\test.xls")
Dim Proc As New Process
Proc.File = "c:\\reports\\test.xls"
Proc.Start()

实现效果如下:

图片点击可在新窗口打开查看此主题相关图片如下:11.png
图片点击可在新窗口打开查看
怎么实现:
1、新增一行作为表标题行
2、并且将列名行也对应的划线黑线
3、时间对应格式显示正确
4、实现老师楼上说的遍历 然后值在函数名称  计划列新增多个值  其他列保持现有数据不变呢?

图片点击可在新窗口打开查看此主题相关图片如下:12.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2021/5/14 18:40:37编辑过]

--  作者:有点蓝
--  发布时间:2021/5/15 8:47:00
--  
1、在第一行录入标题,数据从第2行开始填充
For c As Integer = 0 To dt.Cols.Count -1 \'添加列标题
    Sheet(1, 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 +2, c).Value = dt.rows(r)(c)
……
2、列名单元格也加上样式
3、事件列单独添加样式,原因:
Style设置行的样式。行、列、单元格都可以设置样式,优先顺序是:单元格>行>列
Dim St2 As XLS.Style = Book.NewStyle
St2.Format = "yyyy-MM-dd"
St2.BorderTop = XLS.LineStyleEnum.Thin
St2.BorderBottom = XLS.LineStyleEnum.Thin
St2.BorderLeft = XLS.LineStyleEnum.Thin
St2.BorderRight = XLS.LineStyleEnum.Thin
St2.BorderColorTop = Color.Black
St2.BorderColorBottom = Color.Black
St2.BorderColorLeft = Color.Black
St2.BorderColorRight = Color.Black

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)
if dt.Cols(c).IsDate
        Sheet(r+1,c).Style = St2
else
        Sheet(r+1,c).Style = Style
end if
    Next
Next
4、比如函数名称是第一个列,只给第一个列赋值
dim cnt as integer = Sheet.rows.count
For r As Integer = 0 To dt.Rows.Count - 1 \'填入数据
        Sheet(cnt +r, 0).Value = dt.rows(r)(c)
        Sheet(cnt+r,0).Style = Style
Next

--  作者:cnsjroom
--  发布时间:2021/5/15 11:40:00
--  回复:(有点蓝)1、在第一行录入标题,数据从第2行开...
感谢老师的耐心指导  根据你的指导 当前完成如下: 麻烦老师继续指导下如何合并单元格  部分线框不绘制  某列直接显示序号问题!谢谢!
Dim dt As Table = Tables("计划事件")
Dim dt1 As Table = Tables("词典")
Dim Book As New XLS.Book \'定义一个Excel工作簿
Dim Sheet As XLS.Sheet = Book.Sheets(0) \'引用工作簿的第一个工作表
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.BorderColorTop = Color.Black
Style.BorderColorBottom = Color.Black
Style.BorderColorLeft = Color.Black
Style.BorderColorRight = Color.Black
Style.AlignHorz=XLS.AlignHorzEnum.Center
Style.AlignVert=XLS.AlignHorzEnum.Center
Dim Style2 As Xls.Style = Book.NewStyle \'新建一个合并居中样式
\'如何设定这个样式为合并居中呢?
Dim St2 As Xls.Style = Book.NewStyle \'新建一个时间格式化样式
St2.Format = "yyyy-MM-dd"
St2.BorderTop = XLS.LineStyleEnum.Thin
St2.BorderBottom = XLS.LineStyleEnum.Thin
St2.BorderLeft = XLS.LineStyleEnum.Thin
St2.BorderRight = XLS.LineStyleEnum.Thin
St2.BorderColorTop = Color.Black
St2.BorderColorBottom = Color.Black
St2.BorderColorLeft = Color.Black
St2.BorderColorRight = Color.Black
St2.AlignHorz=XLS.AlignHorzEnum.Center
St2.AlignVert=XLS.AlignHorzEnum.Center
St2.FontSize = 8
For r As Integer = 0 To dt.Rows.Count - 1 \'填入数据
    For c As Integer = 0 To dt.Cols.Count-1
        Sheet(0, c).Value ="统计表"    \'第一行写入表标题(从第一列到最后一列)
        Sheet(0, c).style=style2
        Sheet(1, c).Value = dt.Cols(c).Name   \'第二行写入列标题
        If r<2   Then
            Sheet(r +2, c).Value = dt.rows(r)(c)   \'第三行开始填充数据
            Sheet(r+2,c).Style = Style
        Else
            Sheet(r +1, c).Value = dt.rows(r)(c)   \'第三行开始填充数据
        End If
        If dt.Cols(c).IsDate
            Sheet(r+1,c).Style = St2
        Else
            Sheet(r+1,c).Style = Style
        End If
    Next
Next
For r1 As Integer = 0 To dt1.Rows.Count - 1 \'填入数据
    Dim cnt As Integer = Sheet.rows.count
    For c1 As Integer = 0 To dt.Cols.Count-1
        Sheet(r1+2, 1).Value = dt1.rows(r1)(0)    ’在 计划 列填入 词典 表里面的 第一列 的值
        If r1<2   Then
            If dt.Cols(c1).IsDate
                Sheet(r1+2,c1).Style = St2
            Else
                Sheet(r1+3,c1).Style = Style
            End If

        Else
            
            If dt.Cols(c1).IsDate
                Sheet(r1+1,c1).Style = St2
            Else
                Sheet(r1+2,c1).Style = Style
            End If
        End If
    Next
Next
Book.Save("c:\\reports\\test.xls")
Dim Proc As New Process
Proc.File = "c:\\reports\\test.xls"
Proc.Start()
运行效果如图:

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

怎么修改上述红色部分代码 :
1、实现第一行标题行  自动合并单元格并将标题居中呢?(合并单元格数量等于列标题数量)
2、如何根据计划咧里面的值数量  对应新增序号到周期列里  如:1、2、3、4……18
3、解决为什么部分单元格没有绘制边框线呢?
词典表数据:

图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看
计划事件表数据:

图片点击可在新窗口打开查看此主题相关图片如下:3.png
图片点击可在新窗口打开查看



[此贴子已经被作者于2021/5/15 11:43:24编辑过]

--  作者:有点蓝
--  发布时间:2021/5/15 11:47:00
--  
合并单元格:http://www.foxtable.com/webhelp/topics/1153.htm

遍历的时候给指定列赋值索引,如:Sheet(r1+2, 5).Value =r1

没有遍历到这些单元格赋值,自然就没有设置边框