如何使用 ASP 從 ADO 查詢及更新 Excel 資料

文章翻譯 文章翻譯
文章編號: 195951 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將告訴您,如何查詢及更新中使用 ActiveX 資料物件 (ADO) 從動態伺服器網頁 (ASP) 頁面的 Excel 試算表的資訊。本文也將告訴您這種類型的應用程式相關聯的限制。

重要事項: 雖然 ASP/ADO 應用程式支援多重使用者存取,Excel 試算表並沒有。 因此,這種查詢和更新資訊的方法並不支援多位使用者並行存取。

其他相關資訊

若要存取在這個範例將 Excel 試算表中的資料,使用 [為 Excel 的 [Microsoft ODBC 驅動程式]。建立表格,藉由建立已命名的範圍,Excel 試算表內存取資料。

建立範例應用程式的步驟

  • 使用中 sheet1 下列資料建立 Excel 檔案 ADOtest.xls:

    摺疊此表格展開此表格
    column1column2column3
    rr15
    bb測試20
    ee運作方式25

    附註如果在 Excel 試算表中的某欄含有文字和數字,Excel ODBC 驅動程式無法正確地解譯資料行應該是哪一種資料型別。請確定欄中的所有儲存格都屬於相同的資料型別。如果資料行中的每個儲存格不是相同的型別或您有混合之間 「 文字 」 和 「 一般 」 類型,就可能發生下列三種錯誤:
    1. Microsoft OLE DB 提供者的 ODBC 驅動程式時發生錯誤 '80040e21'
      要求屬性不支援依此 ODBC 驅動程式。
    2. Microsoft OLE DB 提供者的 ODBC 驅動程式錯誤 80004005'
      查詢不是可更新的因為它包含做為 hopeful 鍵沒有可搜尋資料行。
    3. Microsoft OLE DB 提供者的 ODBC 驅動程式錯誤 80004005'
      基礎的查詢更新失敗。找不到要更新之資料列。
  • 在您的試算表中建立已命名的範圍,myRange1:

    1. 反白顯示您的資料所在的 [資料列和資料行] 區域。
    2. 在 [插入] 功能表上指向 [名稱],並按一下 [定義]。
    3. 輸入名稱 myRange1 的已命名的範圍名稱。
    4. 按一下 [確定]。
    已命名的範圍 myRange1 包含下列資料:

    摺疊此表格展開此表格
    column1column2column3
    rr15
    bb測試20
    ee運作方式25


    附註ADO 會假設 Excel 查詢中的第一列包含欄位標題。因此,已命名的範圍必須包含欄標題。 這是 DAO 從不同的行為。

    附註欄標題不能是數字。Excel 驅動程式無法解譯,並改,傳回儲存格參照。比方說 F1 」 的資料行標題會被錯譯。
  • 建立一個 ODBC 系統資料來源名稱 (DSN) 指向 ADOTest.xls 檔。
    1. [控制台] 中開啟 [ODBC 系統管理員。
    2. 在 [系統 DSN] 索引標籤上按一下 [新增]。
    3. 選取 [Microsoft Excel 驅動程式 (*.xls),然後按一下 [完成]。 如果此選項不存在,您需要從 Excel 安裝程式安裝的 Excel 的 Microsoft ODBC 驅動程式。
    4. 選擇資料來源名稱 ADOExcel。
    5. 請確定 [版本設定為正確版本的 Excel。
    6. 按一下 [選取活頁簿...],瀏覽到 [ADOTest.xls 檔案,然後按一下 [確定]。
    7. 按一下"選項 > > 」 按鈕,然後清除 「 唯讀 」] 核取方塊。
    8. 按一下 [確定],然後再按一次 [確定]。
  • 設定 ADOTest.xls 檔案的權限。
如果您動態伺服器網頁以匿名方式存取,您需要確定匿名帳戶 (IUSR_ <machinename>) 具有至少試算表的讀取/寫入 (RW) 存取。如果想從試算表中刪除資訊您要據以授與的權限。

如果您驗證您動態伺服器網頁存取,您必須確定所有使用者存取您的應用程式都有適當的權限。

附註如果您沒有在試算表上設定適當的權限,您收到錯誤訊息類似下列:

Microsoft OLE DB 提供者的 ODBC 驅動程式錯誤 80004005'

[Microsoft][ODBC Excel 驅動程式]Microsoft Jet 資料庫引擎無法開啟檔案 '(未知)'。只由另一位使用者已經開啟,或者您需要檢視其資料的權限。
  1. 建立新的 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 -->
    					
  2. 儲存並命名您動態伺服器網頁,然後在瀏覽器中檢視它。您會看到下列:
          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如何從 Excel 工作表以 DAO ExtractInformation

屬性

文章編號: 195951 - 上次校閱: 2004年7月1日 - 版次: 5.2
這篇文章中的資訊適用於:
  • Microsoft ActiveX Data Objects 1.0
  • Microsoft ActiveX Data Objects 1.5
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.1 Service Pack 2
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft Active Server Pages 4.0
  • Microsoft Data Access Components 2.5
關鍵字:?
kbmt kbcode kbhowto kbmdacnosweep KB195951 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:195951
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com