ADOConnection1.Connected:=False;
       ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
         Trim(OpenDialog1.FileName) +';Extended Properties=Excel 8.0;Persist Security Info=False';
       ADOConnection1.Connected:=True;
       ADOQuery1.Close;
       ADOQuery1.SQL.Clear;
       ADOQuery1.SQL.Text := 'SELECT * FROM [Sheet1$]';
              ----  EXCEL的表单名只能写死么?[表单名$] ?而不能程序自动判定? 不想用ole方式,太慢而且机子中必须得装有excel。
    
        另,ado,方式下如何读excel 2007?谢谢了!

解决方案 »

  1.   

    读excel   2007的问题我自己已经解决:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=MyExecl.xlsx;Extended Properties=excel 12.0;Persist Security Info=False
      

  2.   


    if opendialog1.execute then
    with adoquery do
      begin
        close;
        sql.clear;
        sql.add('select * from opendatasource(''microsoft.jet.oledb.4.0'',''data source="'+opendialog1.filename+'"',user id=admin;password=;extended properties=excel 5.0')...[sheet1$]');
        open;
      end;
      

  3.   

    鶴嘯九天兄弟, 你没看清楚我问的问题,呵呵你还是没有解决打开excel工作簿后,工作表名问题(如果我打开的文件工作表名为其它呢?用SHEET1 就出错了) 
      

  4.   

    经过一下午的研究,找到其他方法了用adoconnection的GetTableNames方法,得到所有表名本问题就暂告一段落。如果有同学知道 ADOQuery也能用,那就再跟贴吧。谢谢
      

  5.   


    var
    a_cc: TStrings;
    begin
     a_cc :=TStringList.Create;  with ADOConn do begin
        ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +    OpenDialog1.FileName + ';Extended Properties=excel 8.0;Persist Security Info=false';
        Connected := True;
        GetTableNames(a_cc);{将EXCL文件中的表格名赋值于a_cc}
      end;   with adoquery1 do begin
         Close;
         SQL.text:='select * from ['+a_cc[0]+']'{a_cc[0]得到EXCEL文件中的第一个表格的名}
         Open;
       end;
       
    end;
      

  6.   

    GetTableNames方法可以到数据库中的所有表名,ADO是封装在TADOConnection中,BDE是封装在TDatabase,dbExpress是封装在TSQLConnection中,另外BDE也可以用TSession,而如果是InterBase数据库则可以直接使用TIBDatabaseAdoQuery是取不到表名的,如果一定要用它,有一个思路,就是直接操作数据库的元数据表,如MS-SQL的sysobjects表
      

  7.   

    已解决,谢谢各们的热心帮助。adoconnection2.GetTableNames();用这个可以取得