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

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

請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。

按一下這裡查看此文章的英文版本:195951
結論
本文將示範如何查詢及更新中使用 ActiveX Data Objects (ADO),從動態伺服器網頁 」 (ASP) 網頁的 Excel 試算表的資訊。本文也將告訴您這種類型的應用程式相關聯的限制。

重要事項 ︰ 雖然 ASP/ADO 應用程式支援多使用者存取,Excel 試算表則沒有。因此,這種查詢和更新資訊的方法不支援多使用者同時存取。
其他相關資訊
若要存取您的 Excel 試算表在這個範例中的資料,Excel 使用 Microsoft 的 ODBC 驅動程式。建立資料表,以存取資料,藉由建立 Excel 試算表中的已命名的範圍。

若要建立範例應用程式的步驟

  • 使用下列的 datain sheet1 來建立 Excel 檔案 ADOtest.xls:

    欄 1依欄 2欄 3 加起來
    rr 15
    bb測試20
    ee運作方式25

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

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

    欄 1依欄 2欄 3 加起來
    rr15
    bb測試20
    ee運作方式25


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

    附註欄名不能是數字。Excel 驅動程式 cannotinterpret 它們,相反地,傳回儲存格參照。例如,columnheading 的 「 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>) 至少具有讀取/寫入 (讀寫) 存取試算表。如果您想要刪除試算表中的資訊,您要據以授與的權限。

如果您的驗證存取到使用中的 [伺服器] 頁面,您需要確保存取您的應用程式的所有使用者都擁有適當的權限。

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

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

</MachineName>
[] 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. 儲存並命名作用中的 [伺服器] 頁面,然後在 thebrowser 中檢視它。您會看到下列項目 ︰
          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 - 最後檢閱時間:06/12/2016 12:20:00 - 修訂: 6.0

Microsoft Active Server Pages 4.0, Microsoft Data Access Components 2.5

  • kbcode kbhowto kbmdacnosweep kbmt KB195951 KbMtzh
意見反應