天天看點

如何在 Visual Basic 或 VBA 中使用 ADO 來處理 Excel 資料

簡介

Microsoft Excel 工作表中的行和列與資料庫中的行和列非常相似。隻要使用者記住 Microsoft Excel 不是關系型資料庫管理系統,并認識到這一事實所帶來的限制,在許多情況下都可以利用 Excel 及其工具來存儲和分析資料。

Microsoft ActiveX Data Objects 讓我們可以将 Excel 工作簿看做和資料庫一樣。本文通過以下幾節來讨論如何實作這一點:

  • 使用 ADO 連接配接到 Excel
  • 使用 ADO 檢索和編輯 Excel 資料
  • 從 Excel 檢索資料源結構(中繼資料)

注意:本文中的測試是使用 Microsoft Data Access Components (MDAC) 2.5 在裝有 Visual Basic 6.0 Service Pack 3 和 Excel 2000 的 Microsoft Windows 2000 上執行的。對使用者在使用不同版本的 MDAC、Microsoft Windows、Visual Basic 或 Excel 時可能會觀察到的不同現象,本文可能未确認或讨論。

如何在 Visual Basic 或 VBA 中使用 ADO 來處理 Excel 資料

回到頂端

使用 ADO 連接配接到 Excel

ADO 使用 MDAC 中以下兩個 OLE DB 提供程式中的任何一個都可以連接配接到 Excel 資料檔案。

  • Microsoft Jet OLE DB Provider — 或 —
  • Microsoft OLE DB Provider for ODBC Drivers

如何使用 Microsoft Jet OLE DB Provider

Jet 提供程式隻需要兩條資訊就可以連接配接到 Excel 資料源:路徑(包括檔案名),和 Excel 檔案版本。

Jet 提供程式使用連接配接字元串

Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
	.Provider = "Microsoft.Jet.OLEDB.4.0"
	.ConnectionString = "Data Source=C:/MyFolder/MyWorkbook.xls;" & _
"Extended Properties=Excel 8.0;"
	.Open
End With
				      

提供程式版本:必須使用 Jet 4.0 提供程式;Jet 3.51 提供程式不支援 Jet ISAM 驅動程式。如果指定了 Jet 3.51 提供程式,在運作時會出現以下錯誤資訊:

Couldn't find installable ISAM.

Excel 版本:對于 Excel 95 工作簿(Excel 版本 7.0),應指定 Excel 5.0;對于 Excel 97、Excel 2000 或 Excel 2002 (XP) 工作簿(Excel 版本 8.0、9.0 和 10.0),應指定 Excel 8.0 版本。

使用“資料連結屬性”對話框的 Jet 提供程式

如果在應用程式中使用“ADO 資料控件”或“資料環境”,就會出現資料連結屬性對話框來收集必要的連接配接設定。

  1. 在提供程式頁籤上,選擇 Jet 4.0 提供程式;Jet 3.51 提供程式不支援 Jet ISAM 驅動程式。如果指定了 Jet 3.51 提供程式,在運作時會出現以下錯誤資訊: Couldn't find installable ISAM.
  2. 在連接配接頁籤上,浏覽到您的工作簿檔案。忽略“使用者 ID”和“密碼”項,因為這些不适用于 Excel 連接配接。(無法打開受密碼保護的 Excel 檔案作為資料源。本文後面有關于此主題的詳細資訊。)
  3. 在所有頁籤上,從清單中選擇擴充屬性,然後單擊編輯值。輸入 Excel 8.0;,用分号 (;) 将其與任何其他已有的項分隔。如果忽略此步驟,測試連接配接時将出現一條錯誤資訊。這是因為,如果不另行指定,Jet 提供程式期望 Microsoft Access 資料庫。
  4. 傳回到連接配接頁籤,并單擊 測試連接配接。将出現一個消息框,通知您測試已成功完成。

其他 Jet 提供程式連接配接設定

列标題:預設情況下,系統認為 Excel 資料源的第一行包含可用作字段名的列标題。如果不是這種情況,則必須将該設定關閉,否則,第一行資料将會“消失”,而被用作字段名稱。這可通過向連接配接字元串的擴充屬性添加可選的 HDR= 設定來完成。預設情況下(無需指定)是 HDR=Yes。如果沒有列标題,則需要指定 HDR=No;提供程式将字段命名為 F1、F2 等等。因為擴充屬性字元串現在包含了多個值,是以各值必須用雙引号括起來,再加一對雙引号,讓 Visual Basic 将第一層引号中的内容當作字面值,如下例所示(為便于看清楚,添加了額外的空格)。

