求助:ADOquery提取Excel数据问题
Form1中有控件DriveComboBox1、DirectoryListBox1、FileListBox1、ListBox1、DBGrid1、DataSource1、ADOConnection1、ADOQuery1,其中FileListBox1用来显示.xls文件,ListBox1通过ADOConnection1.GetTableName()取得FileListBox1中的Excel工作薄的工作表列表,但为什么取得的工作表数量总是比实际工作表数量要多,如本来只有sheet1和sheet2两个,但ListBox1中却会出现sheet1$、sheet1$_和sheet2$三个名称,这是为什么,有什么办法解决呢?
还有一个问题:我想在点击ListBox1中的工作表名时,用ADOQuery1从该工作表中提取数据并在DBGrid1中显示,我是在ListBox1的OnClick事件中写的代码如下:
procedure TForm1.ListBox1Click(Sender: TObject);
var i: integer;
begin
adoquery1.ConnectionString:= 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source= ' ' '+filelistbox1.FileName+ ' ' ';Extended Properties=Excel 8.0;Persist Security Info=False ';//在原代码中未作分行
i:=listbox1.ItemIndex;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add( 'select * from [ ' ' '+listbox1.Items[i]+ ' ' '] ');
adoquery1.Open;
end;
但运行时却总是提示Microsoft Jet数据库引擎找不到对象,这是怎么回事呢?
请各位不吝赐教!!!谢谢了!!!
[解决办法]
第一个问题在我这里是正常的!
第二个问题错误很明显~
sql.Text:= 'select * from [ ' ' '+listbox1.Items[listbox1.ItemIndex]+ ' ' '] ';--错
sql.Text:= 'select * from [ '+ListBox1.Items[listbox1.ItemIndex]+ '] ';---对
原因:
多加引号了
[解决办法]
确实是路过。第一个问题,可能是Excel使用的隐藏Sheet。很简单,忽略它们就是了。写一小段代码,将包含$的表名删掉,不就可以了?