回 帖 发 新 帖 刷新版面

主题:[转帖]解决报表的打印输出问题的方案

Visual Basic 6.0
    Winwos NT/Windows 98
    在VB编制数据运用程序的过程中,无法找到一种较好的方法来解决报表的打印输出[color=FF0000]问题,具体要求如下:[/color]
     1 能地设计时设置报表的表式。
     2 能完成复杂的中国式报表。
     3 速度快,最好是进程内调用。
    请各位高手指点迷津。

[color=FF0000]回答: [/color]

    [color=FF00FF]主持人注:其实这个问题不太可能有一个统一的解决方案,我们这里介绍一些方案,也欢迎大家提供更多的方案供参考。[/color]
    [color=FF0000]傻儿的意见:[/color]
    我的傻瓜打表即可完全满足要求:
    1.设置功能强大:提供数十种宏,可用于标题、页眉、页脚、表头中。
    另外,可选的打印选项由近百个。
    2、本部件即是专门针对中国式的表格,可打印:数据表(ADO、DAO、数组)表头任意设置(多层支持,支持斜线),强大的分页分组设置和统计功能(总计、页合计、逻辑表合计、物理表合计、合计字段可定义任意多个;总纪录数、页纪录数、表纪录数;表号、页号等都可作为“宏”使用);
    可打印不规则表(可以使用表单元对象描述,还可使用html语法描述),例如收款单、报销单等;
    支持嵌套表格,例如,想打印增值税发票之类的表格,可将其分为几个子表,而每个子表又是父表的一个单元(任意嵌套),通过此方法,再复杂的表格都可以轻松搞定;
    支持票据套打,设置非常简单,例如某个元素设置为长日期填充格式,打印时自动将年月日填到空隙中,如果设置某个元素为金额大写填充格式,则仅需要在打印参数中提供金额值,即可自动将大写文字填充到相应位置。
    3、本部件正是进程内ActiveX部件。
    [url=http://usevb.yeah.net]可以我的主页看看介绍和打印的表样示例。[/url]

    [color=FF0000]JiaQiang Xu的方案 [/color]
    可以使用免费的[url=http://www.seagatesoftware.com]Seagate Crystal Report 6.0[/url]
    它提供一个报表设计器和一系列对象、方法、属性,能在运行时操纵报表。
    也可以使用OLE Automation,利用Excel或Word来打印报表。用Excel,先设计宏,导入外部数据,设计其格式,打印等等,最后将宏的代码复制到VB中,适当修改后即可使用,这样可以利用Excel的一切功能,打印出非常专业化的报表。如果打印表格类型的报表,用Word设计出表格,在需要填写实际数据的地方加remark,然后在VB代码中用实际数据替换remark,再打印,这样比VB的Data Report方便多了。

    [color=FF0000]于溪玥、 向双双的方案 [/color]
    Microsoft Visual Basic 6.0 专业版和企业版中的数据报表设计器(Data Report Designer)与数据环境设计器(Data Environment Designer)是数据访问的新内容。Microsoft Developer Network Library Visual Studio 6.0 中文版所提供示例应用程序:Samples\Vb98\DataRept\ 目录下的Prjnwind.vbp 工程使用一个数据环境作为数据源,演示了数据报表设计器的基本功能。该示例在程序设计阶段(Design Time)就已将DataEnvironment设为DataReport的数据源,并将打印格式也一并设好以备打印,这样作不利于程序的通用性。当然,我们可以在程序运行阶段(Run Time)用语句更改DataEnvironment 的连接(Connection)的命令(Command)所对应的记录集(rsCommand)等参数来打印不同的数据(二维表),换句话说DataEnvironment是可编程的。其实,DataReport还可以使用别的数据源(DataSource)。但是,为什么我们在程序设计阶段不能将ADO Data 控件(ADODC)设为DataReport的数据源呢?原因很简单,DataReport 需要的是一个全局的或者是本设计器模块内的数据源(记录集),而ADODC是窗体模块级的,我们只需将Adodc.Recordset 传给一个全局级的Recordset 变量,再将该Recordset 设为DataReport的DataSource 即可。这样我们就可以脱离DataEnvironment使用DataReport打印动态生成的Recordset了。DataReport使用的另一个难点就是在程序运行阶段用语句控制数据报表设计器的专用控件。我们只能通过VB6自身提供的DataReport.Sections.Item(Index).Controls.Item(Index)…这样的语法来控制这些数据报表设计器专用控件,而且DataReport不能象窗体(Form)那样可以在程序运行阶段用语句动态加入控件,而且同类控件无索引(Index),而是在整个DataReport的控件集中拥有一个索引来标识控件,这样就非常不利于分别控制不同类的控件。还好,VB 提供了集合对象(Collection)我们就可以将数据报表设计器专用控件,根据其所在的区域(Sections)和所属控件类别等将它们分成若干集合,然后就可以通过控制集合的元素来准确有效地控制这些元素所代表的控件。在程序设计阶段我们要将足够多的控件绘制到DataReport上备用。实现上面的程序代码均可以编写到Sub DataReport_Initialize()事件过程里。经过以上改造我们就可以在程序运行阶段动态控制DataReport了。

在这里下载全文  [url=http://www.china-askpro.com/download/datarpt.zip]datarpt.zip[/url]  。
这里是一个  [url=http://www.china-askpro.com/download/rptsp.zip]rptsp.zip[/url]  例子。

现在 DataReportPlus 已经进行了重大升级!
    请访问:[url=http://microinfo.top263.net]http://microinfo.top263.net[/url]
           [url=http://microinfo.top263.net/DownLoad.htm]http://microinfo.top263.net/DownLoad.htm[/url]

    [color=FF0000]陈榆的意见:[/color]
    做中国式报表之我见
    (1)formula one 6.1
    它只有两点缺点:不定行数据控制麻烦,打印预览差。典型商用软件:速达两千,金财财务企业版等等。
    (2)spread3
    打印预览很好,但是不能单元格合并,如果表格的表头是两层的,实现编程量也不小。典型商用软件:金碟2000
    ,奥林岛财务。
     (3)vsview+vsflexgrid( http://www.videosoft.com ),
    用vsflexgrid7和vsview7结合打报表是目前我发现的最好的打印解决方案。几乎没什么缺点,vsflexgrid的强大显示功能众所周知。用vsview控制打行头,行尾,而表体就是vsflex.缺点是没有设计模式。
     (4)activereport1。1,crystalreport 8,这些报表工具虽然随着版本的升级越来越强大,但是为咱中国人想的实在是太少了。
    (5)cell3.3,很强但是很贵。
    (6)apex truedbgrid 7.0.虽然表格很强大,但是打印实在是小儿科。不能打多行行头、行尾。如果想做草稿打印用它也罢,毕竟很方便,打印效果也不差。

回复列表 (共2个回复)

沙发

给我们中国人开发一个经济实用的报表控件

板凳

楼主好呀!
可是我用了你的傻瓜打印可是在调用的时候它说是个必选参数!
这是怎么回事呀
我的库是SQL

我来回复

您尚未登录,请登录后再回复。点此登录或注册