报表和标签为在打印文档中显示并总结数据提供了灵活的途径。报表包括两个基本组成部分:数据源和布局。数据源通常是数据库中的表,但也可以是视图、查询或临时表。视图和查询将筛选、排序、分组数据库中的数据,而报表布局定义了报表的打印格式。在定义了一个表、一个视图或查询后,便可以创建报表或标签。
本章内容要点:
通过设计报表,可以用各种方式在打印页面上显示数据。使用“报表设计器”可以设计复杂的列表、总结摘要或数据的特定子集,比如发票。设计报表有四个主要步骤:
报表的创建过程
创建报表之前,应该确定所需报表的常规格式。报表可能同基于单表的电话号码列表一样简单,也可能复杂得象基于多表的发票那样。另外您还可以创建特殊种类的报表。例如,邮件标签便是一种特殊的报表,其布局必须满足专用纸张的要求。
常规报表布局
为帮助选择布局,这里给出常规布局的一些说明,以及它们的一般用途及示例。
布局类型 | 说明 | 示例 |
列 | 每行一条记录,每条记录的字段在页面上按水平方向放置。 | 分组/总计报表1 财政报表 存货清单 销售总结 |
行 | 一列的记录,每条记录的字段在一侧竖直放置 | 列表 |
一对多1 | 一条记录或一对多关系 | 发票 会计报表 |
多列 | 多列的记录,每条记录的字段沿左边缘竖直放置 | 电话号码薄 名片 |
标签 | 多列记录,每条记录的字段沿左边缘竖直放置,打印在特殊纸上 | 邮件标签1 名字标签 |
1 与报表向导关联的布局
选定满足需求的常规报表布局后,便可以用“报表设计器”创建报表布局文件。
报表布局文件具有 .frx 文件扩展名,它存储报表的详细说明。每个报表文件还有带 .frt 文件扩展名的相关文件。报表文件指定了想要的域控件、要打印的文本以及信息在页面上的位置。若要在页面上打印数据库中的一些信息,可通过打印报表文件达到目的。报表文件不存储每个数据字段的值,只存储一个特定报表的位置和格式信息。每次运行报表,值都可能不同,这取决于报表文件所用数据源的字段内容是否更改。
在 Visual FoxPro 中,有三种创建报表布局的方法:
以上每种方法创建的报表布局文件都可以用“报表设计器”进行修改。“报表向导”是创建报表的最简单途径,它自动提供很多“报表设计器”的定制功能。“快速报表”是创建简单布局的最迅速途径。如果直接在“报表设计器”内创建报表,“报表设计器”将提供一个空白布局。
无论何时想创建报表,都可以使用“报表向导”。向导将提出一系列问题并根据回答创建报表布局。
Visual FoxPro 提供了下列报表和标签向导:
应根据常规布局和报表的复杂程度选择向导。
若要使用“报表向导”
也可以从菜单中调用“报表向导”,从“工具”菜单中,选择“向导”命令,然后选定“报表”。
使用了向导之后,就可以使用“报表设计器”来添加控件和定制报表。有关详细内容,请参阅本章稍后的“定制布局”部分。
如果不想使用“报表向导”或“快速报表”,您可以从空白报表布局开始,然后自己添加控件。
若要创建空白报表
此时显示“报表设计器”。
可以使用“报表设计器”的任一功能来添加控件和定制报表。
标签是多列报表布局,为匹配特定标签纸而具有相应的特殊设置。在 Visual FoxPro 里,可以使用“标签向导”或“标签设计器”迅速创建标签。
利用“标签向导”是创建标签的简单方法。用向导创建标签文件后,可用“报表设计器”定制标签文件。
若要使用“标签向导”创建标签
可以原样使用标签布局,也可以按定制报表的方法定制标签布局。您也可以在“标签向导”的第二步中单击“新建标签”按钮,激活“Addlabel.app”。
如果不想使用向导来创建标签,您可以使用“标签设计器”来创建布局。“标签设计器”是“报表设计器”的一部分,它们使用相同的菜单和工具栏。两种设计器使用不同的默认页面和纸张。“报表设计器”使用整页标准纸张。“标签设计器”的默认页面和纸张与标准标签的纸张一致。
若要使用“标签设计器”创建标签
标准标签纸张选项出现在“新建标签”对话框中
“标签设计器”将出现刚选择的标签布局所定义的页面。
可以象处理报表一样给标签指定数据源并插入控件。有关详细内容,请参阅本章稍后的“定制布局”部分。
如果已有一个空白报表或标签,或者已通过向导或“快速报表”生成了一个不算很符合要求的报表,下一步就可以在“报表设计器”中修改它。
在“报表设计器”的带区中,可以插入各种控件,它们包含打印的报表中所需的标签、字段、变量和表达式。例如,在电话号码列表布局中,应把字段控件置成人名和电话号码,同时应设置标签控件和列表顶端的列标题。要增强报表的视觉效果和可读性,还可以添加直线、矩形以及圆角矩形等控件。也可以包含图片/OLE 绑定型控件。上述每种控件如下图所示。
报表布局文件和相应结果报表
可以在“报表设计器”中打开报表或标签来修改和定制其布局。
若要修改已生成的报表或标签
使用报表带区可以决定报表的每页、分组及开始与结尾的样式。可以调整报表带区的大小。在报表带区内添加报表控件,然后通过移动、复制、调整大小、设置对齐方式及调整等操作,可以安排报表中的文本和域控件。
如果有报表布局,则可以修改数据在报表页面上的位置。使用“报表设计器”内的带区,可以控制数据在页面上的打印位置。报表布局可以有几个带区。下图为报表中可能包含的一些带区以及每个带区的典型内容。注意每个带区下的栏标识了该带区。
“报表设计器”中的报表带区
报表也可能有多个分组带区或者多个列标头和注脚带区。使用本章稍后的“定义报表的页面”和“按布局分组数据”部分中提供的过程,可以添加这些带区。可以使用下表决定所需的带区。
使用此带区 | 若要打印 | 使用此命令 |
标题 | 每报表一次 | 从“报表”菜单中选择“标题/总结”带区。 |
页标头 | 每页一次 | 默认可用。 |
列标头 | 每列一次 | 从“文件”菜单中选择“页面设置”,设置“列数”> 1。 |
组标头 | 每组一次 | 从“报表”菜单中选择“数据分组”。 |
细节带区 | 每记录一次 | 默认可用。 |
组注脚 | 每组一次 | 从“报表”菜单中选择“数据分组”。 |
列注脚 | 每列一次 | 从“文件”菜单中选择“页面设置”,设置“列数”> 1 |
页注脚 | 每页一次 | 默认可用。 |
总结 | 每报表一次 | 从“报表”菜单中选择“标题/总结”带区 |
可以在任何的带区中设置任何的“报表”控件。也可以添加运行报表时执行的用户自定义函数。有关用户自定义函数的详细内容,请参阅《程序员指南》中的第十二章“添加查询和报表”。
在“报表设计器”中,可以修改每个带区的大小和特征。
若要调整带区大小
使用左侧标尺作为指导。标尺量度仅指带区高度,不包含页边距。
提示 不能使带区高度小于布局中控件的高度。可以把控件移进带区内,然后减少其高度。
可以在报表和标签布局中插入以下类型报表控件。
若要显示 | 请选用下列控件 |
表的字段、变量和其它表达式 | 域控件 |
原义文本 | 标签 |
直线 | 线条 |
框和边界 | 矩形 |
圆、椭圆、圆角矩形和边界 | 圆角矩形 |
位图或通用字段 | 图片/ActiveX 绑定控件 |
设置控件后,可以更改它们的格式、大小、颜色、位置和打印选项。也可仅出于参考目的而为每个控件添加注释,实际上在报表内并不打印。
“快速报表”是一项省时的功能,它自动创建简单报表布局。可以选择基本的报表组件,然后 Visual FoxPro 根据选择创建布局。
提示 如果已有的报表中“细节”带区是空的,就可以在其中使用“快速报表”。如果“页标头”带区已包含控件,“快速报表”将保留它们。
若要创建一个“快速报表”
“快速报表”对话框
“字段选择器”对话框
选中的选项反映在报表布局中。
“报表设计器”中的“快速报表”结果
这时便可以原样保存、预览和运行报表。
注释 “快速报表”不能向报表布局中添加通用字段。
可以在数据环境中简单地定义报表的数据源,用它们来填充报表中的控件。可以添加表或视图并使用一个表或视图的索引来排序数据。
使用视图作为数据源
数据环境通过下列方式管理报表的数据源:
若要向数据环境中添加表或视图
您的选择决定了出现在“数据库中的表/视图”框中字段列表的内容。
数据环境设计器
您可设置出现在报表中的记录顺序,方法是为数据环境设置索引。
若要为数据环境设置索引
– 或者 –
从可用索引列表中选定一个索引。
有关修改数据环境的详细内容,请参阅《程序员指南》中的第九章“创建表单”,以及 “数据环境设计器”主题。
有关集成查询或其它数据源的详细内容,请参阅《程序员指南》中的第十二章“添加查询和报表”。
报表或标签可以包含域控件,它们表示表的字段、变量和计算结果。
若要从数据环境中添加表中字段
若要从工具栏添加表中字段
表名和字段名将出现在“报表字段的表达式”内。
注释 如果“字段”框为空,则应该向数据环境添加表或视图。
不必保持表达式中表的别名。可以删除它或者清除“表达式生成器”对话框选项。
有关详细内容,请参阅本章稍后的“为报表控件添加注释”部分。有关常用的报表表达式或格式化域控件的详细内容,请参阅《程序员指南》中的第十二章“添加查询和报表”。
标签控件是希望出现在报表中的原义文本字符。例如“总计数”标签指明了某一字段控件中的内容包含有总计表达式。
若要添加标签控件
可以在文本编辑器内随意编辑:使用 ENTER 键换行或使用“编辑”菜单剪切、复制和粘贴文本。
若要编辑标签控件
设置文本后,可以更改字体、文本颜色、背景色以及打印选项。有关详细内容,请参阅本章稍后的“更改字体”和“更改控件颜色”部分。
可以在报表中插入包含 OLE 对象的通用型字段。
若要插入通用型字段
“报表图片”对话框
– 或者 –
选择使用对话按钮来选取字段或变量。
通用字段的占位符将出现在定义的图文框内。默认情况下,图片保持其原始大小。
有关用图片填充图文框的详细内容,请参阅《程序员指南》中的第十二章“添加查询和报表”。
如果创建的报表布局上已经存在控件,则可以更改它们在报表上的位置和尺寸。可以单独更改每个控件,也可以选择一组控件作为一个单元来处理。
若要移动一个控件
控件在布局内移动位置的增量并不是连续的。增量取决于网格的设置。若要忽略网格的作用,拖动控件时应按住 CTRL 键。
若要选择多个控件
选择控点将显示在每个控件周围。当它们被选中后,可以作为一组内容来移动、复制或删除。
通过将控件标识在一个组中,可以为多个任务将一组控件关联在一起。例如,将标签控件和域控件彼此关联在一起,这样不用分别选择便可移动它们。当已经设置格式并且对齐控件后,这个功能也有用,因为它保存了控件彼此间的位置。
若要将控件组合在一起
选择控点将移到整个组之外。可以把该组控件作为一个单元处理。
若要对一组控件取消组定义
选定的控点将显示在组内每一控件周围。
如果在布局上已有控件,则可以单独地更改它的尺寸,或者调整一组控件的大小使它们彼此相匹配。可以调整除标签之外任何报表控件的大小。标签的大小由文本、字体及磅值决定。
若要调整控件的大小
若要匹配多个控件的大小
选择适当选项来匹配宽度、高度或大小。
控件将按照需要进行调整。
可以单独或成组复制或删除布局上的任意控件。
若要复制控件
控件的副本将出现在原始控件下面。
若要删除控件
可以根据彼此间关系对齐控件,或者根据“报表设计器”提供的网格放置它们。可以沿某一侧或居中对齐控件。
若要对齐控件
也可以使用布局工具栏。使用工具栏,可以同距离所选一侧最远的控件对齐,只要在单击对齐按钮时按下 CTRL 键 。
左对齐工具
选择对齐所有控件的边缘线时,应考虑到所有控件应彼此分开,而不应相互重叠。同一行上的控件如果沿它们右侧或左侧对齐,它们将彼此堆在一起。同样,同一竖线上的控件上、下对齐也会重叠。有关这些工具栏的详细内容,请在“帮助”中查找相应工具栏名。
若要居中对齐带区内的控件
控件将移动到各自带区的垂直或水平中心。
使用状态条或表格,可以将控件放置在报表页面上的特定位置。默认情况下,控件根据网格对齐其位置。可以选择关掉对齐功能和显示或隐藏网格线。网格线可以帮助您按所需布局放置控件。
若要将控件放置在特定的位置
若要人工对齐控件
若要显示网格线。
网格将在报表带区中显示。
若要更改网格的度量单位。
设计基本布局后,若要根据给定字段或其它条件对记录分组,会使报表更易于阅读。可以添加一个或多个组,更改组的顺序,重复组标头或者更改或删除组带区。分组允许明显地分隔每组记录和为组显示介绍和总结性数据。组的分隔基于分组表达式。这个表达式通常由一个以上的表字段生成,但也可以相当复杂。
分组之后,报表布局就有了组标头和组注脚带区,可以向其中添加控件。一般地,组标头带区中包含组所用字段的“域控件”,可以添加线条、矩形、圆角矩形或希望出现在组内第一条记录之前的任何标签。组注脚通常包含组总计和其它组总结性信息。
也可以为组指定其它选项:
如果数据源是表,记录的顺序可能不适合于分组。通过为表设置索引,或者在数据环境中使用视图,或者使用查询作为数据源,可以把数据适当排序来分组显示记录。报表布局实际上并不排序数据,它只是按它们在数据源中存在的顺序处理数据。排序必须使用视图、索引或布局外的其它形式的数据操作来完成。
例如,如果一个组以“地区”字段分隔,每次报表处理一个不同的地区值,它将产生一个组。它不会在表中从头到尾以“国家/地区”字段为依据对组中的记录进行排序。有关排序和索引的详细内容,请参阅第二章“创建表和索引”和第四章“检索数据”或第五章“使用视图更新数据”。有关数据源的详细内容,请参阅《程序员指南》中的第十二章“添加查询和报表”。
一个单组报表可以基于输入表达式进行一级数据分组。例如,可以把组设在“country”字段上来打印所有记录,相同国家/地区的记录在一起打印。当然数据源必须按那个字段排序。
若要添加组
“数据分组”对话框
– 或者 –
选择对话按钮,在“表达式生成器”对话框中创建表达式。
添加表达式后,可以在带区内放置任意需要的控件。通常,把分组所用的域控件从“细节”带区移动到“组标头”带区。
在报表内最多可以定义 20 级的数据分组。嵌套分组有助于组织不同层次的数据和总计表达式。
若要选择一个分组层次,请先估计一下更改值的可能频度,然后定义最经常更改的组为第一层。例如,报表可能需要一个按地区的分组和一个按城市的分组。城市字段的值比地区字段更易更改,因此,城市应该是两个组中的第一个,地区就是第二个。在这个多组报表内,表必须在一个关键值表达式上排序或索引过,例如 Region+City
。
若要添加多个组
“数据分组”对话框
– 或者 –
选择对话按钮,在“表达式生成器”对话框中创建表达式。
组按照它们被创建时的顺序在“数据分组”列表中编号。在“报表设计器”内,组带区的名字包含该组的序号和一个缩短了的分组表达式。具有最小编号的组标头和注脚出现在离“细节”带区最近的地方。
可以更改分组的表达式和组打印选项。
若要修改组带区
– 或者 –
选择对话按钮,在“表达式生成器”对话框中更改该表达式。
“数据分组”对话框中的组属性
如果不再需要在报表布局保留某一分组,可以删除它。
若要删除组带区
该组带区将从布局中删除。如果该组带区中包含有控件,将提示同时删去控件。
在报表中的组定义之后,可以更改它们的次序。当组重新排序时,组带区中定义的所有控件都将移到新的位置。重新排序组并不更改以前定义的控件。如果框或线条以前是相对于组带区的上部或底部定位的,那么它们仍将固定在组带区的原位置。
若要更改组的次序
如果创建了报表布局,则可以定制它。用“报表向导”和“快速报表”创建的布局已被定制,这种定制基于创建布局时所做的选择。例如“邮件标签向导”,它通过添加列和设置纸张大小完成页面设置的定制。可以使用“报表设计器”进一步定制布局和更改其当前设置。
定制报表布局的工具
可以更改数据环境、页面设置或报表控件。数据环境定义了报表中将包含的数据源,而页面设置定义了报表页面和报表带区的总体形状,报表控件定义了出现于页面上的数据项。
当规划报表时,通常会考虑页面的外观。例如页边距,纸张类型和所需的布局。本节讨论如何设置页边距、页面方向和报表页面带区的高度。
有关向报表页面添加列的详细内容,请参阅《程序员指南》中的第十二章“添加查询和报表”。
可以设置报表的左边距并为多列报表设置列宽和列间距。在这种情况下,“列”一词指的是页面横向上打印的记录的数目,不是单条记录的字段数目。“报表设计器”没有显示这种设置。它仅显示了页边距内的区域,其中包含了页面中包含一条记录的一列。因此,如果报表中有多列,当更改左边距时,列宽将自动更改以显示出新的页边距。
如果更改了纸张的大小和方向设置,请确认该方向适用于所选的纸张大小。例如,如果纸张定为信封,则方向必须设置为横向。
若要设置左边距
“页面设置”对话框
页面布局将按新的页边距显示。
设置在“页标头”和“页注脚”带区内的控件,将在报表的每个页面出现一次。有很多页的报表应在标头或注脚中包含报表名称、页码、日期和标签(如果合适)。
设置在细节带区内的控件对每条记录通常均打印一次。有关如何改变个别控件的打印选项内容,请参阅《程序员指南》中的第十二章“添加查询和报表”。
“标题”带区含有在报表开始时要打印的信息,“总结”带区含有报表结束时要打印的信息。它们都可以单独占用一页。带有总计表达式的域控件,放置在总结带区内后,将对表达式涉及的所有数据求和。
若要添加标题或总结带区
“报表设计器”将显示一个新带区。
插入“域控件”后,可以更改该控件的数据类型和打印格式。数据类型可以是字符型、数值型或日期型。每一种数据类型都有自己的格式选项,包括创建格式模板的选项。格式决定了打印报表或标签时,域控件如何显示。
一般地,您可能想把所有的字母输出转换成大写,在数值型输出中插入逗号或小数点,用货币格式显示数值型输出或者将一种日期型式转换成另一种。
可以为每一数据类型设置各种格式选项。
若要设置域控件格式
“编辑选项”区域将显示对于相应数据类型可用的格式选项。
注释 这些数据类型仅适用于报表控件。它反映了表达式的数据类型,但并不更改表中字段的数据类型。
“格式”对话框根据所选数据类型显示不同的选项。也可以创建一个格式模板,只要在“格式”框中输入字符就可以了。有关详细内容,请搜索“格式模板”。
可以通过两种途径调整控件内的内容。这种设置不更改控件在报表上的位置,只修改这个控件所在位置的内容。
若要调整域控件内的文本
若要调整域中的文本
数值型表达式的“格式”对话框
可以更改每个域控件或标签控件中文本的字体和大小。也可以更改报表的默认字体。
若要更改报表中的字体和大小
此时显示“字体”对话框。
若要更改默认字体
只有改变默认字体后,插入的控件才会反映出新设置的字体。
直线、矩形和圆形增强了报表布局的视觉效果。可用它们分割或强调报表中的部分内容。
使用“线条”控件,可以在报表布局中添加垂直和水平直线。通常,需要在报表主体内的详细内容和报表的页眉和页脚之间划线。
若要绘制线条
绘制线条后,可以移动或调整其大小,或者更改它的粗细和颜色。有关详细内容,请参阅本章稍后的“更改线条粗细或样式”部分。
可以在布局上绘制矩形,从而以醒目的方式组织打印在页面上的信息。也可以把它们作为报表控件、报表带区或者整个页面周围的边框使用。
若要绘制矩形
可以绘制圆形或圆角矩形。
若要绘制矩形或圆形
“圆角矩形”对话框
可以更改垂直、水平线条、矩形和圆角矩形所用线条的粗细(从细线到六磅粗的线),也可以更改线条的样式(从点线到点线和虚线的组合)。
若要更改线条的大小或样式
可以插入图片作为报表的一部分。例如,一个公司徽标可以出现在发票的页标头内。一个文件内的图片是静态的:它们不随每条记录或每组记录的变化而更改。如果想根据记录更改显示,则应插入通用字段。
若要添加图片
“报表图片”对话框
– 或者 –
选择对话按钮来选定图形文件。
可以更改域控件、标签、线条或矩形的颜色。
若要更改颜色
创建或更改控件时,可能希望包含描述。对话框为每个控件提供了注释框。这些注释保存在布局文件中,但不出现在打印的报表或标签中。
若要向控件添加注释
开始设置报表或标签的布局后,可以预览工作结果或打印一份报表或标签。定制期间可以随时进行预览。
有关设置打印选项或设置分页的详细内容,请参阅《程序员指南》中的第十二章“添加查询和报表”。
通过预览报表,不用打印就能看到它的页面外观。例如,可以检查数据列的对齐和间隔,或者查看报表是否返回所需的数据。有两个选择:显示整个页面或者缩小到一部分页面。
“预览”窗口有它自己的工具栏,使用其中的按钮可以一页一页地进行预览。
注释 如果得到如下提示“是否将所做更改保存到文件?”那么,您在选定关闭“预览”窗口时一定还选取了关闭布局文件。此时可以选定“取消”按钮回到“预览”,或者选定“保存”按钮保存所做更改并关闭文件。如果选定了“否”,将不保存对布局所做的任何更改。
若要预览布局
报表预览
使用“报表设计器”创建的报表或标签布局文件只是一个外壳,它把要打印的数据组织成令人满意的格式。它按数据源中记录出现的顺序处理记录。如果直接使用表内的数据,数据就不会在布局内按组排序。在打印一个报表文件之前,应该确认数据源中已对数据进行了正确的排序。如果表是数据库的一部分,可创建视图并且把它添加到报表的数据环境中,该视图将排序数据。如果数据源是一个自由表,可创建并运行查询,并将查询结果输出到报表中。有关视图的详细内容,请参阅第五章“使用视图更新数据”。有关查询的详细内容,请参阅第四章“检索数据”。有关控制报表中记录的详细内容,请参阅《程序员指南》中的第十二章“添加查询和报表”。如果不需要排序数据,可以从“报表设计器”中打印报表。
若要打印报表
注释 如果未设置数据环境,则显示“打开”对话框,并在其中列出一些表,从中可以选定要进行操作的一个表。
Visual FoxPro 把报表发送到打印机上。