Foxtable(狐表)用户栏目专家坐堂 → [求助]如何用代码导出不同的excel报表


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

主题:[求助]如何用代码导出不同的excel报表

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


加好友 发短信
等级:一尾狐 帖子:476 积分:4039 威望:0 精华:0 注册:2011/11/2 8:55:00
[求助]如何用代码导出不同的excel报表  发帖心情 Post By:2017/3/6 12:22:00 [只看该作者]

老师您们好!
我在帮助文档里看到导出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()


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

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



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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:4039 威望:0 精华:0 注册:2011/11/2 8:55:00
  发帖心情 Post By: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()


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

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


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/3/8 23:27:00 [只看该作者]

 可以,请上传实例。

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/3/8 23:30:00 [只看该作者]

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

 

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

 


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


加好友 发短信
等级:一尾狐 帖子:476 积分:4039 威望:0 精华:0 注册:2011/11/2 8:55:00
  发帖心情 Post By: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


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/3/9 16:01:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:试验批量导出.zip


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


加好友 发短信
等级:一尾狐 帖子:476 积分:4039 威望:0 精华:0 注册:2011/11/2 8:55:00
  发帖心情 Post By:2017/3/9 23:03:00 [只看该作者]

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

谢谢您!

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



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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By: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
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:4039 威望:0 精华:0 注册:2011/11/2 8:55:00
  发帖心情 Post By:2017/4/6 22:31:00 [只看该作者]

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


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


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

 回到顶部
总数 11 1 2 下一页