您目前已離線,請等候您的網際網路重新連線

ExcelADO 示範使用 ADO 在 Excel 活頁簿讀取和寫入資料的方法

本文曾發行於 CHT278973
結論
ExcelADO.exe 範例將告訴您,如何將 ActiveX Data Objects (ADO) 和 Microsoft Jet OLE DB 4.0 Provider 搭配使用,以便在 Microsoft Excel 活頁簿中讀取和寫入資料。
其他相關資訊
您可以從「Microsoft 下載中心」下載下列檔案:
發行日期:20004 年 12 月 12 日

如需有關如何下載 Microsoft 技術支援檔案的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
119591 How to Obtain Microsoft Support Files from Online Services
Microsoft 已對這個檔案做過病毒的掃描。Microsoft 是利用發佈當日的最新病毒偵測軟體來掃描檔案,看看有沒有病毒感染。檔案會儲存在安全的伺服器上,以避免任何未經授權的更改。

為何使用 ADO?

使用 ADO 將資料傳送至 Excel 活頁簿或從 Excel 活頁簿擷取資料,可以提供開發人員數個 Excel 自動化的優點:
  • 效能 Microsoft Excel 是跨處理序 ActiveX 伺服器。ADO 在同處理序執行,並節省跨處理序呼叫的昂貴成本。
  • 延展性 對於 Web 應用程式而言,並不一定都希望自動化 Microsoft Excel。ADO 提供您更具延展性的方案來處理活頁簿中的資料。
ADO 可以完整地將原始資料傳輸至活頁簿。您無法使用 ADO 將格式或公式套用至儲存格。 但是,您可以將資料傳輸至已預先格式化的活頁簿,並保留該格式。如果插入資料之後,您需要「條件式」格式化,可以使用「自動化」或活頁簿中的巨集來完成此格式化。

適用於 Excel 活頁簿的特定 Jet OLE DB 提供者

透過可安裝的「索引循序存取方法」(Indexed Sequential Access Method,ISAM) 驅動程式,Microsoft Jet 資料庫引擎可以用來存取 Excel 活頁簿等其他資料庫檔案格式中的資料。為了開啟 Microsoft Jet 4.0 OLE DB Provider 支援的外部格式,您在連線的擴充屬性中指定資料庫類型。Jet OLE DB Provider 支援下列 Microsoft Excel 活頁簿的資料庫類型:
  • Excel 3.0
  • Excel 4.0
  • Excel 5.0
  • Excel 8.0
注意:請在 Microsoft Excel 5.0 和 7.0 (95) 活頁簿中使用 Excel 5.0 來源資料庫類型,在 Microsoft Excel 8.0 (97) 和 9.0 (2000) 活頁簿使用 Excel 8.0 來源資料庫類型。ExcelADO.exe 範例使用 Excel 97 和 Excel 2000 格式的 Excel 活頁簿。

下列範例示範 ADO 連線至 Excel 97 (或 2000) 活頁簿:
Dim oConn As New ADODB.ConnectionWith oConn    .Provider = "Microsoft.Jet.OLEDB.4.0"    .Properties("Extended Properties").Value = "Excel 8.0"    .Open "C:\Book1.xls"    '....    .CloseEnd With				
- 或 -
Dim oConn As New ADODB.ConnectionoConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _           "Data Source=C:\Book1.xls;" & _           "Extended Properties=""Excel 8.0;"""oConn.Close				
表格命名慣例

您可以使用幾個方法來參照 Excel 活頁簿中的表格 (或範圍):
  • 使用工作表名稱加上貨幣符號 (例如,[Sheet1$] 或 [My Worksheet$])。 以這種方法參照的活頁簿表格包含活頁簿的整個使用範圍。
    oRS.Open "Select * from [Sheet1$]", oConn, adOpenStatic					
  • 使用已定義名稱的範圍 (例如,[Table1])。
    oRS.Open "Select * from Table1", oConn, adOpenStatic					
  • 使用特殊位址的範圍 (例如,[Sheet1$A1:B10])。
    oRS.Open "Select * from [Sheet1$A1:B10]", oConn, adOpenStatic					
表格標題

