簡體   English   中英

如何使用ADO查詢從MS Excel中讀取特定單元格的值?

[英]How to read the value of a specific cell from MS Excel with ADO query?

我正在嘗試從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';

您已經說過數據具有標題(在連接字符串中使用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;

您確定ADO是獲取特定單元格值的最佳方法嗎? ADO將excel電子表格視為sql表,您的問題類似於“如何從sql server表中獲取記錄#5”。

更好地嘗試OLE自動化。 在那里您可以輕松處理單個單元格或一系列單元格。 是Microsoft的示例。

如果有標題,則選擇標題的名稱,如果沒有標題,則第一列為F1,然后為F2,依此類推。 您可以嘗試使用SELECT * ... ,然后查找字段名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM