excel返回带有$

excel返回带有$,excel,delphi,Excel,Delphi,我使用ADO和如下函数读取excel文件 procedure TForm1.ConnectToExcel; var strConn : widestring; begin strConn:='Provider=Microsoft.Jet.OLEDB.4.0;' + 'Data Source=' + Edit1.Text + ';' + 'Extended Properties=Excel 8.0;'; AdoConnection1.Conn

我使用ADO和如下函数读取excel文件

procedure TForm1.ConnectToExcel;
var strConn :  widestring;
begin
  strConn:='Provider=Microsoft.Jet.OLEDB.4.0;' +
           'Data Source=' + Edit1.Text + ';' +
           'Extended Properties=Excel 8.0;';

  AdoConnection1.Connected:=False;
  AdoConnection1.ConnectionString:=strConn;
  try
    AdoConnection1.Open;
    AdoConnection1.GetTableNames(ComboBox1.Items,True);
  except
    ShowMessage('Unable to connect to Excel, make sure the workbook ' + Edit1.Text + ' exist!');
    raise;
  end;
end;(*ConnectToExcel*)

procedure TForm1.FetchData;
begin
  StatusBar1.SimpleText:='';

  if not AdoConnection1.Connected then ConnectToExcel;

  AdoQuery1.Close;
  AdoQuery1.SQL.Text:='select * from' + SheetName;
  try
    AdoQuery1.Open;
  except
    ShowMessage('Unable to read data from Excel, make sure the query ' + SheetName + ' is meaningful!');
    raise;
  end;
end;
对于几个excel文件,这段代码运行得很好,但现在我尝试打开一个新文件,但出现了一个奇怪的错误


在excel文件中,工作表名称为MYLIST,如果检索工作表名称列表,则返回名称MYLIST$。即使使用MYLIST或MYLIST$,我也无法打开此工作表。可能是什么问题。

Microsoft Jet Engine不允许在标识符中使用“$”符号,只允许在内置函数中使用。如果您在姓名中使用此符号,则应引用这些标识符。
所以试试这个:

select * from [MYLIST$]

这解决了我的问题。知道为什么excel会在工作表名称的末尾报告这个$吗?这是由喷气发动机的设计行为决定的。有以下可用的“可查询”名称类型:
[工作表名称$]
-整个工作表,
[命名范围]
-Excel“命名范围”,
[工作表名称$A1:F50]
-未命名范围