谢谢
解决方案 »
- delphi excel批量导入SQL人事资料表
- 如何更改输出的exe名字?
- 求RSA源码,RSA单元文件和GINT单元文件
- 如何在mdi窗口中作登陆窗口?
- 数据导入问题!!解决另加50分!!!
- 使用ADOQuery1控件,假如有个字段UserName,我要通过这个字段得到一个值,就象asp的rs("UserName")
- FastReport打印
- D6的Sample下面的VCL怎么没有reference啊?急需TShellTreeView和TShellListView的。
- 如何获得未知API函数的调用形式及参数?
- 无奈!!!!
- ★★如何计算π的值并使其不受数据类型精度的限制?(请给出具体的程序源码)
- 请问如何改变Project1.exe运行后,在windows底下状态栏的题目名称,form.caption已经设置了,但只是 windows的上边变成我设置的了,底下
2 恭喜阿,linzhisong (無聊) ,长星星了
笔者在实际应用中发现,报表的内容一般很少变动,但其字体格式及版式是经常变动的,而且有时用户为了某种需要,不想修改数据库的真实内容而又要改变报表内容。如果用ReportSmith可以解决前者问题,但对于后者则无能为力了,且其界面是英文的,不合用户习惯。如果用3.0中的TQReport的报表部件,则两者都不能实时解决,必须修改原代码后重新编译才能使用。而使用Word及Excel则完全可以克服以上不足。具体实现如下(以Word实现为例): 首先用Word编辑报表格式,并排好版,把将要输出的数据项用表单域代替,并取名。这里我们暂时假设有表单域Item1及Item2(均为文本型),将这个文档存为模板文件Example.dot,然后按如下步骤进行:1)运行Delphi3,在 Form1 里加入一个 System 部件集里的 TDdeClientCov 部件,取名为 DdeExample 将其 ConnectMode 设为 ddeManual(手动方式);将DdeService设为‘(WinWord)’;将ServiceApplication设为‘WinWord’。2)编写一个自定义过程,以激活Word,如下:procedure Tform1.WordActive(Cmds: TStrings);
var
WordPath: String;
begin
if(not DdeExample.OpenLink) then {判断是否巳动态链接}
begin
if(FindWindow('OpusApp', nil)=0) then
begin
WordPath := 'C:\msoffice\winword';
if(WordPath='') then
ShowMessage('中文Word未安装或未设置路径,请安装设置Word中文版。')
else
begin
DdeExample.ServiceApplication := WordPath+'\Winword.exe';
if(DdeExample.OpenLink) then {如果巳动态链接执行宏命令}
DdeExample.ExecuteMacroLines(Cmds, False)
else
ShowMessage('无法启动Word中文版!');
DdeExample.ServiceApplication := 'WinWord.exe';
end;
end
else
begin{如果巳动态链接执行宏命令}
DdeExample.ExecuteMacroLines(Cmds, False);
end;
end
else
DdeExample.ExecuteMacroLines(Cmds, false);
end;
end; 在private声明区里加入如下:
procedure ActiveWord(Cmds: TStrings);3)在Form1中加入一个按钮Button1,在其onclick事件里写如下代码:
procedure TForm1.Button1Click(Sender: TObject);
var
Cmds:TStringList;{创建Cmds}
TempItem1, TempItem2:String;
begin
cmds:=TStringList.Create;
cmds.Clear;
TempItem1:='数据项一';
TempItem2:='数据项二';
with Cmds do
begin
Clear;
Add('[FileNew.Template ="Example.Dot"]');{打开模板文件Example.Dot}
Add('[AppMaximize]');{文档最大化}
Add('[SetFormResult"Item1", "'+TempItem1+'"]');
{将数据TempItem1传给表单域Item1}
Add('[SetFormResult"Item2", "'+TempItem2+'"]');
{将数据TempItem2传给表单域Item2}
end;
WordActive(DdeExample, Cmds);{调用自定义过程}
Cmds.Free;{释放Cmds}
end; 运行这个程序,单击Button1,大家可以发现Word被启动了,屏幕上出现了:数据项一;数据项二两个数据项。最后,大家可以任意修改本报表的格式及数据,因为这时这个报表与具体的应用程序巳没有关系了。 本例中用的是中文Word6或中文Word7。由于Word97的宏命令巳变为Visual Basic语句,如大家想用Word97实现,请将其宏命令改变为相应的代码。 这是个简单的示例,大家可以利用Word的宏录制功能,录取更多的宏(如自动生成表格、填充文字、变动字体等宏命令),并与数据库的各种表联系起来,依次加入Cmds中即可实现您所要求的更复杂的功能。