如何把报表存成WORD文件和EXCEL文件(200分)

  • 主题发起人 主题发起人 scloudy
  • 开始时间 开始时间
S

scloudy

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠:
小弟的公司里作了一个设计报表的控件,程序员把设计完的报表存成.QR2文件,然后在程序设计
阶段如果要预览报表只要用一个PREVIEW方法(自制的)调用该报表即可,可是预览的报表只能存成
.QRD文件,现在要求把预览的报表存成WORD文件或者EXCEL文件,请问该如何实现?是不是要用到
VBA的相关知识,该如何运用呢?
现在我的困难是不能确定生成的report中各字段的位置和内容,也就无法画到WORD和EXCEL上了。
谢谢!

 
只要你能得到數據﹐你就能把它們存到Word或Excel上。
下面有一例﹐是打開一個Excel﹐然后存入數據的。
你先在Server菜單欄里選一個TExcelApplication控件出來﹐改名為EA1(只為了符合下面例子)
var aSheet:variant;
i,j:integer;
begin
EA1.Connect;
EA1.Visible[0]:=False;
EA1.Workbooks.Add(xlWBATWorkSheet,0);
asheet:=EA1.Worksheets.Item[1];
YouData.First;
for i:=0 to YouData.RecordCount-1 do begin
for j:=0 to YouData.FieldCount-1 do
aSheet.Cells[i,j].Value:=YouData.Fields[j].AsString;
YouData.Next;
end;
aSheet.SaveAs(YourFileName);
ShowMessage('文件已保存為'+YourFileName);
aSheet.Application.Quit;
end;
就行了。Word跟這個差不多啦。
 
谢谢大侠的帮助。
补充一下,我用的Delphi 4。
 
还有,我该如何取出报表栏位的位置和数据呢?
 
可以使用QuickReport3.05.
在Delphi自带的报表例子中就可以存为Execl数据,不过没有直接携带分发包。
需要安装QuickReport3.05。使用下面的方法,就可以寸为Excel 文件。
如果你没有,我可以发给你 840K.
我的邮箱:scott751111@elong.com

procedure SaveReport(FileName:String;SourceQReport:TQuickRep);
var
TempTQRXLSFilter:TQRXLSFilter;
begin

TempTQRXLSFilter:=TQRXLSFilter.Create(FileName);
SourceQReport.ExportToFilter(TempTQRXLSFilter) ;
TempTQRXLSFilter.Free;
end;
 
To scloudy 大虾:
好像不行吧,自己开发的报表格式怎么能保存成 Excel 格式呢?
最多只能把数据取出来填进去而已,而且还得挨个取填,页面信息,打印设置等是不用
想了,如果你愿意这样做,用 TExcelApplication 控件可以实现,看看这个:
<a href="DispQ.asp?LID=370453">OLE控件TOleContainer和Server类控件TExcelApplication中选择哪一个. 100分.</a>
 