.ConnectionString = "Data Source=C:/MyFolder/MyWorkbook.xls;" & _
"Extended Properties=" " Excel 8.0; HDR=No;" " "
				      

使用 Microsoft OLE DB Provider for ODBC Drivers

ODBC 驅動程式的提供程式(本文為簡便起見将其稱為“ODBC 提供程式”)也隻需要兩條資訊就可以連接配接到 Excel 資料源:驅動程式名,以及工作簿的路徑和檔案名。

重要說明:Excel 的 ODBC 連接配接預設為隻讀。ADO 記錄集 LockType 屬性設定不會覆寫此連接配接級别的設定。如果想編輯資料,則必須将連接配接字元串或 DSN 配置中的 ReadOnly 設定為 False。否則,将出現以下錯誤資訊:

Operation must use an updateable query.

使用沒有 DSN 的連接配接字元串的 ODBC 提供程式

Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
	.Provider = "MSDASQL"
	.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=C:/MyFolder/MyWorkbook.xls; ReadOnly=False;"
	.Open
End With
				      

使用帶有 DSN 的連接配接字元串的 ODBC 提供程式

Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
	.Provider = "MSDASQL"
	.ConnectionString = "DSN=MyExcelDSN;"
	.Open
End With
				      

使用“資料連結屬性”對話框的 ODBC 提供程式

如果在應用程式中使用“ADO 資料控件”或“資料環境”,就會出現資料連結屬性對話框來收集必要的連接配接設定。

  1. 在提供程式頁籤上,選擇 Microsoft OLE DB Provider for ODBC Drivers。
  2. 在連接配接頁籤上,選擇想使用的現有 DSN,或選擇使用連接配接字元串。這将打開标準 DSN 配置對話框,收集必需的連接配接設定。如果需要,請不要忘記取消選擇預設隻讀設定,如上文所述。
  3. 傳回連接配接頁籤,然後單擊測試連接配接。将出現一個消息框,通知您測試已成功完成。

其他 ODBC 提供程式連接配接設定

列标題:預設情況下,系統認為 Excel 資料源的第一行包含可用作字段名的列标題。如果不是這種情況,則必須将該設定關閉,否則,第一行資料将會“消失”,而被用作字段名稱。這可通過向連接配接字元串添加可選的 FirstRowHasNames= 設定來完成。預設情況下(無需指定)為FirstRowHasNames=1,其中 1 = True。如果沒有列标題,則需要指定FirstRowHasNames=0,其中 0 = False;驅動程式将字段命名為 F1、F2 等等。DSN 配置對話框中沒有此選項。

不過,由于 ODBC 驅動程式中存在錯誤,目前指定 FirstRowHasNames 設定不起作用。換句話說,Excel ODBC 驅動程式(MDAC 2.1 和更高版本)始終把指定資料源中的第一行作為字段名。 有關列标題錯誤的其他資訊,請單擊下面的文章編号,以檢視 Microsoft 知識庫中相應的文章:

288343  BUG:Excel ODBC 驅動程式忽略 FirstRowHasNames 或 Header 設定

要掃描的行數:Excel 不會像關系資料庫那樣為 ADO 提供有關其資料的詳細架構資訊。是以,驅動程式必須至少掃描幾行現有資料,才能有根據地猜測各列的資料類型。“要掃描的行數”的預設值為八 (8) 行。可以指定從一 (1) 行到十六 (16) 行的整數值,或指定零 (0),掃描所有現有行。這可通過向連接配接字元串添加可選的 MaxScanRows= 設定,或在 DSN 配置對話框中更改要掃描的行數設定來完成。

但是,由于 ODBC 驅動程式中存在一個錯誤,是以目前指定“要掃描的行數”(MaxScanRows) 設定不起作用。換句話說,Excel ODBC 驅動程式(MDAC 2.1 和更高版本)始終掃描指定資料源中的前 8 行,以确定各列的資料類型。 

有關“要掃描的行數”錯誤的其他資訊,包括一個簡單的替代方法,請單擊下面的文章編号,檢視 Microsoft 知識庫中相應的文章:

