如何在Excel中创建基于模板的用户可自定义报表

时间:2010-07-13 09:31:57

标签: .net excel

如何使用Excel生成最终用户可自定义的报告。需要根据某些查询从oracle / SQL Server数据库中获取数据,并且需要在Excel中生成报告。

我想根据他不断变化的要求为最终用户(具有Excel和数据库查询编写知识)设计一个解决方案,以便他在今天修改报告要求时不依赖开发团队。

我使用C#& amp;来设计这种类型的应用程序。 Crystal报告较早,这需要三件事: 1.具有数据库查询的Crystal报表模板 2.过滤条件(将从数据库中读取数据)。 3.动态用户控制(例如文本框,下拉等)生成组件根据过滤条件控制所需(由最终用户在数据库表中定义)。

如果最终用户熟悉Crystal报表设计,那么他可以设计自己的水晶报表模板以及仅嵌入在水晶报表中的数据库查询。我的软件根据该报告模板的数据库中的定义生成动态用户控件。这些筛选条件将传递给Crystal报表中定义的查询,以便根据其筛选条件生成所需的报表。这有助于他今天在餐饮日报告相关的变化要求。

现在我想使用Excel设计类似的解决方案,即用Excel模板替换Crystal报表模板。 我最初的建议是这样的,我将用excel模板替换水晶报告,其中固定参数和固定参数很少。几个变量报告参数(根据查询将来自数据库),其余的我将使用我之前的解决方案。

我不知道

  • 如何定义报告参数 Excel?
  • 如何生成多页面 报告(当数据库返回数据集时 超过一个记录)?
  • 如何 像水晶报告一样的分页报告 当要显示结果时 多页?
  • 如何定义 报告标题& Excel中的页脚区域 显示在多个页面上 报告?

我知道这些事情可以使用宏编程(在Excel报表模板中定义)来完成,但这对最终用户来说并不容易,我希望有一个简单的通用解决方案,我可以在我的c#程序中实现一次最终用户(没有太多的知识)可以根据自己的需要设计/修改报告,而不会像我之前的解决方案(c#和Crystal报告)那样编程。

提前感谢您节省宝贵的时间,支持和指导。

的问候。 Gopal Parikh。

2 个答案:

答案 0 :(得分:2)

这将是一个非常具有挑战性的项目,主要是因为Excel不像Crystal Reports那样真正是一个报表工具。我在Excel中创建了很多报告,其中每一个都是自定义解决方案,可以根据用户需求进行定制。在Excel中创建通用报表工具需要在Excel的功能集中进行大量“填空”。

  

如何定义报告参数   的Excel?

Excel中确实没有报表参数,至少与Crystal Reports的报表参数不同。如果您打算使用C#和VSTO,则可以创建表单(或使用任务窗格)以供用户输入参数。您还可以尝试使用VBA / VSTO并使用本机Excel数据对象(QueryTables,ListObjects和PivotTables),它们可能为您提供一些预先构建的参数选项。如果您希望用户能够创建自己的报告,那么您需要创建某种报告向导来帮助他们设置和管理这些“参数”。

  

如何生成多页报告   (当数据库返回更多的数据集时   比一个记录)?

     

如何分页   报告像水晶报告那样   结果将显示在上面   多页?

如果我理解正确的话,这两个都是类似的问题。您在Crystal Reports中看到的所有分页功能(例如,“将部分保持在一起”,“重复标题”等)都需要在Excel中编码,因为它们根本不存在。因为Excel实际上并没有类似于Crystal Reports的分组,所以我认为这将是一个具有挑战性的问题。如何在Excel中将区域定义为在新页面上打印时“保持在一起”的内容?如何在上一页的末尾添加空格(Excel通常会尝试缩放大小)?对象模型就在那里,它看起来确实可行,只是非常耗费时间和精力。

  

如何定义报告标题&页脚   Excel中要显示的区域   多页报告?

这实际上并不太难,因为您可以使用页眉和页脚对象。但是,您必须手动更新值,因为您通常不能拥有“动态”信息(没有公式,没有数据对象等)。如果您需要更多灵活性,也可以使用“Rows to top at top”。

一般来说,Excel对于这种工作来说确实是错误的工具。 Excel可以是一个功能强大的报告工具,但通常需要一些熟悉Excel的人,并且即使对于高级用户也没有一些功能(没有编写一些大量的VBA)。

答案 1 :(得分:1)

看看这个:

Create Excel (.XLS and .XLSX) file from C#

它使您可以根据需要创建Excel模板文件。极端情况下的最终用户只需要自定义模板。这很容易做到。自定义以包括或删除列,标签,公式等。

此解决方案似乎非常适合熟悉Excel和Excel的最终用户。数据库查询编写。