本文將告訴您,如何查詢及更新中使用 ActiveX 資料物件 (ADO) 從動態伺服器網頁 (ASP) 頁面的 Excel 試算表的資訊。本文也將告訴您這種類型的應用程式相關聯的限制。
重要事項: 雖然 ASP/ADO 應用程式支援多重使用者存取,Excel 試算表並沒有。 因此,這種查詢和更新資訊的方法並不支援多位使用者並行存取。
若要存取在這個範例將 Excel 試算表中的資料,使用 [為 Excel 的 [Microsoft ODBC 驅動程式]。建立表格,藉由建立已命名的範圍,Excel 試算表內存取資料。
建立範例應用程式的步驟
- 使用中 sheet1 下列資料建立 Excel 檔案 ADOtest.xls:
摺疊此表格展開此表格
| column1 | column2 | column3 |
|---|
| rr | 這 | 15 |
| bb | 測試 | 20 |
| ee | 運作方式 | 25 |
附註如果在 Excel 試算表中的某欄含有文字和數字,Excel ODBC 驅動程式無法正確地解譯資料行應該是哪一種資料型別。請確定欄中的所有儲存格都屬於相同的資料型別。如果資料行中的每個儲存格不是相同的型別或您有混合之間 「 文字 」 和 「 一般 」 類型,就可能發生下列三種錯誤: - Microsoft OLE DB 提供者的 ODBC 驅動程式時發生錯誤 '80040e21'
- Microsoft OLE DB 提供者的 ODBC 驅動程式錯誤 80004005'
查詢不是可更新的因為它包含做為 hopeful 鍵沒有可搜尋資料行。
- Microsoft OLE DB 提供者的 ODBC 驅動程式錯誤 80004005'
- 在您的試算表中建立已命名的範圍,myRange1:
- 反白顯示您的資料所在的 [資料列和資料行] 區域。
- 在 [插入] 功能表上指向 [名稱],並按一下 [定義]。
- 輸入名稱 myRange1 的已命名的範圍名稱。
- 按一下 [確定]。
已命名的範圍 myRange1 包含下列資料:
摺疊此表格展開此表格
| column1 | column2 | column3 |
|---|
| rr | 這 | 15 |
| bb | 測試 | 20 |
| ee | 運作方式 | 25 |
附註ADO 會假設 Excel 查詢中的第一列包含欄位標題。因此,已命名的範圍必須包含欄標題。 這是 DAO 從不同的行為。
附註欄標題不能是數字。Excel 驅動程式無法解譯,並改,傳回儲存格參照。比方說 F1 」 的資料行標題會被錯譯。 - 建立一個 ODBC 系統資料來源名稱 (DSN) 指向 ADOTest.xls 檔。
- [控制台] 中開啟 [ODBC 系統管理員。
- 在 [系統 DSN] 索引標籤上按一下 [新增]。
- 選取 [Microsoft Excel 驅動程式 (*.xls),然後按一下 [完成]。 如果此選項不存在,您需要從 Excel 安裝程式安裝的 Excel 的 Microsoft ODBC 驅動程式。
- 選擇資料來源名稱 ADOExcel。
- 請確定 [版本設定為正確版本的 Excel。
- 按一下 [選取活頁簿...],瀏覽到 [ADOTest.xls 檔案,然後按一下 [確定]。
- 按一下"選項 > > 」 按鈕,然後清除 「 唯讀 」] 核取方塊。
- 按一下 [確定],然後再按一次 [確定]。
- 設定 ADOTest.xls 檔案的權限。
如果您動態伺服器網頁以匿名方式存取,您需要確定匿名帳戶 (IUSR_ <machinename>) 具有至少試算表的讀取/寫入 (RW) 存取。如果想從試算表中刪除資訊您要據以授與的權限。
如果您驗證您動態伺服器網頁存取,您必須確定所有使用者存取您的應用程式都有適當的權限。
附註如果您沒有在試算表上設定適當的權限,您收到錯誤訊息類似下列:
Microsoft OLE DB 提供者的 ODBC 驅動程式錯誤 80004005'
[Microsoft][ODBC Excel 驅動程式]Microsoft Jet 資料庫引擎無法開啟檔案 '(未知)'。只由另一位使用者已經開啟,或者您需要檢視其資料的權限。
- 建立新的 ASP 網頁,並貼上下列程式碼:
<!-- Begin ASP Source Code -->
<%@ LANGUAGE="VBSCRIPT" %>
<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "ADOExcel"
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.ActiveConnection = objConn
objRS.CursorType = 3 'Static cursor.
objRS.LockType = 2 'Pessimistic Lock.
objRS.Source = "Select * from myRange1"
objRS.Open
%>
<br>
<%
Response.Write("Original Data")
'Printing out original spreadsheet headings and values.
'Note that the first recordset does not have a "value" property
'just a "name" property. This will spit out the column headings.
Response.Write("<TABLE><TR>")
For X = 0 To objRS.Fields.Count - 1
Response.Write("<TD>" & objRS.Fields.Item(X).Name & "</TD>")
Next
Response.Write("</TR>")
objRS.MoveFirst
While Not objRS.EOF
Response.Write("<TR>")
For X = 0 To objRS.Fields.Count - 1
Response.write("<TD>" & objRS.Fields.Item(X).Value)
Next
objRS.MoveNext
Response.Write("</TR>")
Wend
Response.Write("</TABLE>")
'The update is made here
objRS.MoveFirst
objRS.Fields(0).Value = "change"
objRS.Fields(1).Value = "look"
objRS.Fields(2).Value = "30"
objRS.Update
'Printing out spreadsheet headings and values after update.
Response.Write("<br>Data after the update")
Response.Write("<TABLE><TR>")
For X = 0 To objRS.Fields.Count - 1
Response.Write("<TD>" & objRS.Fields.Item(X).Name & "</TD>")
Next
Response.Write("</TR>")
objRS.MoveFirst
While Not objRS.EOF
Response.Write("<TR>")
For X = 0 To objRS.Fields.Count - 1
Response.write("<TD>" & objRS.Fields.Item(X).Value)
Next
objRS.MoveNext
Response.Write("</TR>")
Wend
Response.Write("</TABLE>")
'ADO Object clean up.
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>
<!-- End ASP Source Code -->
- 儲存並命名您動態伺服器網頁,然後在瀏覽器中檢視它。您會看到下列:
Original Data:
column1 column2 column3
-----------------------------
rr this 30
bb test 20
tt works 25
Data after the update:
column1 column2 column3
-----------------------------
change look 30
bb test 20
tt works 25
附註您已命名的範圍的第一列上,已執行更新之後標題)。
如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
190195?
(http://support.microsoft.com/kb/190195/
)
如何從 Excel 工作表以 DAO ExtractInformation