Visual Basic .NET と ADO.NET を使用して Excel ブックのレコードの取得と変更を行う方法

文書翻訳 文書翻訳
文書番号: 316934 - 対象製品
すべて展開する | すべて折りたたむ

目次

概要

この資料では、ADO.NET を使用して、Excel ブックからのデータの取得、既存ブック内のデータの変更、または新しいブックへのデータの追加を行う方法を解説します。ADO.NET を使用して Excel ブックにアクセスするには、Jet OLE DB プロバイダを使用します。この資料では、対象となるデータ ソースが Excel の場合に、Jet OLE DB プロバイダを使用するために必要な情報を紹介します。

Excel ブックで Jet OLE DB プロバイダを使用する方法

Microsoft Jet データベース エンジンは、インストール可能な ISAM (Indexed Sequential Access Method) ドライバ経由で、Excel ブックなど、他のデータベース ファイル形式のデータにアクセスできます。Microsoft Jet 4.0 OLE DB プロバイダでサポートされる外部形式を開くには、接続の拡張プロパティでデータベースの種類を指定します。Jet OLE DB プロバイダでは、以下の Excel ブックのデータベースの種類がサポートされています。
Excel 3.0
Excel 4.0
Excel 5.0
Excel 8.0
: Microsoft Excel 5.0 および 7.0 (95) のブックに対しては、Excel 5.0 のソース データベースの種類を使用し、Excel 8.0 (97)、9.0 (2000)、10.0 (2002) のブックに対しては、Excel 8.0 のソース データベースの種類を使用してください。この資料の例では、Excel 2000 と Excel 2002 の形式の Excel ブックを使用します。

接続文字列

Jet OLE DB プロバイダを使用して Excel ブックにアクセスするには、次の構文を持つ接続文字列を使用します。
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Book1.xls;Extended Properties="Excel 8.0;HDR=YES;"
この接続文字列では、ブックのフルパスとファイル名を Data Source パラメータで指定します。Extended Properties パラメータには 2 つのプロパティがあり、ISAM のバージョンと、テーブルにヘッダーを含めるかどうかを指定します。

Excel ブックでは、範囲内の最初の行がデフォルトでヘッダー行 (またはフィールド名) として扱われます。最初の行にヘッダーが含まれない場合は、接続文字列の拡張プロパティに HDR=NO と指定します。接続文字列に HDR=NO と指定すると、Jet OLE DB プロバイダによってフィールドに自動的に名前が付けられます (最初のフィールドは F1、2 番目のフィールドは F2 など)。

データ型

従来のデータベースとは異なり、Excel テーブルの列に直接データ型を指定する方法はありません。OLE DB プロバイダが列内の 8 行をスキャンして、そのフィールドのデータ型を推測します。スキャンする行数は、接続文字列の拡張プロパティで、MAXSCANROWS の設定に 1 〜 16 の値を指定することで変更できます。

テーブルの命名規則

Excel ブックでテーブル (または範囲) を参照するには、以下のようにいくつかの方法があります。
  • シート名の後にドル記号を付加したもの ([Sheet1$]、[My Worksheet$] など) を使用します。この方法で参照されるブックのテーブルには、ワークシートの使用範囲全体が含まれます。
    Select * from [Sheet1$]
  • 名前が定義されている範囲を使用します ([MyNamedRange] など)。
    Select * from [MyNamedRange]
  • 特定のアドレスを持つ範囲を使用します ([Sheet1$A1:B10] など)。
    Select * from [Sheet1$A1:B10]
: ワークシート名の後に付加するドル記号は、そのテーブルが存在することを示します。新しいテーブルを作成する場合は、この資料の「新しいブックとテーブルの作成」の記述に従い、ドル記号は使用しないでください。

Excel ブックを ADO.NET のデータ ソースとして使用する方法

レコードの取得

ADO.NET では、2 つの方法のいずれかを使用してデータベースからレコードを取得できます。1 つはデータセットを使用する方法、もう 1 つは DataReader を使用する方法です。

データセットは、データ ソースから取得したレコードのキャッシュです。データセットには通常、データベースの内容を大幅に削減したデータが含まれています。ただし、操作方法は実際のデータに対するのと同じで、データベースから切断したままデータを操作できます。データセットはデータ取得以外にも、基になっているデータベースの更新処理にも使用できます。