使用 Excel 活頁簿時,範圍中的第一列預設被視為標題列 (或欄位名稱)。 如果第一個範圍沒有包含標題,您可以在連接字串的擴充屬性指定 HDR=NO。如果第一列沒有包含標題,OLE DB 提供者會自動為您的欄位命名 (其中 F1 代表第一個欄位,F2 代表第二個欄位,依此類推)。

資料類型

與傳統資料庫不同的是,您無法在 Excel 表格中直接為欄指定資料類型。相反的,OLE DB 提供者會掃描欄中一定數目的列,以「推測」欄位的資料類型。預設會掃描 8 列;您可以在連接字串的擴充屬性中,將 MAXSCANROWS 設定指定為介於 1 到 16 之間的值,以變更要掃描的列數。

範例隨附的檔案

ExcelADO.exe 檔包含 Visual Basic Standard 可執行檔專案、動態伺服器網頁 (ASP)、當做範本的 Excel 97 和 Excel 2000 活頁簿,以及 Microsoft Access 2000 資料庫。隨附的檔案包括:

Visual Basic Standard 可執行檔專案檔案
  • ExcelADO.vbp
  • Form1.frm
  • Form1.frx
動態伺服器網頁
  • EmpData.asp
  • Orders.asp
Microsoft Excel 活頁簿
  • OrdersTemplate.xls
  • EmpDataTemplate.xls
  • ProductsTemplate.xls
  • SourceData.xls
Microsoft Access 資料庫
  • Data.mdb

如何使用範例

將 .exe 檔的內容解壓縮至資料夾。

使用 Visual Basic 專案
  1. 在 Visual Basic 中,開啟 ExcelADO.vbp 檔。
  2. [專案] 功能表上,選取 [參照],然後設定至 [Microsoft ADO Ext. for DDL and Security][Microsoft ActiveX Data Objects Library] 的參照。此範例程式碼可以與 ADO 2.5 和 ADO 2.6 一起運作,因此,請選取您電腦適用的版本。
  3. 按下 F5 鍵以執行程式。隨即會出現用於示範的表單。
  4. 按一下 [Sample 1]。此範例會建立 OrdersTemplate.xls 的副本,然後使用 ADO 連線至活頁簿,並開啟活頁簿中屬於已定義範圍的表格上的 Recordset。範圍名稱為 Orders_Table。此範例會使用 ADO AddNew/Update 方法,將記錄 (或列) 新增至活頁簿中已定義的範圍。完成新增列之後,ADO Connection 就會關閉,並且 Microsoft Excel 中會顯示活頁簿。如果要執行這項操作,請依照下列步驟執行:
    1. 在 Excel 的 [插入] 功能表上,選取 [名稱],再選取 [定義]
    2. 在定義名稱的清單,選取 [Orders_Table]。請注意,定義的名稱已經增加,包括了剛新增的記錄。定義的名稱和 Excel 的 OFFSET 函數可以一起用來計算新增至活頁簿的資料總數。
    3. 結束 Microsoft Excel 並返回 Visual Basic 應用程式。
  5. 按一下 [Sample 2]。此範例會建立 EmpDataTemplate.xls 的副本,然後使用 ADO 連線至活頁簿,並使用 ADO 連線的 Execute 方法將資料插入 (在 SQL 中為 INSERT INTO) 活頁簿。資料會新增在活頁簿的定義範圍 (或表格)。 傳輸資料時,連線就會關閉,並且 Excel 中會顯示產生的活頁簿。當您檢查完活頁簿之後,請結束 Microsoft Excel,並返回 Visual Basic 應用程式。

  6. 按一下 [Sample 3]。此範例會建立 ProductsTemplate.xls 的副本,然後使用 Microsoft ADO Extensions 2.1 for DDL and Security object library (ADOX),將新表格 (或新工作表) 新增至活頁簿。接著,新表格會取得 ADO Recordset,並且利用 AddNew/Update 方法來新增資料。完成新增列之後,ADO Connection 就會關閉,並且 Excel 中會顯示活頁簿。此活頁簿包含活頁簿的 Open 事件中的 Visual Basic for Applications (VBA) 巨集程式碼。 巨集會在活頁簿開啟時執行;如果活頁簿中存有新的 Products 工作表,巨集程式碼會將工作表格式化,接著,巨集程式碼也會遭到刪除。此技巧為 Web 開發人員示範從網頁伺服器移除格式化程式碼,並移至用戶端的方式。Web 應用程式可以將包含資料的格式化活頁簿處理至用戶端,並允許可能執行任何「條件式」格式化 (不可能單獨在範本執行) 的巨集程式碼在用戶端執行。

    注意:如果要檢查巨集程式碼,請檢視 ProductsTemplate.xls 的 VBAProject 中的 ThisWorkbook 模組。

  7. 按一下 [Sample 4]。此範例會產生與 Sample 1 相同的結果,但用來傳輸資料的技巧有些不同。在 Sample 1 中,記錄 (或列) 會一次一筆地新增至工作表。Sample 4 是將 Excel 表格附加至 Access 資料庫,並執行新增查詢 (或 INSERT INTO..SELECT FROM) 將 Access 資料表的記錄新增至 Excel 表格,藉以大量的方式新增記錄。傳輸完成之後,Excel 表格會從 Access 資料庫卸離,並在 Excel 中顯示產生的活頁簿。結束 Excel 並返回 Visual Basic 應用程式。

  8. 最後一個範例說明如何從 Excel 活頁簿讀取資料。從下拉式清單選取 [table],然後按一下 [Sample 5]。即時運算視窗會顯示所選取表格的內容。如果您選取表格的整個工作表 (Sheet1$ 或 Sheet2$),即時運算視窗就會顯示該工作表使用範圍的內容。請注意,使用範圍不一定從工作表的第一列、第一欄開始。 使用的範圍會從包含資料的工作表中最左上方的儲存格開始。

    如果您選取特定的範圍位址或定義的範圍,即時運算視窗就只會顯示該工作表範圍的內容。
