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

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

Select [A1] from [Sheet1$] 

不起作用。

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

这是我的连接string,如果它从任何帮助。

 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'; 

您已经说过数据有标题(在连接string中使用HDR=YES;因此您需要使用该标题行中的列名称)。 例如,如果你有这样的表单:

  AB 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; 

你确定ADO是获得特定细胞价值的最好方法吗? ADO对待excel电子表格像SQL表格,你的问题类似于“如何从SQL服务器表中获取logging#5”。

最好尝试OLE自动化。 在那里你可以很容易地处理单个单元格或一系列单元格。 这里是微软的一个例子。

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