また、DataReader を使用して、データベースから前方スクロール タイプのデータのストリームを読み取り専用で取得することもできます。DataReader を使用した場合は、メモリに一度に 1 行のみ保持されるため、パフォーマンスが向上しシステムのオーバーヘッドが小さくなります。取得するデータが大量で、元のデータベースを変更しない場合は、データセットより DataReader が適しています。

レコードの追加と更新

ADO.NET を使用すると、以下に示す 3 つのいずれかの方法でブックのレコードを挿入および更新できます。
  • 1 件ずつレコードの挿入または更新を行うコマンドを直接実行します。この操作を行うには、まず、使用する接続に対する OLEDbCommand オブジェクトを作成します。レコードを挿入する場合は、そのオブジェクトの CommandText プロパティに、次のような有効なコマンドを設定します。

    INSERT INTO [Sheet1$] (F1, F2) values ('111', 'ABC')
    レコードを更新する場合は、次のようなコマンドを設定します。

    UPDATE [Sheet1$] SET F2 = 'XYZ' WHERE F1 = '111'
    その後、ExecuteNonQuery メソッドを呼び出します。
  • Excel ブックのテーブルやクエリを格納したデータセットに変更を加えてから、DataAdapter の Update メソッドを呼び出して、データセットの変更をブックに反映させます。ただし、変更の反映に Update メソッドを使用するには、DataAdapter の InsertCommand で、次のようなパラメータ化コマンドを使用する必要があります。
    INSERT INTO [Sheet1$] (F1, F2) values (?, ?)
    また、UpdateCommand で、次のようなパラメータ化コマンドを使用する必要があります。
    UPDATE [Sheet1$] SET F2 = ? WHERE F1 = ?
    INSERT および UPDATE でパラメータ化コマンドが必要な理由は、OleDbDataAdapter では Excel ブックに対してキーまたはインデックスの情報が提供されないためです。キーまたはインデックスのフィールドがないと、CommandBuilder では自動的にコマンドを生成できません。
  • 他のデータ ソースを Jet OLE DB プロバイダで使用できる場合は、データを別のデータ ソースから Excel ブックにエクスポートします。この方法で Jet OLE DB プロバイダで使用できるデータ ソースには、他の Excel ブック以外に、テキスト ファイル、Microsoft Access データベースがあります。単一の INSERT INTO コマンドを使用して、別のテーブルまたはクエリのデータをブックにエクスポートできます。
    INSERT INTO [Sheet1$] IN 'C:\Book1.xls' 'Excel 8.0;' SELECT * FROM MyTable"
    INSERT INTO を使用するには、対象となるテーブル (ワークシート) が既に存在している必要があります。データは対象のテーブルに追加されます。

    次のように、SELECT..INTO を使用して、テーブルまたはクエリをブックにエクスポートすることもできます。
    SELECT * INTO [Excel 8.0;Database=C:\Book1.xls].[Sheet1] FROM [MyTable]
    SELECT..INTO を使用すると、対象となるテーブルまたはブックが存在しない場合、自動的に作成されます。SELECT..INTO コマンドが発行される前に、テーブルが既に存在していた場合は、エラーが発生します。
この資料の後半の「サンプル コード」で、上記の各方法を使用して、ブック内のレコードの追加および更新を行う方法を具体的に示します。

レコードの削除

Jet OLE DB プロバイダを使用すると、Excel ブックのレコードの挿入および更新はできますが、DELETE の操作を行うことはできません。1 件以上のレコードに対して DELETE 操作を実行しようとすると、次のエラー メッセージが表示されます。
この ISAM では、リンク テーブル内のデータを削除することはできません。
この制限事項は、Excel ブックをデータベースとして扱う場合に固有のものです。

新しいブックとテーブルの作成

Excel ブックにテーブルを作成するには、CREATE TABLE コマンドを実行します。
CREATE TABLE Sheet1 (F1 char(255), F2 char(255))
このコマンドを実行すると、コマンドで指定したテーブルの名前を持つ新しいワークシートが作成されます。その接続に対応するブックが存在しない場合でも作成されます。

サンプル コード」では、CREATE TABLE コマンドを使用して、新しいブックとテーブルを作成する方法を示します。

作業手順

