摆脱又慢又不稳定的excel,制作不一样的报表
不知道大家有没试过使用excel作为报表工具。excel的编辑很优秀,支持VBA操作,可以很方便的使用动态数据制作出精美的报表。
在问题发生之前,我也是这么认为的,哪怕它导出数据需要较长的时间,我也认了。因为也没有找到更好的替代品嘛。
直到去年底,客户反馈了2个问题:
- 报表达到1500页时出错了,后来检查发现是分页符超过了1026,excel报错了。
- 打印时提示超时错误,后来检查发现是大量的复制粘贴操作(先把动态数据填充到模板,再复制模板到输出页)导致excel出错了,而且出现的时间不太一致,至今无法理解,每次粘贴后清除剪切板数据仍然无效。
经过一番折腾后,终于放弃了,另外寻找解决方案。当时想dev的控件那么强大(使用多年),它的报表功能如何呢?经过一轮试验,发现相当强大。制作模板后1500页数据,嗖一下就完成了。
dev控件(devexpress)请自行下载,以下示例用的是15.2版本。
安装dev控件后,VS在添加新项时,会有个选项,如下图所示:
点击添加后会有四个选项,空报表、表格报表、标签报表和继承报表
我们选择空白报表
图中,Detail,细节部分,为需要变化的动态数据。
上下空白处可理解为页眉页脚
点击细节左侧的三角形,将打开细节内容,如上图,再次点击将隐藏细节。
上图中,有几个是XrLabel控件,[名称]代表着引用动态数据,列名为名称。动态数据源添加办法如下:
'在刚才新建的报表控件(xtraReport)中添加代码
Sub New(ByVal dt As DataTable)
InitializeComponent()
Me.DataSource = dt
Me.CreateDocument() '生成报表
End Sub
以下代码实例化报表,并显示:
'newTable作为拣货标签的数据源,
Dim jhbq As New 拣货标签(newTable)
Dim frm As New frmReport(jhbq) '预览报表
frm.ShowDialog()
frmReport是窗体控件,窗体中包含一个 DocumentViewer 控件。
如上图所示,DocumentViewer 控件包含菜单项,默认是没有的,点击上图黄色部分,可以进行设置,可现在ribbon风格或者toolbar风格的。上图为ribbon。
frmReport窗体中添加如下代码:
Sub New(ByVal rp As XtraReport)
InitializeComponent()
Me.DocumentViewer1.DocumentSource = rp
End Sub
报表预览如下:
1510条数据,比excel快了无数倍,而且不会莫名其妙的死机了!
还有些高级点的操作,比如分组、插入图表、分页等等,安装dev控件后,可参照dev提供的源代码去研究,这里不一一举例了。网上说有中文的帮助文档,但是我没找到,有的 朋友可以共享一下哈。