189897  XL97:使用 Excel ODBC 驅動程式資料截短到 255 個字元

其他設定:如果是通過使用資料連結屬性對話框來構造連接配接字元串的,那麼您可能會注意到一些其他的擴充屬性設定添加到了連接配接字元串中,而這些設定不一定有用,如:

... DefaultDir=C:/WorkbookPath;DriverId=790;FIL=excel 8.0;MaxBufferSize=2048;PageTimeout=5;
				      

Visual Basic 編輯器中的“Collating Sequence”(排序順序)錯誤資訊

使用某些版本的 MDAC 時,當您的程式在設計時第一次連接配接到 Excel 資料源時,Visual Basic 設計環境中将出現以下錯誤資訊:

Selected collating sequence not supported by the operating system.

此資訊僅出現在 IDE 中,而不會出現在編譯好的程式中。 有關其他資訊,請單擊下面的文章編号,以檢視 Microsoft 知識庫中相應的文章:

246167  PRB:首次在 Excel XLS 中打開 ADODB 記錄集時出現排序順序錯誤

使用這兩種 OLE DB 提供程式時都應考慮的問題

混用資料類型時應注意的事項

如上文所述,ADO 必須猜測 Excel 工作表或範圍中各列的資料類型。(這不受 Excel 單元格格式設定的影響。)如果同一列中既有數字值,也有文本值,會出現嚴重的問題。Jet 和 ODBC 提供程式将傳回占多數的類型的資料,但對于占少數的資料類型,則會傳回 NULL(空)值。如果該列中兩種類型資料的數量相等,提供程式将優先選擇數字型資料,放棄文本型資料。

例如:

  • 在被掃描的八 (8) 行中,如果該列包含五 (5) 個數字值和三 (3) 個文本值,則提供程式将傳回五 (5) 個數字和三 (3) 個空值。
  • 在被掃描的八 (8) 行中,如果該列包含三 (3) 個數字值和五 (5) 個文本值,則提供程式将傳回三 (3) 個空值和五 (5) 個文本值。
  • 在被掃描的八 (8) 行中,如果該列包含四 (4) 個數字值和四 (4) 個文本值,則提供程式将傳回四 (4) 個數字和四 (4) 個空值。

是以,如果列中包含不同類型的值,唯一的解決方法是将該列中的數字值存儲為文本,然後在需要時使用 Visual Basic VAL 函數或同等功能的函數将其還原為數字。

作為解決隻讀資料問題的一種替代方法,可在連接配接字元串的“擴充屬性”部分中使用“IMEX=1”這一設定來啟用導入模式。這可強制執行 ImportMixedTypes=Text 系統資料庫設定。但在此模式下,執行更新操作時可能會出現意外的結果。 有關此設定的其他資訊,請單擊下面的文章編号,檢視 Microsoft 知識庫中相應的文章:

194124  PRB:使用 DAO OpenRecordset 時 Excel 傳回值為 NULL

無法打開受密碼保護的工作簿

如果您的 Excel 工作簿受密碼保護,即使在連接配接設定中提供了正确的密碼,也無法打開它以通路其資料,除非已在 Microsoft Excel 應用程式中打開了該工作簿檔案。如果您嘗試這樣做,将出現以下錯誤資訊:

Could not decrypt file.

有關其他資訊,請單擊下面的文章編号,以檢視 Microsoft 知識庫中相應的文章:

211378  XL2000:通路受密碼保護的檔案時,出現“Could Not Decrypt File”(無法解密檔案)錯誤

如何在 Visual Basic 或 VBA 中使用 ADO 來處理 Excel 資料

回到頂端

使用 ADO 檢索和編輯 Excel 資料

本節讨論兩種處理 Excel 資料的方式:

  • 如何選擇資料 — 和 —
  • 如何更改資料

如何選擇資料

有幾種選擇資料的方法。您可以進行以下操作:

  • 使用代碼選擇 Excel 資料。
  • 使用 ADO 資料控件選擇 Excel 資料。
  • 使用資料環境指令選擇 Excel 資料。

使用代碼選擇 Excel 資料

Excel 資料可能包含在工作簿中的以下一種對象内:

  • 整張工作表。
  • 工作表上的命名單元格區域。
  • 工作表上的未命名單元格區域。

指定工作表

若要指定一張工作表作為記錄源,請使用該工作表的名稱,後面帶有一個美元字元,并用方括号将其括起。例如:

strQuery = "SELECT * FROM [Sheet1$]"
				      

也可以使用鍵盤上波形符 (~) 下的斜單引号字元 (`) 來分隔工作表名稱。例如:

strQuery = "SELECT * FROM `Sheet1$`"
				      

Microsoft 建議使用方括号,這是用于表示未知資料庫對象名的标準約定。

如果将美元符号和方括号全部省略,或隻省略美元符号,将出現以下錯誤資訊:

... the Jet database engine could not find the specified object

如果使用美元符号而忽略了方括号,将會看到以下錯誤資訊:

Syntax error in FROM clause.

如果您嘗試使用普通單引号,将出現以下錯誤資訊:

Syntax error in query.Incomplete query clause.

指定命名區域

若要指定命名的單元格區域作為記錄源,隻需使用定義的名稱。例如:

strQuery = "SELECT * FROM MyRange"
				      

指定未命名區域

若要指定未命名的單元格區域作為記錄源,請在工作表名的後面加上用标準 Excel 行/清單示法表示的區域,并用方括号将其括起。例如:

strQuery = "SELECT * FROM [Sheet1$A1:B10]"
				      

指定工作表時應注意的事項:提供程式認為資料表從指定工作表上最左上方的非空單元格開始。換句話說,資料表可以從第 3 行,C 列開始,這沒有問題。但在這種情況下,舉個例子來說,就不能在資料左上方的 A1 單元格中鍵入工作表标題。

指定區域時應注意的事項:指定工作表作為記錄源時,提供程式将新記錄添加到工作表中現有記錄的下面(如果有可用空間)。指定區域(命名區域或未命名區域)時,Jet 也将新記錄添加到區域中現有記錄的下面(如果有可用空間)。但是,如果對原區域重新執行查詢,則得到的記錄集不包含新添加到該區域外的記錄。

使用 2.5 版之前的 MDAC 時,如果指定了命名區域,則無法将新記錄添加到該區域定義的界限之外,否則将出現以下錯誤資訊:

Cannot expand named range.

使用 ADO 資料控件選擇 Excel 資料

在 ADODC 屬性對話框的正常頁籤上指定 Excel 資料源的連接配接設定後,單擊記錄源頁籤。如果選擇的 CommandType 為 adCmdText,則可以使用上文介紹的文法在指令文本對話框中輸入一個 SELECT 查詢。如果選擇的 CommandType 為 adCmdTable,而且使用的是 Jet 提供程式,所選工作簿中的可用命名區域和工作表的名稱都會顯示在下拉清單中,命名區域排在前面。

此對話框會正确地在工作表名稱後面加上美元符号,但不會添加必要的方括号。結果,如果隻選擇工作表名稱并單擊确定,則稍後可能會收到以下錯誤資訊:

Syntax error in FROM clause.

您必需手動在工作表名稱的前後加上方括号。(此組合框允許進行編輯。)如果使用的是 ODBC 提供程式,則在此下拉清單中隻能看到命名區域。但是,可以手動輸入帶有正确分隔符的工作表名稱。

使用資料環境指令選擇 Excel 資料

設定完 Excel 資料源的資料環境連接配接後,建立一個新的 Command 對象。如果選擇的資料源為 SQL 語句,則可以使用前面介紹的文法在文本框中輸入一個查詢。如果選擇的資料源為資料庫對象,請在第一個下拉清單中選擇表,如果您使用的是 Jet 提供程式,所選工作簿中的可用命名區域和工作表名稱都會顯示在該下拉清單中,命名區域排在前面。(從該位置選擇工作表名稱時,不需要像在使用 ADO 資料控件時那樣在工作表名稱的前後加上方括号。)如果使用的是 ODBC 提供程式,則在此下拉清單中隻能看到命名區域。但是,可以手動輸入工作表名稱。

如何更改 Excel 資料:編輯、添加和删除

編輯

可以使用普通 ADO 方法來編輯 Excel 資料。對應于 Excel 工作表中包含 Excel 公式(以“=”開始)的單元格的記錄集字段是隻讀的,不能對其進行編輯。記住 Excel 的 ODBC 連接配接預設是隻讀的,除非在連接配接設定中另行指定。請參見上文中的“使用 Microsoft OLE DB Provider for ODBC Drivers”一節。

添加

如果有可用空間,可以将記錄添加到 Excel 記錄源中。但是,如果将新記錄添加到了原來指定的區域之外,那麼在對原來指定的區域重新進行查詢時,将看不到這些記錄。請參見上文中“指定區域時應注意的事項”一節。

在某些情形中,使用 ADO Recordset 對象的 AddNew 和 Update 方法向 Excel 表插入新資料行時,ADO 可能會将資料值插入錯誤的列。 有關其他資訊,請單擊下面的文章編号,以檢視 Microsoft 知識庫中相應的文章:

314763  FIX:ADO 将資料插入 Excel 中錯誤的列

删除

删除 Excel 資料時,受到的限制要比從關系資料源中删除資料時更多。在關系資料庫中,“行”除了表示一條“記錄”外沒有其他意義;但在 Excel 工作表中卻不同。可以删除字段(單元格)中的值。但不能:

  1. 一次删除一整條記錄,否則将出現以下錯誤資訊: Deleting data in a linked table is not supported by this ISAM. 隻能通過分别清空各個字段的内容來删除一條記錄。
  2. 删除包含 Excel 公式的單元格中的值,否則将出現以下錯誤資訊: Operation is not allowed in this context.
  3. 雖然電子表格中已被删除的資料原來所在的行現在是空行,但無法将其删除,而且記錄集将繼續顯示對應于這些空行的空記錄。

使用 ADO 編輯 Excel 資料時應注意的事項:使用 ADO 在 Excel 中插入文本資料時,文本值前面帶有一個單引号。這在後面處理新資料時可能會導緻問題。

如何在 Visual Basic 或 VBA 中使用 ADO 來處理 Excel 資料

回到頂端

從 Excel 檢索資料源結構(中繼資料)

使用 ADO 可以檢索有關 Excel 資料源(表和字段)的結構的資料。雖然使用兩種 OLE DB 提供程式時至少都傳回相同數量(很少)字段的有用資訊,但結果在兩者之間仍有細微差别。使用 ADOConnection 對象的 OpenSchema 方法可檢索此中繼資料,該方法傳回一個 ADO Recordset 對象。也可以使用更強大的 Microsoft ActiveX Data Objects Extensions for Data Definition Language and Security (ADOX) 庫來檢索中繼資料。然而,對于 Excel 資料源,“表”既可以是工作表也可以是命名區域,而“字段”則是幾種有限的一般資料類型之一,是以這一附加的功能沒有什麼用處。

查詢表資訊

在關系資料庫提供的各種對象中(表、視圖、存儲過程,等等),Excel 資料源僅提供相當于表的對象,它由指定工作簿中的工作表和定義的命名區域組成。命名區域被視為“表”,而工作表被視為“系統表”。除“table_type”屬性外,檢索不到太多有用的表資訊。使用以下代碼可以檢索工作簿中可用表的清單:

Set rs = cn.OpenSchema(adSchemaTables)
				      

Jet 提供程式傳回的記錄集包含九 (9) 個字段,但其中隻有四 (4) 個字段有資料:

  • table_name
  • table_type(“表”或“系統表”)
  • date_created
  • date_modified

對于一個給定的表,兩個日期字段始終顯示相同的值,該值為“最後修改日期”。換句話說,“date_created”不可靠。

ODBC 提供程式傳回的記錄集也包含九 (9) 個字段,但其中隻有三 (3) 個字段有資料:

  • table_catalog,該工作簿所在的檔案夾。
  • table_name。
  • table_type,如上文所述。

根據 ADO 文檔,隻檢索工作表清單是可以做到的 — 例如通過向 OpenSchema 方法指定以下附加标準:

Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "System Table"))
				      

但遺憾的是,對于 Excel 資料源,如果使用的 MDAC 版本高于 2.0,無論使用哪種提供程式此方法都不行。

查詢字段資訊

Excel 資料源中的每個字段(列)都屬于以下資料類型之一:

  • 數字(ADO 資料類型 5,adDouble)
  • 貨币(ADO 資料類型 6,adCurrency)
  • 邏輯或布爾值(ADO 資料類型 11,adBoolean)
  • 日期(使用 Jet 時,為 ADO 資料類型 7,adDate;使用 ODBC 時為資料類型 135,adDBTimestamp)
  • 文本(一種 ADO ad...Char 類型,例如,202,adVarChar;200,adVarWChar,或相似類型)

對于數字列,傳回的 numeric_precision 始終為 15(是 Excel 中的最大精度);對于文本列,傳回的 character_maximum_length 始終為 255(是 Excel 列中文本的最大顯示寬度,但不是最大長度)。除了 data_type 屬性之外,得不到多少有用的字段資訊。使用以下代碼可以檢索表中可用字段的清單:

Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, "TableName", Empty))
				      

Jet 提供程式傳回的記錄集包含 28 個字段。對于數字字段,其中八 (8) 個有資料;對于文本字段,其中九 (9) 個有資料。有用的字段很可能是:

  • table_name
  • column_name
  • ordinal_position
  • data_type

ODBC 提供程式傳回的記錄集包含 29 個字段。對于數字字段,其中十 (10) 個有資料;對于文本字段,其中 11 個有資料。有用的字段與上文所述相同。

枚舉表和字段及其屬性

可以使用 Visual Basic 代碼(如下例所示)來枚舉 Excel 資料源中的表和列,以及有關各個表和列的可用資訊。本示例将其結果輸出到同一窗體上的一個清單框 List1。

Dim cn As ADODB.Connection
Dim rsT As ADODB.Recordset
Dim intTblCnt As Integer, intTblFlds As Integer
Dim strTbl As String
Dim rsC As ADODB.Recordset
Dim intColCnt As Integer, intColFlds As Integer
Dim strCol As String
Dim t As Integer, c As Integer, f As Integer
Set cn = New ADODB.Connection
With cn
	.Provider = "Microsoft.Jet.OLEDB.4.0"
	.ConnectionString = "Data Source=" & App.Path & _
"/ExcelSrc.xls;Extended Properties=Excel 8.0;"
	'.Provider = "MSDASQL"
	'.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & App.Path & "/ExcelSrc.xls; "
	.CursorLocation = adUseClient
	.Open
End With
Set rsT = cn.OpenSchema(adSchemaTables)
intTblCnt = rsT.RecordCount
intTblFlds = rsT.Fields.Count
List1.AddItem "Tables:	" & intTblCnt
List1.AddItem "--------------------"
For t = 1 To intTblCnt
	strTbl = rsT.Fields("TABLE_NAME").Value
	List1.AddItem vbTab & "Table #" & t & ":	" & strTbl
	List1.AddItem vbTab & "--------------------"
	For f = 0 To intTblFlds - 1
		List1.AddItem vbTab & rsT.Fields(f).Name & _
vbTab & rsT.Fields(f).Value
	Next
	List1.AddItem "--------------------"
	Set rsC = cn.OpenSchema(adSchemaColumns, Array(Empty, Empty, strTbl, Empty))
	intColCnt = rsC.RecordCount
	intColFlds = rsC.Fields.Count
	For c = 1 To intColCnt
		strCol = rsC.Fields("COLUMN_NAME").Value
		List1.AddItem vbTab & vbTab & "Column #" & c & ": " & strCol
		List1.AddItem vbTab & vbTab & "--------------------"
		For f = 0 To intColFlds - 1
			List1.AddItem vbTab & vbTab & rsC.Fields(f).Name & _
vbTab & rsC.Fields(f).Value
		Next
		List1.AddItem vbTab & vbTab & "--------------------"
		rsC.MoveNext
		Next
		rsC.Close
		List1.AddItem "--------------------"
		rsT.MoveNext
Next
rsT.Close
cn.Close
				      

使用資料視圖視窗

在Visual Basic 的“資料視圖”視窗中建立 Excel 資料源的資料連結時,“資料視圖”中顯示的資訊與上文所述可以通過程式設計方式檢索到的資訊相同。特别應注意 Jet 提供程式将工作表和命名區域都列在“表”下,而 ODBC 提供程式僅在“表”下顯示命名區域。如果使用的是 ODBC 提供程式,而且未定義任何命名區域,“表”清單中将不顯示任何内容。

Excel 的限制

使用 Excel 作為資料源受限于 Excel 工作簿和工作表的内部限制。這包括但不限于以下事件:

  • 工作表大小:65,536 行,256 列
  • 單元格内容(文本):32,767 個字元
  • 工作簿中的工作表數:受可用記憶體限制
  • 工作簿中的名稱數:受可用記憶體限制

摘自:http://support.microsoft.com/kb/257819/zh-cn#Connect