以文本方式查看主题

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

--  作者:zhuzhi
--  发布时间:2017/3/6 12:22:00
--  [求助]如何用代码导出不同的excel报表
老师您们好!
我在帮助文档里看到导出EXCEL报表的代码,它是只能实现导出指定的一个模板一个报表名的报表吧?那么如果我有一组数据,如下例:
姓名  份额 
张三   1
张三   2
李四   2
李四   2
李四   4
王五   6
王五   7
……
我能不能修改那段代码,让它自动地,按张三、李四、王五分类汇总,然后自动按王五一张报表叫王五、李四一张报表叫李四,张三一张报表叫张三这样,自动地在指定位置生成几份报表呢?
请教一下有没有实现的办法呢?谢谢!
示例的代码:

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.BackColor = Color.Red \'样式的背景颜色设为红色
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
    If
dt.rows(r)("折扣") >= 0.15 Then \'如果折扣大于等于0.15
        Sheet(r + 1,dt.Cols("折扣").Index).Style = Style \'设置折扣单元格的样式
   
End If
Next

\'打开工作簿

Book.Save("c:\\reports\\test.xls")
Dim
Proc As New Process
Proc.File = "c:\\reports\\test.xls"
Proc.Start()


可不可以加入一个条件判断,比如判断姓名是王五,导出的报表就只包含姓名为王五的数据,生成的表名称也自定义为判断项(即王五呢?)

求老师们赐个思路,十分感谢!



--  作者:有点色
--  发布时间:2017/3/6 12:42:00
--  
Dim dt As Table = Tables("表B")
for each s as string in dt.DataTable.GetValues("第一列", "第一列 is not null")
    Dim Book As New XLS.Book \'定义一个Excel工作簿
    Dim Sheet As XLS.Sheet = Book.Sheets(0) \'引用工作簿的第一个工作表
    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
    \'打开工作簿
    Book.Save("d:\\" & s & ".xls")
    Dim Proc As New Process
    Proc.File = "d:\\" & s & ".xls"
    Proc.Start()
next

--  作者:zhuzhi
--  发布时间:2017/3/8 22:42:00
--  
非常感谢您~~我试着导出之后,发现导出的excel文件里是各种姓名的数据都有,能否应用模板,只让选中数据中姓名为张三的数据套用模板,生成张三这个文件,姓名为李四的数据套用模板,生成李四这个文件……呢?帮助文档里的这个代码,如何能实现这样的功能呢?求老师们帮帮我~~

Dim Book As New XLS.Book(ProjectPath & "Attachments\\出库单.xls")
Dim
fl As String = ProjectPath & "Reports\\出库单.xls"
Book.Build()
\'生成细节区
Book.Save(fl)
\'保存工作簿
Dim
Proc As New Process \'打开工作簿
Proc.File = fl
Proc.Start()


是不是要用选取的代码?自动选取符合条件的数据?但我不知道这需要怎样的知识可以做到~~

谢谢老师们,求您们帮帮我~~~


--  作者:有点色
--  发布时间:2017/3/8 23:27:00
--  
 可以,请上传实例。
--  作者:有点色
--  发布时间:2017/3/8 23:30:00
--  

 如果自己做的话,参考这里

 

http://www.foxtable.com/webhelp/scr/2626.htm

 


--  作者:zhuzhi
--  发布时间:2017/3/9 15:47:00
--  
老师您好~~我试着做了一下:
Dim Book As New XLS.Book(ProjectPath & "Attachments\\111.xls") \'打开模板
Dim fl As String = ProjectPath & "Reports\\222.xls"
Dim Sheet As XLS.Sheet = Book.Sheets(0)
Sheet(1,1).Value = "张三"  \'写入打印条件
Book.Build() \'生成报表
Book.Save(fl) 
Dim Proc As New Process 
Proc.File = fl
Proc.Start()
但是我失败了。它并不能完成指定数据的筛选,条件没法子运作~~~而且生成的报表之中,所有被我指定为筛选选项的“姓名”都被改写了~~
而且,我希望写入条件能像示例那样简便,不用一个个指定它是什么,而是所有不同的“姓名”归类,自动筛选出来。我不知道这个能用什么句式判断出来~~
我想要将用姓名=张三筛选出来的数据生成的报表自动命名为张三,用姓名=李四筛选后生成的报表里自动命名为李四……但我试着用您给的第一份代码之中,能自动将生成的报表们命名的方法,但是却报错。我不知道可以怎么解决它~~

我把例子上传,麻烦老师指点我!十分感谢!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:试验批量导出.zip


--  作者:有点色
--  发布时间:2017/3/9 16:01:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:试验批量导出.zip


--  作者:zhuzhi
--  发布时间:2017/3/9 23:03:00
--  
谢谢老师!真的非常有效!
还想请教老师,以我这个例子为例,我要对数据先筛选一道,比如说先选择姓名为李四张三,再使用这个打印代码。好像王五虽然没有数据,但也会生成相应的空报表
请问您有没有办法能让筛除王五后,代码不会生成王五这个空报表呢?
此外,可否只是生成报表,而不打开报表呢?

谢谢您!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:正在学习.zip



--  作者:有点色
--  发布时间:2017/3/10 1:40:00
--  

改一下代码即可

 

Dim t As Table = Tables("表B")
For Each n As String In t.DataTable.GetValues("第一列", "第一列 is not null" & iif(t.Filter>"", " and (" & t.filter & ")", ""))
    Dim Book As New XLS.Book(ProjectPath & "Attachments\\111.xls") \'打开模板
    Dim fl As String = ProjectPath & "Reports\\" & n & ".xls"
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Sheet(1,10).Value = "<第一列=\'" & n & "\'>"  \'写入打印条件
    Book.Build() \'生成报表
    Book.Save(fl)
Next


--  作者:zhuzhi
--  发布时间:2017/4/6 22:31:00
--  
老师您好!谢谢您之前的指点。我还是遇到了1个问题,想请教您。
我应用您给我的代码,将报表模板换了一下,但是最终生成的报表,就不能达成张三的报表里只有张三的数据,李四的报表里只有李四的数据。每张报表里,是所有人的数据都产生了一份。
不知道这是为什么呢?我做了项目,把您的代码原封不动复制,就是换了一下报表模板。麻烦您看看,这个案例中窗口里的第二个按钮和它对应的名为花名册的报表模板,我不知道它是怎么出错了,求您指点,十分感谢!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:正在学习.zip


-------------------------
不好意思,我大概知道是什么原因了,请问下写入打印条件的原理是什么呢?谢谢!
--------------------------------------------
不好意思,我调整了写入打印条件,但还是无法正确生成,求老师指点,十分感谢!


[此贴子已经被作者于2017/4/6 22:52:55编辑过]