各位大虾:这是我参照某参考书更改的,可是实现不了,COMPILE时,出现如下错误:[Error] Unit1.pas(45): Undeclared identifier: 'createoleobject'procedure Tform1.EXCEL1Click(Sender: TObject);
 var
 ExcelApp,MyWorkBook:Variant;
 i:integer;
 begin
    ExcelApp:=createoleobject('Excel.Application');
    MyWorkBook:=CreateOleObject('Excel.Sheet');
    MyWorkBook:=ExcelApp.workbooks.add;
    query1.First;
   i:=0;
   while not query1.Eof do
    begin
     i:=i+1;
     MyWorkBook.WorkSheets[1].Cells[i,1].Value:=query1.FieldByName('deptno').asstring;
     MyWorkBook.WorkSheets[1].Cells[i,2].Value:=query1.MainTable.FieldByName('dept_name').asstring;
     query1.Next;
    end;
end;
为什么?是不是要添加什么控件呀?望详复,谢谢啦!

解决方案 »

  1.   

    提供使用ADO之方式供你參考, 不須open Excel, 不須Runtime Create ODBC
    DesignTime加入一TADOQuery (用來連.mdb)
    連Excel之ADOQuery Runtime create...var form1:TForm1;  ExcelConnectStr : string; //用來連Excel檔之字串implementation{$R *.DFM}//輸入Excel之檔, Create一ADOQueryfunction OpenXlsAsADO(owner:TComponent;fname:string;sheetname:string='sheet1'):TAdoQUery;var s,sht:string;begin  Result:=TAdoQuery.Create(owner);  try    s:=AnsiReplaceStr(ExcelConnectstr, 'xxx.xls', fname);    Result.ConnectionString:=s;    sht:='['+SheetName+'$'+']';    Result.sql.text:='select * from '+sht;    Result.open;  except    result.Free;  end;end;procedure TForm1.Button1Click(Sender: TObject);var sql:string;  ADOQ:TADOQuery;begin  if OpenDia1.execute then begin    ADOQ:=OpenXlsAsADO(self,OpenDia1.filename);  //open .xls檔成ado// adoquery1連向 .mdb    AdoQuery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;'+            'Data Source=D:\bbb\dream.mdb;Persist Security Info=False';    ADOQ.first;    while not ADOQ.eof do begin      sql:='Insert INTO file(DirId,FileId,File,KeyWord,Script,Fav) Values';      sql:=sql+'('''+adoq.Fields[0].asstring;      sql:=sql+''','''+adoq.Fields[0].asstring;      sql:=sql+''','''+adoq.Fields[0].asstring;      sql:=sql+''','''+adoq.Fields[0].asstring;      sql:=sql+''','''+adoq.Fields[0].asstring;      sql:=sql+''','''+adoq.Fields[0].asstring+''')';      AdoQuery1.SQL.Text:=sql;      AdoQuery1.ExecSQL;      AdoQ.Next;    end;    adoq.free;  end;end;initialization  //連Excel之樣板字串  ExcelConnectstr:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;'+                 'Data Source=xxx.xls;'+                 'Mode=Share Deny None;Extended Properties=Excel 8.0;'+                 'Persist Security Info=False;Jet OLEDB:System database="";'+                 'Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";'+                 'Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;'+                 'Jet OLEDB:Global Partial Bulk Ops=2;'+                 'Jet OLEDB:Global Bulk Transactions=1;'+                 'Jet OLEDB:New Database Password="";'+                 'Jet OLEDB:Create System Database=False;'+                 'Jet OLEDB:Encrypt Database=False;'+                 'Jet OLEDB:Don''t Copy Locale on Compact=False;'+                 'Jet OLEDB:Compact Without Replica Repair=False;'+                 'Jet OLEDB:SFP=False';end.
      

  2.   

    谢谢州木鸟大哥,编译可以通过了。
    再问一下,在我这个程序中,要让结果以EXCEL显示出来,还要什么控件呢?另:KKK123大虾,你写的东东,菜鸟我实在是看不懂,多谢了。
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Grids, DBGrids, Db, DBTables, Excel97, OleServer;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        Button5: TButton;
        Edit1: TEdit;
        DataSource1: TDataSource;
        Query1: TQuery;
        DBGrid1: TDBGrid;
        ExcelWorksheet1: TExcelWorksheet;
        ExcelWorkbook1: TExcelWorkbook;
        ExcelApplication1: TExcelApplication;
        Label1: TLabel;
        procedure Button5Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button5Click(Sender: TObject);   
    begin
    Query1.Close;
     Query1.SQL.Clear;
     Query1.SQL.Text :=Edit1.Text ;
     Query1.Open;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
    i,row,column:integer;
    begin
    Try
    ExcelApplication1.Connect;
    Except
    MessageDlg('Excel may not be installed',
    mtError, [mbOk], 0);
    Abort;
    End;
    ExcelApplication1.Visible[0]:=True;
    ExcelApplication1.Caption:='Excel Application';
    ExcelApplication1.Workbooks.Add(Null,0);
    ExcelWorkbook1.ConnectTo
    (ExcelApplication1.Workbooks[1]);
    ExcelWorksheet1.ConnectTo
    (ExcelWorkbook1.Worksheets[1] as _Worksheet);
    Query1.Open;
    row:=1;
    column:=1;
    for i:=0 to query1.FieldCount -1 do   //列标题
    begin
     ExcelWorksheet1.Cells.Item[row,column]:=dbgrid1.Fields[i].DisplayLabel ;
     column:=column+1;
    end;row:=row+1;
    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;end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    ExcelWorksheet1.PrintPreview;
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
    ExcelWorksheet1.PrintOut;
    end;procedure TForm1.Button4Click(Sender: TObject);
    begin
    ExcelApplication1.Disconnect;
    ExcelApplication1.Quit;
    end;end.
      

  4.   

    tangyong_delphi:
    谢谢你!
    不过,你用的是EXCEL97,用EXCEL2000代替可以吗?
      

  5.   

    我用的也是EXCEL2000,书上的代码是Excel97。Delphi5用EXCEL2000好像要下载补丁。