Foxtable(狐表)用户栏目专家坐堂 → excel模板中 如何实现第一列是统计总数列 接下来的列是将统计的数据逐行显示呢?


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

主题:excel模板中 如何实现第一列是统计总数列 接下来的列是将统计的数据逐行显示呢?

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
excel模板中 如何实现第一列是统计总数列 接下来的列是将统计的数据逐行显示呢?  发帖心情 Post By:2021/5/14 16:05:00 [显示全部帖子]

excel模板中  如何实现第一列是统计总数列  接下来的列是将统计的数据逐行显示呢?

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


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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)模板实现不了这种。1、使用代码手工导...  发帖心情 Post By:2021/5/14 17:13:00 [显示全部帖子]

一个表会有多个不同的数据类型进行条件判断  多个条件怎么进行添加呢?

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

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

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



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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)这里没有办法使用条件。  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)就是自己遍历新增行,然后手工给对应...  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)1、在第一行录入标题,数据从第2行开...  发帖心情 Post By:2021/5/15 11:40:00 [显示全部帖子]

感谢老师的耐心指导  根据你的指导 当前完成如下: 麻烦老师继续指导下如何合并单元格  部分线框不绘制  某列直接显示序号问题!谢谢!
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编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)合并单元格:http://www.foxtable.co...  发帖心情 Post By:2021/5/15 12:26:00 [显示全部帖子]

谢谢老师   已经初步完成效果   

代码如下:
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 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
Sheet.Cols(1).Width =100
Sheet.Cols(2).Width =100
Sheet.Cols(3).Width =100
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.MergeCell(0,0,1,c+1)
        Sheet(0, c).style=style
        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
    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)    '在 计划 列填入 词典 表里面的 第一列 的值
        Sheet(r1+2, 4).Value = r1+1  '在 周期 列填入 序号
    Next
Next

For r2 As Integer = 0 To Sheet.rows.count-1
    For c1 As Integer = 0 To dt.Cols.Count-1
        If dt.Cols(c1).IsDate
            Sheet(r2,c1).Style = St2
        Else
            Sheet(r2,c1).Style = Style
        End If
    Next
Next
Book.Save("c:\reports\test.xls")
Dim Proc As New Process
Proc.File = "c:\reports\test.xls"
Proc.Start()

运行效果如下:

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



 回到顶部