如何把数据库中的内容(报表的格式)导入到word与excel中呢? (50分)

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

skyherohuang

Unregistered / Unconfirmed
GUEST, unregistred user!
如何实现数据库中的内容导入到word与excel中,并且就像用quickrep制作一样可以有主/从表
而且有表头,页头等.
积分不多只能捐出50,望多多指教!!
报表的格式如下:

// (图像) //
// 公司的微标 //公司名称
// //--------------------------页首
日期:2003-1-4
顾客号: 1 公司业务员:andy---------表一
产品图片: 产品货号: 数量: 价格:
001 20 30
002 20 90
.....
.......
.......
..........----------------------------------------------------------表2
总共:?斤 ?元
备注:1。
2。
3。---------------------------------------------------------页尾。


关健问题是::--怎么样判别打印了一页,并且下一页同样以这样的格式打印?????图片怎么样播入??????

各位仁兄谁有好主意,请MAIL:skyherohuang@hotmail.com
 
先找找以前的贴子,会让你满意的!
 
TO:ANDY-LIM在哪里呀,我找不到,详细一点好吗
 
提供你输出到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;

 
Excel强大的数据录入功能极打印预览功能是其他大多数程序望尘莫及的,能不能在我们自己编的程序中调用Excel的数据录入功能及预览功能呢。实际上,使用Delphi你能完全控制Excel或Word的所有功能。虽然来自Excel对象层次内部非常复杂,但我们通过使用Variant(在OLE自动化中使用的Delphi的安全数组版本)通常可以简洁,容易的实现对Excel的控制。

  下面,我将我实际运用的一些方法介绍给大家:

1.启动Excel

  在Uses中加入Comobj;

var
 v:Variant;
begin
 v:=CreateOleobject(‘Excel.Application’);
 v.Visible:=true;
end;

  其中,Comobj中包含了用来检索OLE的对象和向其传发命令的例程,第一行代码启动Excel,执行后Excel会在内存中出现,因此第二行代码使之可见。

2.关闭Excel

  在创建了Excel Application对象后,调用它的Quit方法完成关闭事件。

If not varIsEmpty(v) then v.quit;

  如果需要在关闭前确定是否存盘,加入:

v.DiaplayAlert:=true; //确定存盘
v.DiaplayAlert:=false;//不存盘,直接退出

3.加入工作表及对其表格内容的操作

var
 Sheet: Variant;
begin
 v.workbook.add;
 v.Workbooks.Add;
 v.Workbooks[1].WorkSheets[1].Name := '数据录入';
 Sheet:= v.Workbooks[1].WorkSheets['数据录入'];
 Sheet.Cells[1,1] :='试验'; Label1.Caption:=Sheet.Cells[1,1];
End;

  Sheet对象是很多页的集合,其他的Workbooks是工作薄的集合,WorkSheets对象是工作表的集合,Charts对象是图表的集合。

4.格式的设置

var
 Range: Variant;
