我想把一个表中的数据直接存入EXCEL文件,不通过OLE AUTOMATION怎能么做??(100分)

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

sharer

Unregistered / Unconfirmed
GUEST, unregistred user!
我想把一个表中的数据直接存入EXCEL文件,不通过OLE AUTOMATION怎能么做??
 
下面我给出我最近做的《自考生成绩报表系统》的原码,我想这一定能满足你的要
求:(动态创建Excel对象,Excel表是事先画好地)
unit UntFrmMain;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, StdCtrls, Buttons, ExtCtrls, ComCtrls, Grids, DBGrids,
DBCtrls;

type
TFrmMain = class(TForm)
pnlTool: TPanel;
BitBtnPrint: TBitBtn;
BitBtnQuit: TBitBtn;
DSPrint: TDataSource;
DBNavigator: TDBNavigator;
DBGridPrint: TDBGrid;
StatusBar: TStatusBar;
EdtGrade: TEdit;
Label1: TLabel;
EdtYear: TEdit;
Label2: TLabel;
qryPrint: TTable;
EdtPage: TEdit;
procedure BitBtnQuitClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtnPrintClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FrmMain: TFrmMain;
ThisNo : Integer;
implementation
Uses ComObj;//这一行不可少呦
{$R *.DFM}

procedure TFrmMain.BitBtnQuitClick(Sender: TObject);
begin
if QryPrint.Active then
QryPrint.Close;
Close;
end;

procedure TFrmMain.FormCreate(Sender: TObject);
begin
Qryprint.DatabaseName:=ExtractFileDir(Application.ExeName);
QryPrint.TableName:='DBInfo.DB';
if Qryprint.Active=False then Qryprint.Active:=True;
ThisNo:=0;
end;

procedure TFrmMain.BitBtnPrintClick(Sender: TObject);
Var
I,J:Integer;
QryPrintView:TQuery;
ExcelVar:Variant;
cellposition:string;
Const
SQLStr='SELECT ID, Name, Sex, Political, Birthday, Post, FinalRec, Code1, Code2, Code3, Code4, Remark '+
'FROM "DBInfo.db" Dbinfo';

HRang:array[1..14] of string=('A','B','C','D','E','F','G','H','I','J','K','L','M','N');
begin
QryPrintView := TQuery.Create(Self);
try
QryprintView.DataBaseName:=ExtractFileDir(Application.ExeName);
QryprintView.Close;
QryprintView.SQL.Clear;
QryprintView.SQL.Add(Sqlstr);
QryprintView.Open;
QryPrintView.First;
QryprintView.MoveBy(ThisNo);
if QryPrintView.Eof then Exit;
ExcelVar:=CreateOleObject('Excel.Application');
ExcelVar.WorkBooks.Open(ExtractFilePath(ParamStr(0))+'StuRegister.xls');//事先画好的Excel表

ExcelVar.range['A1'].value:=EdtGrade.Text;
ExcelVar.range['C1'].value:=EdtYear.Text;

for i:=5 to 24 do
begin
for j:=1 to QryprintView.fieldcount do
begin
cellposition:=hrang[j]+inttostr(i);
ExcelVar.range[cellposition].value:=QryprintView.fields[j-1].asstring;
end;
if Not QryPrintView.Eof then
QryprintView.next
Else
Begin
ShowMessage('打印数据输出完毕!!!');
Break;
End;
end;

finally
QryPrintView.Free;
end;
ExcelVar.application.Visible:=True;
ExcelVar.activesheet.printpreview;
ThisNo:=ThisNo+20;
EdtPage.Text:='第'+IntToStr(Round(ThisNo/20)+1)+'页';
end;

end.

 
uses ComObj;
var
Eapp,EWsht:variant;
begin
Eapp := unassigned;
EWSht := unassigned;
EApp := CreateOleObject('Excel.Application');
 
续上:
EApp.Visible := true;
EWSht := EApp.WorkBooks[1].WorkSheets[1];
For i := 0 To IntCount - 1 Do
EWSht.Cells.Item[i + 5, 4] := SgdSnc.Cells[3, i + 2];
 
不通过OLE AUTOMATION生成EXCEL文件,"楼"上的方工都有通过OLE AUTOMATION方式
 
使用ADOExpress创建Microsoft Excel 浏览器
作者: David Intersimone
日期: 2000年08月22日
.打开Delphi,创建新的Application。

2.在Form中放置ADODataSet

3.将CommandType的属性设为cmdTableDirect。
ADODataSet和BDEDataSet访问数据表相类似。对于ADO来说,要说明数据源然后利用数据感
知(data-aware)控件将数据显示在应用程序中。首先要设置的是CommandType,它用来告
诉ADO引擎准备调用什么样的命令。

4.设置ConnectionString属性
ConnectionString属性告诉ADO如何联接数据源。点击省略号会显示ConnectionString对话
框。我们要自己创建ConnectionString所以选择Use Connection String,然后点击Build
按钮激活Data Link Properties对话框。首先要做的是选择我们要用的数据提供者(Data
Provider)以取得数据,以为要访问的对象是Excel,所以我们选择Microsoft JET OLEDB
4.0 Provider,点击NEXT。下一步是要选择联接的具体对象,通过Browse按钮,选择任意
一个Excel文件或者使用我们提供的样例文件Forecast.xls。在测试ConnectionString之前,
我们还要手动的添加Extended Property,点击OK返回到ConnectionString对话框然后输入
’Extended Properties=Excel 8.0;’别忘了每一个ConnectionString实体都需要用分号
隔离。这是要对ADO声明我们需要Excel支持并使类库关联到Excel 8.0上。点击Build按钮,
然后点击TEST,如果返回正确的结果,这一步的工作就完成了。

5.设置CommandText属性
该属性变成下来表单,允许你选择数据源中定义的表,选择a$。

6.在Form中放置Datasource(Data Access)组件,和DBGrid(Data Controls)。
我们需要将ADODataset连接到网格上显示数据。将DBGrid的DataSource属性设置为
DataSource1,DataSource的ADODataSet属性设置为ADODataSet1。

7.将ADODataSet的Active属性设为True
通过激活ADODataSet,我们可以在设计模式下测试查询的运行状态。来自于EXCEL的数据
将显示在网格中。


 
其实有个很简单的方法 :)
通过BDE/ADO,可以把EXCEL文件直接当成数据库来填写数据的。呵呵
自己配陪BDE/ADO吧。或则配ODBC都行。这样不但方便,而且大大提高
访问速度,减少出错的机会喔。
 

推荐控件,呵呵:XLSReadWrite
http://www.jd365.net/kangwei/

估计除了这个,都通过automation(ado,oledb...)
 
CJ:
我估计他只是嫌OLE方法麻烦,所以想换个简单点的罢了。:)
 
不会吧……ole不麻烦啊,很好用,如果要方便
推荐Office Partner 地址同上
呵呵
 
多人接受答案了。
 
用控件TXLSWrite 能不能合并行呢?2行合并为一行
哥们有消息通知我。谢了。wangqiang@khtx.com
 
>用控件TXLSWrite 能不能合并行呢?2行合并为一行
>哥们有消息通知我。谢了。wangqiang@khtx.com

Txlswrite 自带 merge 方法,完全可以做到
 
后退
顶部