使用動態伺服器網頁 (ASP)
  1. 在網頁伺服器的主目錄中,建立名為 ExcelADO 的新資料夾。請注意,主目錄的預設路徑為 C:\InetPut\WWWRoot。
  2. 將下列檔案複製到先前步驟所建立的資料夾:
    • EmpData.asp
    • Orders.asp
    • Data.mdb
    • EmpDataTemplate.xls
    • OrdersTemplate.xls

  3. 此範例中的 ASP 指令碼會使用 FileSystemObjectCopy 方法來建立活頁簿範本的副本。為了使 Copy 方法成功,存取此指令碼的用戶端必須具有「寫入」存取權限,以存取包含 ASP 的資料夾。
  4. 瀏覽至 Orders.asp (亦即,http://YourServer/ExcelADO/Orders.ASP),並且留意瀏覽器所顯示的 Excel 活頁簿類似於 Visual Basic 應用程式的 Sample 1 中所顯示的 Excel 活頁簿。
  5. 瀏覽至 EmpData.asp (亦即,http://YourServer/ExcelADO/EmpData.ASP),並且留意瀏覽器所顯示的 Excel 活頁簿類似於 Visual Basic 應用程式的 Sample 2 中所顯示的 Excel 活頁簿。
(c) Microsoft Corporation 2000, All Rights Reserved. 本文內容由 Lori B. Turner, Microsoft Corporation 提供。

参考
如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
195951 How To Query and Update Excel Data Using ADO From ASP
194124 PRB:Excel Values Returned as NULL Using DAO OpenRecordset
193998 HOWTO:在 ASP 中讀取與顯示二進位資料
247412 INFO:將資料從 Visual Basic 傳送至 Excel 的方法
257819 HOWTO:從 Visual Basic 或 VBA 搭配使用 ADO 與 Excel 資料
ExcelADO
內容

文章識別碼:278973 - 最後檢閱時間:06/01/2005 01:49:10 - 修訂: 6.0

Microsoft Excel 2000 Standard Edition, Microsoft ActiveX Data Objects 2.5, Microsoft ActiveX Data Objects 2.6, Microsoft Visual Basic 6.0 Professional Edition, Microsoft Visual Basic 6.0 Enterprise Edition, Microsoft Active Server Pages 4.0

  • kbdownload kbdownload kbautomation kbfile kbprogramming KB278973
意見反應