begin
 Range := v.Workbooks[1].WorkSheets['数据录入'].Range['A2:M2’]; //单元格从A2到M2 Range.Merge; //合并单元格
 Range.Rows.RowHeight := 20; //设置行高
 Range.Borders.LineStyle := 1; //加边框
 Range.Columns[2].ColumnWidth := 12; // 设置列宽
 Range.FormulaR1C1 := '标题';
 Range.HorizontalAlignment := xlCenter; //水平对齐方式
 Range.VerticalAlignment := xlCenter; //垂直对齐方式
 Range.Characters.Font.Name := '宋体'; //字体
 Range.Characters.Font.FontStyle := '加粗';
 Range.Characters.Font.Size := 12;
 Range.Characters.Font.OutlineFont := False; //是否有下划线
 Range.Characters.Font.ColorIndex := xlAutomatic; //颜色
end;

  其他的属性可以察看MSDN或者其他资料。

5. 打印的设置

var
 Sheet: Variant;
begin
 Sheet := XLApp1.Workbooks[1].WorkSheets['数据录入'];
 Sheet.PageSetup.PrintTitleRows :='$1:$3'; //页眉
 Sheet.PageSetup.PrintTitleColumns := '';
 Sheet.PageSetup.LeftFooter := ' 注:页脚'+' 总共&N页'+'--第&P页'; //页脚
 Sheet.PageSetup.LeftMargin := 30; //设置边距
 Sheet.PageSetup.RightMargin := 30;
 Sheet.PageSetup.TopMargin := 30;
 Sheet.PageSetup.BottomMargin := 50;
 Sheet.PageSetup.PrintQuality := 400; //分辨率
 Sheet.PageSetup.CenterHorizontally := True;//是否水平居中
 Sheet.PageSetup.CenterVertically := True; //是否垂直居中
 Sheet.PageSetup.Orientation := 2; //横向打印
 Sheet.PageSetup.Draft := False; //非草稿模式
 Sheet.PageSetup.FirstPageNumber := xlAutomatic;
 Sheet.PageSetup.BlackAndWhite := True; //黑白稿
 Sheet.PageSetup.Zoom := 100; //缩放
 sheet.PrintPreView; //打印预览
end;

  好了,到这,我已经介绍了大部分常用的控制方法,试试吧。提醒你,你的机子装了Excel没有……
 
如何将查询的值导出到EXECEL中
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,row,column:integer;
begin
Try
ExcelApplication1.Connect;
Except
MessageDlg('Excel 没有安装',mtError, [mbOk], 0);
Abort;
End;
ExcelApplication1.Visible[0]:=true;
ExcelApplication1.Caption:='Excel Not Istalled!';
ExcelApplication1.Workbooks.Add(Null,0);
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);
query1.Open;
row:=1;
column:=1;
for j:= 0 to Query1.FieldCount-1 do
begin
ExcelWorksheet1.Cells.Item[row,column]:=query1.fields[j].FieldName;
column:=column+1;
end;
row:=2;
While Not(query1.Eof) do
begin
column:=1;
for i:=1 to query1.FieldCount do
begin
ExcelWorksheet1.Cells.Item[row,column]:=query1.fields[i-1].AsString;
column:=column+1;
end;
query1.Next;
row:=row+1;
end;
query1.first;
ExcelWorkbook1.Disconnect;
ExcelWorksheet1.Disconnect;
ExcelApplication1.DisConnect;
end;


如何在DELPHI中操作EXCEL电子表格

??EXCEL电子表格作为办公软件OFFICE中的重要组成部份,是日常办公系统的主要助手,
因此许多日常所需的业务方面的数据通常是通过电子表格存取。有时我们需要从日常工作
中创建的EXCEL中取得数据进行操作、打印、查询,统计等工作。在这里我将介绍如何利
用delphi完成EXCEL电子表格中数据的操作。

一、 新建一项目,从控件栏servers中分别选取控件:excelapplication、
excelworkbook1、excelworksheet,放到主窗体from1中,并加入stringgrid、
三个按钮、五个显示字段内容的EDIT、二个操作显示记录的label、一个用于打
开EXCEL电子表格的控件opendialog等

二、选择excel表'按钮,用于打开EXCEL文件,其代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
opendialog1.InitialDir:=ExtractFileDir(paramstr(0));//文件的打存放初始路径
opendialog1.Execute;
Try
ExcelApplication1.Connect;//EXCEL应用程序
Except
MessageDlg('Excel may not be installed',mtError, [mbOk], 0);
Abort;
End;
ExcelApplication1.Visible[0]:=True;
ExcelApplication1.Caption:='Excel Application';
try
excelapplication1.Workbooks.Open(opendialog1.FileName,
null,null,null,null,null,null,null,null,null,null,null,null,0);//打开指定
的EXCEL 文件
except
begin
ExcelApplication1.Disconnect;//出现异常情况时关闭
ExcelApplication1.Quit;showmessage('请选择EXCEL电子表格!');
exit;
end;
end;
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
//ExcelWorkbook1与Eexcelapplication1建立连接
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);
//Excelworksheet1与Excelworkbook1建立连接
//开始从EXCEL中取数,放到stringgrid1中,取完数后关闭EXCEL
for i:=1 to 1000 do//最大取值1000
for j:=1 to 6 do
begin
if trim(excelworksheet1.cells.item[i+1,1])<>'' then
begin
stringgrid1.rowCount:=i+1;
stringgrid1.Cells[j,i]:=ExcelWorksheet1.Cells.Item[i+1,j];
end
else
begin
label3.caption:=inttostr(i-1);
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
//将第一条数据赋给编辑框
edit2.text:=stringgrid1.Cells[1,1];
edit1.text:=stringgrid1.Cells[2,1];
edit3.text:=stringgrid1.Cells[3,1];
edit4.text:=stringgrid1.Cells[4,1];
edit5.text:=stringgrid1.Cells[5,1];
exit;
end;
end;
end;
??
三、'下一条记录'按钮,完成记录向下移动,代码如下:
procedure TForm1.Button2Click(Sender: TObject);
var x:integer;
begin
x:=stringgrid1.row+1;
if x<> stringgrid1.RowCount then
begin
stringgrid1.row:=stringgrid1.row+1;
label1.caption:=inttostr(x);
edit2.text:=stringgrid1.Cells[1,x];
edit1.text:=stringgrid1.Cells[2,x];
edit3.text:=stringgrid1.Cells[3,x];
edit4.text:=stringgrid1.Cells[4,x];
edit5.text:=stringgrid1.Cells[5,x];
exit;
end
else
showmessage('已到第一条记录!');
end;

