请教:用ado方式 获取excel表名

时间:2022-04-03 02:15:59
       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?

谢谢了!

10 个解决方案

#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


up一下!

#6



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;

#7


Study

#8


GetTableNames方法可以到数据库中的所有表名,ADO是封装在TADOConnection中,BDE是封装在TDatabase,dbExpress是封装在TSQLConnection中,另外BDE也可以用TSession,而如果是InterBase数据库则可以直接使用TIBDatabase

AdoQuery是取不到表名的,如果一定要用它,有一个思路,就是直接操作数据库的元数据表,如MS-SQL的sysobjects表

#9


已解决,谢谢各们的热心帮助。

adoconnection2.GetTableNames();

用这个可以取得

#10


这个我也知道,但中文有问题

#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


up一下!

#6



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;

#7


Study

#8


GetTableNames方法可以到数据库中的所有表名,ADO是封装在TADOConnection中,BDE是封装在TDatabase,dbExpress是封装在TSQLConnection中,另外BDE也可以用TSession,而如果是InterBase数据库则可以直接使用TIBDatabase

AdoQuery是取不到表名的,如果一定要用它,有一个思路,就是直接操作数据库的元数据表,如MS-SQL的sysobjects表

#9


已解决,谢谢各们的热心帮助。

adoconnection2.GetTableNames();

用这个可以取得

#10


这个我也知道,但中文有问题