FastReport报表如何输出到Word中?

zhyj0626 2003-03-03 06:21:43
FastReport报表如何输出到Word中?
...全文
107 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
TOMWLD 2003-03-03
  • 打赏
  • 举报
回复
使用TfrRTFExport,在预览时即可另存为rtf格式了
FastReport 是非常强大的报表控件,它能使用户的应用程序快速有效地产生报表FastReport 提供了创建报表所需的所有工具,包括报表引擎,报表设计工具,预览器,对话框设计工具,以及Pascal-like 宏解释程序。 特点: 无需附加的动态链接库(DLL)就可提供快速、紧致、灵活的代码。 运行时可使用内建的功能强大且易于使用的设计工具。 带有"文本搜索"和"编辑"功能的MSWord-like报表预览。 常用的组件集:文本,线,图片,形状,对象链接和嵌入(OLE), RichText, 图表,Barcode。 可以创建自己的组件。 将报表输出为其它格式(例如:TXT, RTF, CSV, HTML, PDF 等等)。 内建的Pascal-like宏语言使得用户无需在Delphi环境就可以写出代码。它可以创建出使用其它工具所不能创建的报表FastReport包含了对话框表格。在准备创建报表前,用户可以使用这一表格来修改参数,而且可以不受限制地使用它。FastReport使用同一个设计工具来创建对话框,这一设计工具带有对话框控件的标准集:按钮,编辑框,复选框等等。 FastReport提供了多样的数据库引擎,它允许用户在运行时创建表格,查询程序及数据库组件。用户的报表和应用程序是完全独立的。 FastReport可以从各种数据源的表格、查询程序、数组及数据文件导入数据。 FastReport并不依赖于Borland公司的数据库引擎(BDE)。只要是基于标准Tdataset组件的数据库,都能使用FastReportFastReport也可在IB_Objects下工作。IB_Objects是用于Interbase数据库管理系统(DBMS)的功能强大且使用广泛的库。 在FastReport可使用22语言,这就使得用户的应用程序更易于国际化。
FastReport问题集 Q: 我怎样添加我的自定义函数? A: 使用 TfrReport.OnUserFunction 事件. 这里有一个简单的例子: procedure TForm1.frReport1UserFunction(const Name: String; p1, p2, p3: Variant; var val: Variant); begin if AnsiCompareText(‘SUMTOSTR‘, Name) = 0 then val := My_Convertion_Routine(frParser.Calc(p1)); end; 然后,你就可以在报表(任何表达式或脚本)的任何地方使用 SumToStr 函数了。 Q: 但是它仅仅能工作在一个TfrReport组件。可我想在任何地方(在所有的TfrReport组件)使用的我的自定义函数? A: 使 OnUserFunction event 句柄作为所有组件的公用句柄。如果你不能做到这一点,你需要创建函数库: type TMyFunctionLibrary = class(TfrFunctionLibrary) public constructor Create; override; procedure DoFunction(Fno: Integer; p1, p2, p3: Variant; var val: Variant); override; end; constructor TMyFunctionLibrary.Create; begin inherited Create; with List do begin Add(‘DATETOSTR‘); Add(‘SUMTOSTR‘); end; end; procedure TMyFunctionLibrary.DoFunction(Fno: Integer; p1, p2, p3: Variant; var val: Variant); begin val := 0; case Fno of 0: val := My_DateConvertion_Routine(frParser.Calc(p1)); 1: val := My_SumConvertion_Routine(frParser.Calc(p1)); end; end; 要注册函数库,调用 frRegisterFunctionLibrary(TMyFunctionLibrary); 要卸载函数库,调用 frUnRegisterFunctionLibrary(TMyFunctionLibrary); Q: 我怎样将我的函数添加到函数列表 (用表达式生成器)? A: 使用 frAddFunctionDesc 过程 (在FR_Class 单元): frAddFunctionDesc(FuncLib, ‘SUMTOSTR‘, ‘My functions‘, ‘SUMTOSTR()/Converts number to its verbal presentation.‘); 注意: "/" 符号是必须的! 它从它的描述分隔函数语法。 FuncLib 被声明为你自己的函数库 (如果你不使用函数库可以将其设置为nil). 当函数库未注册时,所有它的函数将自动从函数列表删除。 ---------------- 使用变量 ------------------------------------- Q: 我怎样编程实现填充变量列表(在数据词典)? A: 数据词典的所有变量及分类都被存储在 TfrReport.Dictionary.Variables . with frReport1.Dictionary do begin // 创建分类(名称用空白) Variables[‘ New category‘] := ‘‘; // 创建变量 Variables[‘New Variable‘] := ‘CustomerData.Customers."CustNo"‘; Variables[‘Another Variable‘] := ‘Page#‘; end; Q: 我定义了字符串变量: with frReport1.Dictionary do Variables[‘Month‘] := ‘March‘; 但是当我运行报表是,出现了错误,为什么? A: 因为 FastReport 假定数据词典的字符串变量值是一个表达式,它需要分析、计算它。 可以使用其它的方法: with frReport1.Dictionary do Variables[‘Month‘] := ‘‘‘‘ + ‘March‘ + ‘‘‘‘; 或者, 使用 frVariables 来传输固定数据到报表。 Q: 我不想在数据词典显示某些数据集? A: 使用 TfrReport.Dictionary.DisabledDatasets: with frReport1.Dictionary do begin // 关闭该数据集 DisabledDatasets.Add(‘CustomerData.Bio‘); // 或者, 关闭整个数据模块/窗体 DisabledDatasets.Add(‘CustomerData*‘); end; Q: 我怎样将数据传送到报表? A: 有几个方法可以实现它. 第一是使用全局对象 frVariables (在 FR_Class 单元被定义): frVariables[‘My variable‘] := 10; 这段代码创建了一个名称为“My variable”,值为 10 的变量。这是最好的传输固定数据的报表的方法。 第二种方法是使用 TfrReport.OnGetValue 事件. 这可以使用这个方法来传送动态数据、记录等。 procedure TForm1.frReport1GetValue(ParName: String; var ParValue: Variant); begin if ParName = ‘MyField‘ then ParValue := Table1MyField.Value; end; 最后, 第三种方法是通过编程在数据词典定义变量(可以参考以前的问题): with frReport1.Dictionary do begin Variables[‘MyVariable‘] := ‘CustomerData.Customers."CustNo"‘; Variables[‘Another Variable‘] := ‘10‘; end; Q: 我能在报表和程序间传送数据吗? A: 使用 frVariables 对象. 如果你在报表的任何对象的脚本写入以下代码: MyVariable := 10 那么,在你的程序,你可以使用以下代码来获取 MyVariable 的值: v := frVariables[‘MyVariable‘]; ---------------- 脚本 (FastReport Pascal) --------------------------------- Q: Band 是否可以使用脚本? A: 当然. 选择 band ,然后按 Ctrl+Enter 或在对象浏览器选择 "OnBeforePrint" 属性。 Q: 报表是否可以使用脚本? A: 当然. 选择页 (在空白处单击) ,然后在对象浏览器选择 "OnBeforePrint" 属性。如果该页是一个对话框窗体,那么这个属性就是 "OnActivate". Q: 我有两个对象: Memo1 和 Memo2. 我能否在 Memo1 的脚本调用 Memo2 的属性和方法? A: 当然, 例如,你可以这样做: 对象名.属性名. Q: 在脚本,我可以使用对象的哪些属性? A: 几乎所有你能在对象浏览器看到的属性。例如,可以使用 Font.Name, Font.Size等来存取字体属性。 ---------------- 其它问题 -------------------------------------------- Q: 怎样改变多页报表某一页的顺序? A: 拖动页标签到目的位置。 Q: 我想查看所有的字段及变量,我想在报表使用列表来实现它? A: 设置 TfrReport.MixVariablesAndDBFields := True.现在,所有的数据字段及变量可在“插入数据字段”对话框可存取了。 Q: 我不想显示导入选项对话框? A: 在导入组件(比如,TfrTextExport)设置所有必需的选项,然后通过设置ShowDialog属性为False来关闭此对话框。 Q: 为什么 TotalPages 变量不起作用? 它总是返回 0. A: 在你的报表设置 Two-pass 选项. 要设置它,你需要在报表设计器的“文件”菜单,打开“报表选项”对话框。 Q: 我用BLOB字段来存储我的报表。当我运行报表设计器时,它显示我的报表未命名? A: 在运行报表设计器前,这样做: frReport1.FileName := ‘Name of my report‘; Q: 我想在重新定义报表设计器的“打开”及“保存”按钮的功能? A: 查看 TfrDesigner 组件. 它有几个必需的事件: OnLoadReport 和 OnSaveReport. 这里有一小段代码例子: procedure TForm1.frDesigner1LoadReport(Report: TfrReport; var ReportName: String; var Opened: Boolean); begin with MyOpenDialog do begin Opened := ShowModal = mrOk; if Opened then begin Report.LoadFromBlobField(…); ReportName := …; end; end; end; procedure TForm1.frDesigner1SaveReport(Report: TfrReport; var ReportName: String; SaveAs: Boolean; var Saved: Boolean); begin if SaveAs then with MySaveDialog do begin Saved := ShowModal = mrOk; if Saved then begin Report.SaveToBlobField(…); ReportName := …; end; end else Report.SaveToBlobField(…); end; Q: 在 QR , 我可以写这样的代码: QRLabel1.Caption := ‘Some text‘. 我可以用FR这样做吗? A: FR 对象并不是一个组件 (这并不像 QR, RB). 但使用 TfrReport.FindObject 方法可以通过对象名称找到该对象。 var t: TfrMemoView; begin t := TfrMemoView(frReport1.FindObject(‘Memo1‘)); if t <> nil then t.Memo.Text := ‘FastReport‘; end; Q: 我想在用户预览(TfrPreview组件)自定义热键? A: 这个组件有个窗口: Tform 属性. 将自定义句柄指定到 Window.OnKeyDown 属性. Q: Fast Report 2.4 不能装载 FreeReport 2.21 文件? A: 这仅需要使用16进制数改变报表文件的第一字节,然后在源代码修改下面的部分。在这些修改之后, 装载报表并保存它. 最后,返回到源代码处. FR_Class: function ReadString(Stream: Tstream): String; begin { if frVersion >= 23 then} Result := frReadString(Stream) {else Result := frReadString22(Stream);} end; procedure ReadMemo(Stream: Tstream; Memo: Tstrings); begin { if frVersion >= 23 then} frReadMemo(Stream, Memo){ else frReadMemo22(Stream, Memo);} end; FR_Utils: procedure frReadMemo(Stream: Tstream; l: Tstrings); var s: String; b: Byte; n: Word; begin l.Clear; l.Text := frReadString(Stream); exit; Stream.Read(n, 2); if n > 0 then repeat Stream.Read(n, 2); SetLength(s, n); Stream.Read(s[1], n); l.Add(s); Stream.Read(b, 1); until b = 0 else Stream.Read(b, 1); end; function frReadString(Stream: Tstream): String; var s: String; n: Integer; b: Byte; begin Stream.Read(n, 4); SetLength(s, n); Stream.Read(s[1], n); if (n > 0) and (s[n] = #$0A) then SetLength(s, n - 2); // Stream.Read(b, 1); Result := s; end; Q: 怎样不在打印预览打印报表? A: 这里有一段代码: frReport1.PrepareReport; frReport1.PrintPreparedReport(‘‘, 1, True, frAll); 或 frReport1.PrintPreparedReportDlg; Q: 我想在报表旋转图片。问题是这张图片是由我的应用程序生成的。是否有方法可以在打印前将这幅图片装载到报表? A: 使用 TfrReport.OnBeforePrint 事件: if View.Name = ‘Picture1‘ then TfrPictureView(View).Picture.LoadFromFile(…) 或 .Assign 或 .你所想要做的任何事情
关于FastReport的说明 FastReport是高弹性的报表设计器,用于报表的数据可以从任何类型的数据源获取,包含字符列表,BDE数据库,ADO数据源(不使用BDE),Interbase(使用IBO),Pascal数组和记录,以及一些不常用的数据源。 整个FastReport系统是用Delphi的Pascal编写的。FastReport不需要动态链接库,但需在你的项目占用大约400kb(Delphi 5)。如果你想最终用户拥有设计能力,这将在你的.EXE增加大约500kb。虽然这看上去比较大,但这只是其它设计的几分之一。你同样应该考虑到FastReport不仅仅只是包含最终用户更改报表设计的能力,还能够适应查询和数据库的变化。FastReport还包含自己的脚本语言,让应用程序和最终用户能够更容易地改变报表。如果你的大部分应用使用FastReport,你可以简单地配置FastReport BPL(大约1400kb)而所有你的应用程序只需要保留很少的一部分。 你可以发现FastReport有一个非常吸引人的用户界面,使用最新的用户界面组件,例如可停靠的工具栏。你的最终用户将会非常愿意使用这个设计器,只需使用鼠标就可以创建大多数报表FastReport是名副其实的快速报表:较其它一些Delphi报表设计器而言,你可以发现没有什么可以接近于它的开发速度。报表预览窗口一直是大多数报表设计器的弱点,高品质的外观,赋于你的应用程序非常专业的用户界面。 FastReport是一个已经拥有三年历史的非常成熟的报表设计器,成长使它拥有其它Delphi报表设计器所不能相比的诸多先进特性。 FastReport的历史 FastReport应运而生。当我在1997年开发一个工资系统时,我寻找周围的报表设计器能够让我非常简单地创建报表,而且能够在运行时编辑报表。可是,那时没有一个免费组件是我所需要的。这样,我就想创建自己的报表设计器,于是FastReport诞生了。 FastReport的基本思想来源于Windows版的“1S-Bookkeeping”6.0,因此报表的基本元素是包含多行文本的矩形。这些文本既包含标准文本又包含变量。变量,像数据字段,用方括号突出显示。报表生成器的第一个版本仅支持一个区域,但它允许创建多层报表。它还不是一个组件,只是一些单元的集合。 后来,在1998年,报表生成器变成一个完整的Delphi组件。在这时,它命名为“FastReport”,并提供增强的函数功能。现在,FastReport是一个完整的,产品化的可视化报表生成器。它包含以下的特点: l 构建报表的生成器,也可以在运行时使用(重要的是用于最终用户报表的更改!)。 l 类似于MS Word的打印预览。 l 直接编译在Delphi EXE,不需要动态链接库。 l 支持JPEG(使用Delphi类库)和GIF(使用RX类库)。 l 拥有比QuickReport1执行更快速的性能。 l 简洁,纯Delphi代码,比QR3有更小的设计器。 l 类似QuickReportReportBuild的强大的区域导向报表生成器。 l 包含许多非常有用的组件:文本,线段,图像,图形,OLE对象,格式文本,RX Rich2.0,图表,图表,条形码,带阴影的文本。 l 报表生成的页数无限制。 l 多页报表;复合报表;子报表;分组;多栏报表;主从报表;透视表;二次表; l 打印过程全控制;支持所有纸张尺寸; l TXT,RTF(用于图形),CSV,HTML(用于图像)输出转换器。 l 在报表预览查找文本。 l 附加的TfrDataStorage组件允许在运行时创建数据表和查询。这对于需要完全控制报告过程的最终用户报表特别有用。 l 报表生成的页面可以被修改。 l 内置的Pascal解释器可用于非常灵活的报告!语法加亮的支持是使用一个免费的软件库。 l 报表数据可以保存于Delphi的DFM文件,外部文件,数据表的BLOB字段或数据流。 l FastReport可以非常容易地用于创建你自己的报表组件,向导和函数类库。 l 报表的核心部分支持IBObject(不需要BDE)。 l 支持Interbase表达式(IBX). l 报表核心支持ActiveX Data Object(ADO)。 l 完善的数据管理函数(不需要BDE)。
FastReport VCL工作在Borland Delphi 2-7及Borland C++Builder 1-6环境下。它是用对象语言Pascal来写的,并用到了Borland VCL库。 特征: 无需附加的动态链接库(DLL)就可提供快速、紧致、灵活的代码。 运行时可使用内建的功能强大且易于使用的设计工具。 带有"文本搜索"和"编辑"功能的MSWord-like报表预览。 常用的组件集:文本,线,图片,形状,对象链接和嵌入(OLE), RichText, 图表,Barcode。 可以创建自己的组件。 将报表输出为其它格式(例如:TXT, RTF, CSV, HTML, PDF 等等)。 内建的Pascal-like宏语言使得用户无需在Delphi环境就可以写出代码。它可以创建出使用其它工具所不能创建的报表FastReport包含了对话框表格。在准备创建报表前,用户可以使用这一表格来修改参数,而且可以不受限制地使用它。FastReport使用同一个设计工具来创建对话框,这一设计工具带有对话框控件的标准集:按钮,编辑框,复选框等等。 FastReport提供了多样的数据库引擎,它允许用户在运行时创建表格,查询程序及数据库组件。用户的报表和应用程序是完全独立的。 FastReport可以从各种数据源的表格、查询程序、数组及数据文件导入数据。 FastReport并不依赖于Borland公司的数据库引擎(BDE)。只要是基于标准Tdataset组件的数据库,都能使用FastReportFastReport也可在IB_Objects下工作。IB_Objects是用于Interbase数据库管理系统(DBMS)的功能强大且使用广泛的库。 在FastReport可使用22语言,这就使得用户的应用程序更易于国际化。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