サンプル コード

  1. Visual Basic .NET で Windows アプリケーション プロジェクトを新規作成します。

    デフォルトで Form1 が作成されます。
  2. RadioButton コントロールを 6 つ、Button コントロールを 1 つ Form1 に追加します。
  3. すべての RadioButton コントロールを選択し、Size プロパティを 200,24 に設定します。
  4. [表示] メニューの [コード] をクリックします。
  5. 次の行をコード モジュールの先頭に追加します。
    Imports System.Data.OleDb
  6. 次のコードを Form クラスに挿入します。
    Private m_sConn1 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=C:\ExcelData1.xls;" & _
                   "Extended Properties=""Excel 8.0;HDR=YES"""
    Private m_sConn2 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=C:\ExcelData2.xls;" & _
                   "Extended Properties=""Excel 8.0;HDR=YES"""
    Private m_sNorthwind = _
          "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"
    Private m_sAction As String
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
          RadioButton1.Text = "Create_Workbook"
          RadioButton2.Text = "Retrieve_Records"
          RadioButton3.Text = "Add_Records"
          RadioButton4.Text = "Update_Records"
          RadioButton5.Text = "Update_Individual_Cells"
          RadioButton6.Text = "Use_External_Source"
          Button1.Text = "Go!"
    End Sub
    Private Sub RadioButtons_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
          Handles RadioButton1.Click, RadioButton2.Click, RadioButton3.Click, _
          RadioButton4.Click, RadioButton5.Click, RadioButton6.Click
          m_sAction = sender.Text'Store the text for the selected radio button
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
          Try
             ' Call the associated routine to add/update/modify the workbook.
             Select Case m_sAction
                Case "Create_Workbook" : Create_Workbook()
                Case "Retrieve_Records" : Retrieve_Records()
                Case "Add_Records" : Add_Records()
                Case "Update_Records" : Update_Records()
                Case "Update_Individual_Cells" : Update_Individual_Cells()
                Case "Use_External_Source" : Use_External_Source()
             End Select
          Catch ex As OleDbException
             Dim er As OleDbError
             For Each er In ex.Errors
                MsgBox(er.Message)
             Next
          Catch ex2 As System.InvalidOperationException
             MsgBox(ex2.Message)
          End Try
    End Sub
    Public Sub Create_Workbook()
          ' If the workbooks already exist, prompt to delete.
          Dim answer As MsgBoxResult
          If Dir("C:\ExcelData1.xls") <> "" Or Dir("C:\ExcelData2.xls") <> "" Then
              answer = MsgBox("Delete existing workbooks (C:\ExcelData1.xls and " & _
                       "C:\ExcelData2.xls)?", MsgBoxStyle.YesNo)
              If answer = MsgBoxResult.Yes Then
                  If Dir("C:\ExcelData1.xls") <> "" Then Kill("C:\ExcelData1.xls")
                  If Dir("C:\ExcelData2.xls") <> "" Then Kill("C:\ExcelData2.xls")
              Else
                  Exit Sub
              End If
          End If
    '==========================================================================
          ' Create a workbook with a table named EmployeeData. The table has 3 
          ' fields: ID (char 255), Name (char 255) and Birthdate (date).  
    '==========================================================================
          Dim conn As New OleDbConnection()
          conn.ConnectionString = m_sConn1
          conn.Open()
          Dim cmd1 As New OleDbCommand()
          cmd1.Connection = conn
          cmd1.CommandText = "CREATE TABLE EmployeeData (Id char(255), Name char(255), BirthDate date)"
          cmd1.ExecuteNonQuery()
          cmd1.CommandText = "INSERT INTO EmployeeData (Id, Name, BirthDate) values ('AAA', 'Andrew', '12/4/1955')"
          cmd1.ExecuteNonQuery()
          conn.Close()
    '==========================================================================
          ' Create a workbook with a table named InventoryData. The table has 3 
          ' fields: Product (char 255), Qty (float) and Price (currency). 
    '==========================================================================
          conn.ConnectionString = m_sConn2
          conn.Open()
          Dim cmd2 As New OleDbCommand()
          cmd2.Connection = conn
          cmd2.CommandText = "CREATE TABLE InventoryData (Product char(255), Qty float, Price currency)"
          cmd2.ExecuteNonQuery()
          cmd2.CommandText = "INSERT INTO InventoryData (Product, Qty, Price) values ('Cola', 200, 1.35)"
          cmd2.ExecuteNonQuery()
          cmd2.CommandText = "INSERT INTO InventoryData (Product, Qty, Price) values ('Chips', 550, 0.89)"
          cmd2.ExecuteNonQuery()
          conn.Close()
          ' NOTE: You can ALTER and DROP tables in a similar fashion.
    End Sub
    Public Sub Retrieve_Records()
          '==========================================================
          'Use a DataReader to read data from the EmployeeData table.
          '==========================================================
          Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
          conn1.Open()
          Dim cmd1 As New System.Data.OleDb.OleDbCommand("Select * From [EmployeeData$]", conn1)
          Dim rdr As OleDbDataReader = cmd1.ExecuteReader
          Debug.WriteLine(vbCrLf & "EmployeeData:" & vbCrLf & "=============")
          Do While rdr.Read()
             Debug.WriteLine(System.String.Format("{0,-10}{1, -15}{2}", _
                rdr.GetString(0), rdr.GetString(1), _
                rdr.GetDateTime(2).ToString("d")))
          Loop
          rdr.Close()
          conn1.Close()
          '========================================================
          'Use a DataSet to read data from the InventoryData table.
          '========================================================
          Dim conn2 As New OleDbConnection(m_sConn2)
          Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
          Dim ds As DataSet = New DataSet()
          da.Fill(ds)
          Debug.WriteLine(vbCrLf & "InventoryData:" & vbCrLf & "==============")
          Dim dr As DataRow
          For Each dr In ds.Tables(0).Rows'Show results in output window
             Debug.WriteLine(System.String.Format("{0,-15}{1, -6}{2}", _
                dr("Product"), dr("Qty"), dr("Price")))
          Next
          conn2.Close()
    End Sub
    Public Sub Add_Records()
    '==========================================================================
          ' Run an INSERT INTO command to add new records to the workbook. 
    '==========================================================================
          Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
          conn1.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn1
          cmd.CommandText = "INSERT INTO [EmployeeData$] (ID, Name, BirthDate) values ('CCC', 'Charlie', '10/14/48')"
          cmd.ExecuteNonQuery()
          cmd.CommandText = "INSERT INTO [EmployeeData$] (ID, Name, BirthDate) values ('DDD', 'Deloris', '7/19/98')"
          cmd.ExecuteNonQuery()
          conn1.Close()
          '====================================================================
          'Use the InsertCommand object to add new records to the InventoryData
          'table.
          '====================================================================
          Dim conn2 As New OleDbConnection(m_sConn2)
          Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
          Dim ds As DataSet = New DataSet()
          da.Fill(ds, "MyExcelTable")
          ' Generate the InsertCommand and add the parameters for the command.
          da.InsertCommand = New OleDbCommand( _
             "INSERT INTO [InventoryData$] (Product, Qty, Price) VALUES (?, ?, ?)", conn2)
          da.InsertCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "Product")
          da.InsertCommand.Parameters.Add("@Qty", OleDbType.Double).SourceColumn = "Qty"
          da.InsertCommand.Parameters.Add("@Price", OleDbType.Currency).SourceColumn = "Price"
          ' Add two new records to the dataset.
          Dim dr As DataRow
          dr = ds.Tables(0).NewRow
          dr("Product") = "Bread" : dr("Qty") = 390 : dr("Price") = 1.89 : ds.Tables(0).Rows.Add(dr)
          dr = ds.Tables(0).NewRow
          dr("Product") = "Milk" : dr("Qty") = 99 : dr("Price") = 2.59 : ds.Tables(0).Rows.Add(dr)
          ' Apply the dataset changes to the actual data source (the workbook).
          da.Update(ds, "MyExcelTable")
          conn2.Close()
    End Sub
    Public Sub Update_Records()
    '==========================================================================
          ' Run an UPDATE command to change a record in the EmployeeData
          ' table.
    '==========================================================================
          Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
          conn1.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn1
          cmd.CommandText = "UPDATE [EmployeeData$] " & _
                        "SET NAME = 'Aaron', BirthDate = '5/4/1975' WHERE ID = 'AAA'"
          cmd.ExecuteNonQuery()
          conn1.Close()
          '====================================================================
          ' Use the UpdateCommand object to modify records in the InventoryData
          ' table.
          '====================================================================
          Dim conn2 As New OleDbConnection(m_sConn2)
          Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
          Dim ds As DataSet = New DataSet()
          da.Fill(ds, "MyInventoryTable")
          ' Generate the UpdateCommand and add the parameters for the command.
          da.UpdateCommand = New OleDbCommand( _
             "UPDATE [InventoryData$] SET Qty = ?, Price=? WHERE Product = ?", conn2)
          da.UpdateCommand.Parameters.Add("@Qty", OleDbType.Numeric).SourceColumn = "Qty"
          da.UpdateCommand.Parameters.Add("@Price", OleDbType.Currency).SourceColumn = "Price"
          da.UpdateCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "Product")
          ' Update the first two records.
          ds.Tables(0).Rows(0)("Qty") = 1000
          ds.Tables(0).Rows(0)("Price") = 10.1
          ds.Tables(0).Rows(1)("Qty") = 2000
          ds.Tables(0).Rows(1)("Price") = 20.2
          ' Apply the dataset changes to the actual data source (the workbook).
          da.Update(ds, "MyInventoryTable")
          conn2.Close()
    End Sub
    Public Sub Update_Individual_Cells()
    '==========================================================================
          ' Update individual cells on the EmployeeData worksheet; 
          ' specifically, cells F3, G3, and I4 are modified.
    '==========================================================================
          ' NOTE: The connection string indicates that the table does *NOT* 
          ' have a header row.
          Dim conn As New System.Data.OleDb.OleDbConnection(m_sConn1.Replace("HDR=YES", "HDR=NO"))
          conn.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn
          cmd.CommandText = "UPDATE [EmployeeData$F3:G3] SET F1 = 'Cell F3', F2 = 'Cell G3'"
          cmd.ExecuteNonQuery()
          cmd.CommandText = "UPDATE [EmployeeData$I4:I4] SET F1 = 'Cell I4'"
          cmd.ExecuteNonQuery()
          conn.Close()
    End Sub
    Public Sub Use_External_Source()
          ' Open a connection to the sample Northwind Access database.
          Dim conn As New System.Data.OleDb.OleDbConnection( _
                "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & m_sNorthwind & ";")
          conn.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn
    '=======================================================================
          ' Run an INSERT..INTO command on the Northwind database to append 
          ' the records from a table/query to an existing table in the Excel 
          ' workbook.
    '=======================================================================
          cmd.CommandText = "INSERT INTO [EmployeeData$] IN 'C:\ExcelData1.xls' 'Excel 8.0;'" & _
             "SELECT 社員コード AS ID, 氏名 AS Name, 誕生日 AS BirthDate FROM 社員"
          cmd.ExecuteNonQuery()
    '==========================================================================
          ' Run a SELECT..INTO command on the Northwind database to insert 
          ' all the records from a table/query into a new sheet in the Excel 
          ' workbook.
    '==========================================================================
          cmd.CommandText = "SELECT * INTO [Excel 8.0;Database=C:\ExcelData2.xls].[ProductSales]" & _
                          "FROM [1997年 売上高]"
          cmd.ExecuteNonQuery()
          conn.Close()
    End Sub
  7. コード内の m_sNorthwind メンバに対応する、Access サンプル データベースの Northwind へのパスは、必要に応じて変更します。

実際に試してみる

  1. [表示] メニューの [その他のウィンドウ] をポイントし、[出力] をクリックして、[出力] ウィンドウを表示します。
  2. F5 キーを押してプログラムをビルドし、実行します。
  3. [Create_Workbook] をクリックし、[Go] をクリックします。Create_Workbook プロシージャにより、CREATE TABLE コマンドが実行され、C:\ExcelData1.xls と C:\ExcelData2.xls という 2 つの新しいブックが作成されます。ExcelData1.xls には EmployeeData というシート (テーブル) が 1 つ含まれ、ExcelData2.xls には InventoryData という名前のシート (テーブル) が 1 つ含まれています。各テーブルには、レコードが格納されています。

    : このテストの残りの手順では、Excel でブックを開いて結果を確認します。または、[Retrieve_Records] をクリックして、Visual Studio .NET の [出力] ウィンドウにテーブルの内容を表示します。
  4. [Retrieve_Records] をクリックし、[Go] をクリックします。[Retrieve_Records] プロシージャは、テーブルからレコードを抽出し、次のように [出力] ウィンドウに表示します。
    EmployeeData:
    =============
    AAA       Andrew         1955/12/04
    InventoryData:
    ==============
    Cola           200   1.35
    Chips          550   0.89
  5. [Add_Records] をクリックし、[Go] をクリックします。[Add_Records] ルーチンは、2 件のレコードを各テーブルに追加します。
    EmployeeData:
    =============
    AAA       Andrew         1955/12/04
    CCC       Charlie        1948/10/14
    DDD       Deloris        1998/07/19
    InventoryData:
    ==============
    Cola           200   1.35
    Chips          550   0.89
    Bread          390   1.89
    Milk           99    2.59
  6. [Update_Records] をクリックし、[Go] をクリックします。Update_Records ルーチンは、各ブックで 2 件のレコードを更新します。
    EmployeeData:
    =============
    AAA       Aaron          1975/05/04
    CCC       Charlie        1948/10/14
    DDD       Deloris        1998/07/19
    InventoryData:
    ==============
    Cola           1000   10.1
    Chips          2000   20.2
    Bread          390   1.89
    Milk           99    2.59
  7. [Update_Individual_Cells] をクリックし、[Go] をクリックします。[Update_Individual_Cells] ルーチンは、ExcelData1.xls の EmployeeData ワークシートの特定のセルを変更します。具体的には、F3、G3、および I4 の各セルが更新されます。
  8. [Use_External_Source] をクリックし、[Go] をクリックします。INSERT..INTO コマンドを使用すると、Use_External_Source ルーチンが、Northwind のテーブル 'Employees' から、ExcelData1.xls の EmployeeData ワークシートにレコードを追加します。さらに、[Use_External_Source] は SELECT..INTO コマンドを使用して、Northwind の 'Products' テーブルのレコードをすべて含んだ新しいテーブル (シート) を ExcelData2.xls に作成します。

    : [Use_External_Source] を複数回クリックすると、Employees の一覧が複数回追加されます。これは主キーが認識または強制されていないためです。

セルの書式設定

ADO.NET を使用して既存ブックのレコードを追加または更新する場合、新しいレコードや更新されるレコードで使用するセルの書式設定をブックに適用できます。ブック内の既存のレコード (行) を更新する場合は、セルの書式設定がそのまま維持されます。新しいレコード (行) をブックに挿入する場合は、新しいレコードに上の行の書式設定が受け継がれます。

次の手順は、サンプル コードでブックの書式設定を使用する方法を示したものです。
  1. F5 キーを押してサンプル プログラムをビルドし、実行します。
  2. Form1 で [Create_Workbook] をクリックし、[Go] をクリックします。
  3. Microsoft Excel を起動し、C:\ExcelData1.xls を開きます。
  4. セル A2 に太字のフォント スタイルを適用します。
  5. セル B2 に斜体と下線のスタイルを適用し、中央揃えにします。
  6. セル C2 に長い日付の形式を適用します。
  7. C:\ExcelData1.xls を保存して閉じます。
  8. Form1 で [Add_Records] をクリックし、[Go] をクリックします。
  9. Excel で C:\ExcelData1.xls を開くと、2 つの新しい行に、最初の行の書式設定が受け継がれていることがわかります。

制限事項

Excel データ ソースに関する Jet OLE DB プロバイダのいくつかの制限事項を次に示します。
  • ADO.NET を使用して、数式をセルに挿入することはできません。
  • Jet OLE DB プロバイダは、Excel ブックのテーブルに対するキーやインデックスの情報を提供できません。このため、CommandBuilder を使用して、Excel ブックのレコードに対する更新や挿入のコマンドを自動生成できません。

関連情報

関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
316756 [PRB] ADO.NET の OLEDbDataAdapter を使用して Excel ブックを変更するとエラーが発生する
257819 [HOWTO] Visual Basic または VBA から ADO を Excel データで使用する
306022 [HOW TO] Visual Basic .NET を使用してデータを Excel ブックに転送する方法
306023 [HOWTO] Visual C# .NET を使用してデータを Excel ブックに転送する方法
311731 [HOW TO] ASP.NET、ADO.NET、および Visual Basic .NET による Excel データの取得と表示
306572 [HOWTO] ASP.NET、ADO.NET、および Visual C# .NET による Excel データの取得と表示方法
278973 [SAMPLE] ADO を使用して Excel ブックのデータの読み取りおよび書き込みを行う方法 (ExcelADO)

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 316934 (最終更新日 2004-07-14) を基に作成したものです。

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

プロパティ

文書番号: 316934 - 最終更新日: 2005年1月25日 - リビジョン: 7.1
この資料は以下の製品について記述したものです。
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
キーワード:?
kbhowtomaster KB316934
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

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