如何使用ADO查询从MS Excel中读取特定单元格的值?

时间:2014-08-07 14:03:50

标签: excel vba delphi excel-vba ado

我正在尝试从MS Excel工作表中提取特定单元格中的数据。

Select [A1] from [Sheet1$]

不起作用。

  • 如何使用ADO查询从MS Excel中读取特定单元格的值?

这是我的连接字符串,如果它来自任何帮助。

Provider=Microsoft.ACE.OLEDB.12.0;
User ID=Admin;Data Source=c:\clients.xlsx;
Mode=Share Deny None;
Extended Properties="Excel 12.0 Xml;
HDR=yes";
Jet OLEDB:System database="";
Jet OLEDB:Registry Path="";
Jet OLEDB:Database Password="";
Jet OLEDB:Engine Type=37;
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;
Jet OLEDB:Support Complex Data=False';

3 个答案:

答案 0 :(得分:4)

您已经说过数据有标题(在连接字符串中使用HDR=YES;),因此您需要使用该标题行中的列名。例如,如果你有一张如下表:

    A    B
1 CODE  DESCRIPTION
2 100   This is an item description
3 200   This is another item

您的SELECT声明

SELECT Code, Description FROM [Sheet1$] WHERE [Code] = 100

上面的查询将返回

Code  Description
100   This is an item description

如果您需要结果列中的特定单元格,则可以在查询后移至该单元格:

ADOQuery1.MoveBy(25);         // Move to row 25 of the results
DescriptStr :=  ADOQuery1.FieldByName('Description').Value;

请注意,使用ADO可能不是访问单个单元格的最佳方式。例如,自动化将更容易:

// You'll need to add ComObj to your uses clause for CreateOleObject
procedure TForm2.Button2Click(Sender: TObject);
var
  XLS: Variant;
  Range: Variant;
  Description: String;
begin
  XLS := CreateOleObject('Excel.Application');
  try
    XLS.WorkBooks.Open('C:\ExcelDocs\MyFile.xls');

    // Retrieve the cell
    Range := XLS.ActiveWorkBook.WorkSheets[1].Range['B2'];

    // Read its content
    Description := Range.Value;
    ShowMessage(Description);  // Displays 'This is an item description'
  finally
    Range := null;             // Release reference

    XLS.Quit;                  // Close Excel application
    XLS := null;               // Release reference
  end;
end;

答案 1 :(得分:4)

您确定ADO是获取特定细胞价值的最佳方式吗? ADO处理exql电子表格,如sql表格,你的问题类似于如何从sql server table'获取记录#5。

最好尝试OLE自动化。在那里,您可以轻松地处理单个细胞或一系列细胞。 Here是微软的一个例子。

答案 2 :(得分:2)

如果你有标题,你选择标题的名称,如果你没有,第一列是F1,然后是F2,依此类推。您可以使用SELECT * ...进行试验,然后查找字段名称。