現在オフラインです。再接続するためにインターネットの接続を待っています

ASP から ADO を使用して Excel のデータのクエリおよび更新を行う方法

概要
この資料では、ASP (Active Server Pages) ページから ADO (ActiveX データ オブジェクト) を使用して、Excel ワークシートの情報に対するクエリを実行し、情報を更新する方法について説明します。また、このようなアプリケーションに関する制限事項についても説明します。

重要 : ASP アプリケーションと ADO アプリケーションではマルチユーザー アクセスがサポートされていますが、Excel ワークシートではサポートされていません。そのため、この方法でデータのクエリおよび更新を行う場合、複数のユーザーによる同時アクセスはサポートされません。
詳細
このサンプルで Excel ワークシートのデータにアクセスするには、Excel 用の Microsoft ODBC ドライバを使用します。Excel ワークシートで名前の範囲を作成し、データにアクセスするテーブルを作成します。

サンプル アプリケーションを作成する手順

  • ADOtest.xls という Excel ファイルを作成し、Sheet1 に以下のようにデータを設定します。

    column1column2column3
    rrthis15
    bbtest20
    eeworks25

    : Excel ワークシートの列に文字列と数値の両方が含まれている場合、Excel ODBC ドライバでは列のデータ型が正しく解釈されません。1 つの列内のセルはすべて同じデータ型になっていることを確認してください。1 つの列内にデータ型の異なるセルが存在する場合、または "テキスト" と "標準" のデータ型が混在している場合、以下の 3 つのエラーメッセージが表示されることがあります。
    1. Microsoft OLE DB Provider for ODBC Drivers エラー '80040e21'
      この ODBC ドライバは要求プロパティをサポートしません。
    2. Microsoft OLE DB Provider for ODBC Drivers エラー '80004005'
      キーとして使用する検索可能な列がクエリに含まれていないため、クエリを更新できません。
    3. Microsoft OLE DB Provider for ODBC Drivers エラー '80004005'
      クエリ ベースの更新に失敗しました。更新する行が見つかりません。
  • ワークシートに myRange1 という名前の範囲を作成します。

    1. データが設定されている行と列を強調表示します。
    2. [挿入] メニューの [名前] をポイントし、[定義] をクリックします。
    3. 名前の範囲名として「myRange1」と入力します。
    4. [OK] をクリックします。
    名前の範囲 myRange1 には以下のデータが格納されます。

    column1column2column3
    rrthis15
    bbtest20
    eeworks25


    : ADO では、Excel クエリの最初の行に列見出しが含まれていることが想定されています。そのため、名前の範囲には列見出しが含まれている必要があります。この点は DAO の動作と異なります。

    : 列見出しのデータ型を数値にすることはできません。Excel ドライバでは数値型の列見出しを解釈できないため、セル参照が返されます。たとえば、"F1" という列見出しは正しく解釈されません。
  • ADOTest.xls ファイルを指す ODBC システム データ ソース名 (DSN) を作成します。
    1. コントロール パネルで [データ ソース (ODBC)] をダブルクリックします。
    2. [システム DSN] タブをクリックし、[追加] をクリックします。
    3. [Microsoft Excel Driver (*.xls)] をクリックし、[完了] をクリックします。このオプションが表示されない場合は、Excel 用の Microsoft ODBC ドライバを Excel セットアップからインストールする必要があります。
    4. [データ ソース名] ボックスに「ADOExcel」と入力します。
    5. [バージョン] ボックスに Excel のバージョンが正しく設定されていることを確認します。
    6. [ブックの選択...] をクリックし、ADOTest.xls ファイルを参照して [OK] をクリックします。
    7. [オプション>>] をクリックし、[読み取り専用] チェック ボックスをオフにします。
    8. [OK] をクリックし、もう一度 [OK] をクリックします。
  • ADOTest.xls ファイルのアクセス許可を設定します。
Active Server Page に匿名でアクセスする設定になっている場合は、匿名アカウント (IUSR_<MachineName>) に少なくとも、ワークシートに対する読み取りと書き込み (RW) のアクセス許可が付与されていることを確認する必要があります。ワークシートから情報を削除するには、削除に必要なアクセス許可を与える必要があります。

Active Server Page へのアクセスに対して認証を行う場合は、アプリケーションにアクセスするすべてのユーザーに対して適切なアクセス許可を設定する必要があります。

: ワークシートに適切なアクセス許可を設定していない場合、次のようなエラー メッセージが表示されます。

Microsoft OLE DB Provider for ODBC Drivers エラー '80004005'

[Microsoft][ODBC Excel Driver] ファイル '(不明)' を開くことができませんでした。ほかのユーザーが排他的に開いているか、データを読み取る権限がありません。
  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. 作成した ASP ページに名前を付けて保存し、ブラウザで参照します。以下のように表示されます。
          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 Knowledge Base) をクリックしてください。
190195 DAO を使用して Excel シートから情報を抽出する方法
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 195951 (最終更新日 2004-07-01) を基に作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。
プロパティ

文書番号:195951 - 最終更新日: 07/21/2004 06:49:00 - リビジョン: 5.1

  • 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
  • kbhowto kbmdacnosweep kbcode KB195951
フィードバック
>