四、'上一条记录',完成记录上移,代码如下:
var x:integer;
begin
x:=stringgrid1.row-1;
if x<>0 then
begin
stringgrid1.row:=stringgrid1.row-1;
label1.caption:=inttostr(x);
edit2.text:=stringgrid1.Cells[1,x];
edit1.text:=stringgrid1.Cells[2,x];
edit3.text:=stringgrid1.Cells[3,x];
edit4.text:=stringgrid1.Cells[4,x];
edit5.text:=stringgrid1.Cells[5,x];
exit;
end
else
showmessage('已到最后一条记录!');
end;

五、stringgrid中上下移动时代码:
procedure TForm1.StringGrid1Click(Sender: TObject);
var i:integer;
begin
i:=stringgrid1.Row;
label1.caption:=inttostr(i);
edit1.text:=stringgrid1.Cells[2,i];
edit2.text:=stringgrid1.Cells[1,i];
edit3.text:=stringgrid1.Cells[3,i];
edit4.text:=stringgrid1.Cells[4,i];
edit5.text:=stringgrid1.Cells[5,i];
end;


六、运行程序,点击按钮1打开excel表格。程序将启动EXCEL,并打开了选择的电
子表格,这时请不要关闭EXCEL,当程序从EXCEL取数完毕将自动关闭EXCEL程序,
应用程序取出了EXCEL数据,显示在stringgrid中,并将第一笔数据各字段的值赋
给了左边的对应的edit字段。点击按钮2、按钮3可以查看下一条或上一条记录。
也可以使用光标在stringgrid1上移动。
??同时我们也可以对stringgrid中的记录进行查询、定位。相反,也可以将数据库
中的数据输入到EXCEL中。 总之,只要我们从EXCEL提取出数据,并保存到stringgrid
中,我们就可以进行相应操作,如统计、查询、重新输出,使平进的EXCEL电子表格中
的数据在应用程序中得到利用。



var
Excelapp1:OleVariant;
cell:string;
try
ExcelApp1:= CreateOleObject('Excel.Application');
ExcelApp1.WorkBooks.open(filename1);
cell:=ExcelApp1.ActiveSheet.Cells[i,j];

finally
ExcelApp1.WorkBooks.close;
ExcelApp1.Quit;
end;
用Excelapp1可以读写Excel文件,不过机器上必须装有Excel
 
还有一种方法,就是用TADOConnection对象连接EXECEL.
具体就参见李维的<<Delphi ADO/MTS/Com>>
 
导入WORD和导入EXCEL都不难,关键后面这个问题有些困难!
 
这是我的代码:保证没问题
Self.ExcelApplication1.Visible[0] := False;
Self.ExcelApplication1.Caption := 'Excel Application';
Self.ExcelApplication1.Workbooks.Add(null,0);
Self.ExcelWorkbook1.ConnectTo(Self.ExcelApplication1.Workbooks[1]);
Self.ExcelWorksheet1.ConnectTo(Self.ExcelWorkbook1.Worksheets[1] as _Worksheet);
row := 1;
Self.ADOStoredProc1.DisableControls;
Self.ADOStoredProc1.First;
while not (Self.ADOStoredProc1.Eof) do
begin
column := 1;
for i := 0 to self.ADOStoredProc1.FieldCount - 1 do
begin
Self.ExcelWorksheet1.Cells.Item[row,column] := Self.ADOStoredProc1.fields.AsString;
column:=column+1;
end;
Self.ADOStoredProc1.Next;
row:=row+1;
end;
Self.ADOStoredProc1.EnableControls;
savedialog1.Filter:='Excel files(*.xls)';
if savedialog1.Execute Then
begin
// ExcelWorkBook1.SaveCopyAs(savedialog1.filename);
// Self.ExcelApplication1.Save(savedialog1.filename);
Self.ExcelWorksheet1.SaveAs(savedialog1.filename);
end;
Self.ExcelApplication1.Disconnect;
Self.ExcelApplication1.Quit;
 
其实数据导出到word、excel就是用vba操作office的过程,看一下vba方面的资料,问题就会
解决了!!
 
楼上的意见不错,但是vba和delphi的调用还是区别很大的
 
后退
顶部