首先谢谢各位的赐教,有几点小弟需要声明一下
1。我是在修改'QRDesign 1.21 for Quickreport 3.0.3 Professional for Delphi 4 ',而
不是直接修改Quickreport,所以不可能更新成Quickreport 3.0.5,否则将直接影响到
QRDesign的升级和版本问题。所以啦---比较麻烦啦。
2。还有,我用的是Delphi 4,所以没有TExcelApplication 控件呀---苦呀!:(
3。如果哪位大侠愿意的话,也可以去下载QRDesign 1.21,这样可以方便沟通--谢谢了。
http://www.thsd.de


 
我有几点要声明一下:
1、TQRXLSFilter只是把报表设计时的界面输出成XLS,而并不是把预览的界面保留下来,也就
是说没有数据;
2、我觉得应该有一个方法把预览的界面原样的覆盖到Excel文件中,就像VB的水晶报表功能,
它的输出格式与预览的界面一模一样,就像一个复制品一样,可是小弟就是不知道它是如何
实现的,是用TCanvas还是用COM实现的呢,望大侠指教。

谢谢!小弟愿意再奉献300大洋。
 
scloudy:如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
 
bakubaku说得有道理。
利用CELL进行填充,很慢的。
你可以自定义粘贴板,一下就可以实现你的要求了。速度很快的。
 
提供你输出到EXCEL的方法:

procedure TFrmCheckRecord.BitBtn4Click(Sender: TObject);
var i :integer;
begin
try
if ESumYear.Text='' then
begin
showmessage('请输入年度! 如:2000');
abort;
end;
bXls:=True;
ExcelApp:=CreateOleObject('Excel.Application');
MyWorkBook:=CreateOleobject('Excel.Sheet');
except
on Exception do raise exception.Create('无法打开Xls文件,请确认已 经安装EXCEL')
end;
ExcelApp.Visible := true;

MyworkBook:=ExcelApp.workBooks.Add;

//在此处插入读数据库及写Excel文档的代码
//其中写Excel文档的关键语句如下:
Myworkbook.worksheets[1].range['A1:G1'].Merge(True);
Myworkbook.worksheets[1].range['A1:G2'].HorizontalAlignment := $FFFFEFF4;
MyWorkBook.WorkSheets[1].Cells[1,1].Value := '金东纸业(江苏)有限公司 年终考核汇总表';

i := 2;
MyWorkBook.WorkSheets[1].Cells[i,1].Value := '员工编号';
MyWorkBook.WorkSheets[1].Cells[i,2].Value := '受评人姓名';
MyWorkBook.WorkSheets[1].Cells[i,3].Value := '部门编号';
MyWorkBook.WorkSheets[1].Cells[i,4].Value := '部门名称';
MyWorkBook.WorkSheets[1].Cells[i,5].Value := '到职日期';
MyWorkBook.WorkSheets[1].Cells[i,6].Value := '分数';
MyWorkBook.WorkSheets[1].Cells[i,7].Value := '年度';
Myworkbook.worksheets[1].Range['A1:G2'].Font.Color := clBlue;
Myworkbook.worksheets[1].Range['A1:G1'].Font.Name := '隶书';
Myworkbook.worksheets[1].Range['A1:G1'].Font.Size := 18;

i := 3;
with DM do
begin
QExcelMark.close;
QExcelMark.ParamByName('pYear').AsInteger:=strtoint(ESumYear.Text);
QExcelMark.open;
QExcelMark.First;
while not QExcelMark.eof do begin
MyWorkBook.WorkSheets[1].Cells[i,1].Value := QExcelMark.FieldByName('empNo').AsString;
MyWorkBook.WorkSheets[1].Cells[i,2].Value := QExcelMark.FieldByName('name').AsString;
MyWorkBook.WorkSheets[1].Cells[i,3].Value := QExcelMark.FieldByName('dptNo').AsString;
MyWorkBook.WorkSheets[1].Cells[i,4].Value := QExcelMark.FieldByName('dptName').AsString;
MyWorkBook.WorkSheets[1].Cells[i,5].Value := QExcelMark.FieldByName('dateStarted').Value;
MyWorkBook.WorkSheets[1].Cells[i,6].Value := QExcelMark.FieldByName('sumPoint').AsFloat;
MyWorkBook.WorkSheets[1].Cells[i,7].Value := QExcelMark.FieldByName('chkYear').Value;

QExcelMark.Next; Inc(i);
end;

end; // with DM do

end;
 
最后如何保存啊???
 
TExtraDevices for ReportBuilder 5.x
当前版本: 1.7
适用于: Delphi3 Delphi4 Delphi5 上载日期: 2000年6月23日
文件大小: 0.99MB
评述: 配合ReportBuilder 5.x使用,可将报表直接输出到Lotus, Quattro, Excel, Bitmap, JPEG, CSS2, HTML, PDF 和 RTF 等多种格式。
http://www.ocloud.com/download/dlcount.php?id=extradev17
 
自己公司写的报表写的报表系统,不用保存报表的全部信息。
实际上,在原先控件的基础上,增加保存各种文件类型的功能。
当然,要看源代码,因为原先的报表文件里已经保存了各种报表
的格式属性或表格的行数。列数,单元格属性等。
所以,只有真正看你公司自己的源代码才能彻底解决。
 
多人接受答案了。
 

Similar threads

后退
顶部