XLS ファイルの作成と読み込み(OLEDB)

文書番号 : 27023     文書種別 : 使用方法     最終更新日 : 2009/05/27
文書を印刷する
対象製品
MultiRow for Windows Forms 5.0J
詳細
MultiRow には Excel で出力された XLS ファイルを直接取り扱う機能は提供されていませんが、Microsoft Jet 4.0 OLE DB プロバイダを使用する一般的な方法によって XLS ファイルの取り扱いが可能です。

XLS ファイルの作成
次のコードは、サンプルとして使用する XLS ファイルを出力します。

[Visual Basic]
Imports System.Data.OleDb

Dim fileName As String = "C:¥MyDocuments¥test.xls"
Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes'"
Using oleDbConnection As New OleDbConnection(String.Format(connectionString, fileName))
  oleDbConnection.Open()
  ' 新しいテーブルを作成する
  Dim oleDbCommand As New OleDbCommand("CREATE TABLE [Sheet1] ([Column1] string, [Column2] string)", oleDbConnection)
  OleDbCommand.ExecuteNonQuery()
  ' 値を追加する(1レコード目)
  oleDbCommand = New OleDbCommand("INSERT INTO [Sheet1$] (Column1, Column2) VALUES ('ABC', '日本語')", oleDbConnection)
  OleDbCommand.ExecuteNonQuery()
  ' 値を追加する(2レコード目)
  oleDbCommand = New OleDbCommand("INSERT INTO [Sheet1$] (Column1, Column2) VALUES ('12345', '2009/1/1')", oleDbConnection)
  OleDbCommand.ExecuteNonQuery()
End Using


[C#]
using System.Data.OleDb;

string fileName = @"C:¥MyDocuments¥test.xls";
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes'";

using (OleDbConnection oleDbConnection = new OleDbConnection(string.Format(connectionString, fileName)))
{
  oleDbConnection.Open();
  // 新しいテーブルを作成する
  OleDbCommand oleDbCommand = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] string, [Column2] string)", oleDbConnection);
  oleDbCommand.ExecuteNonQuery();
  // 値を追加する(1レコード目)
  oleDbCommand = new OleDbCommand("INSERT INTO [Sheet1$] (Column1, Column2) VALUES ('ABC', '日本語')", oleDbConnection);
  oleDbCommand.ExecuteNonQuery();
  // 値を追加する(2レコード目)
  oleDbCommand = new OleDbCommand("INSERT INTO [Sheet1$] (Column1, Column2) VALUES ('12345', '2009/1/1')", oleDbConnection);
  oleDbCommand.ExecuteNonQuery();
}


XLS ファイルの読み込み
次のコードは、上記のサンプルで作成した XLS ファイルの内容を GcMultiRow コントロールに表示します。

[Visual Basic]
Imports System.Data.OleDb
Imports GrapeCity.Win.MultiRow

Private _dataSet As New DataSet()

Dim fileName As String = "C:¥MyDocuments¥test.xls"
Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes'"
Dim query As String = "SELECT * FROM [Sheet1$]"

Using oleDbConnection As New OleDbConnection(String.Format(connectionString, fileName))
  Using oleDbDataAdapter As New OleDbDataAdapter(query, oleDbConnection)
    oleDbDataAdapter.Fill(Me._dataSet)
  End Using
End Using

' セルとデータフィールドの対応を指定する
Dim template As Template = Template.Default
template.Row.Cells("textBoxCell1").DataField = "Column1"
template.Row.Cells("textBoxCell2").DataField = "Column2"
Me.gcMultiRow1.Template = template

' データバウンドと同じ方法で XLS ファイルに接続する
Me.gcMultiRow1.DataSource = Me._dataSet
Me.gcMultiRow1.DataMember = Me._dataSet.Tables(0).TableName

' データバウンドしない場合、次のコードで XLS ファイルの値を読み出せる
Console.WriteLine(Me._dataSet.Tables(0).Rows(0)("Column1").ToString())

[C#]
using System.Data.OleDb;
using GrapeCity.Win.MultiRow;

private DataSet _dataSet = new DataSet();

string fileName = @"C:¥MyDocuments¥test.xls";
string connectionStringTemplate = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;'";
string query = "SELECT * FROM [Sheet1$]";

using (OleDbConnection oldDbConnection = new OleDbConnection(string.Format(connectionStringTemplate, fileName)))
{
  using (OleDbDataAdapter oleDbDataAdapter = new OleDbDataAdapter(query, oleDbConnection))
  {
    oleDbDataAdapter.Fill(this._dataSet);
  }
}

// セルとデータフィールドの対応を指定する
Template template = Template.Default;
template.Row.Cells["textBoxCell1"].DataField = "Column1";
template.Row.Cells["textBoxCell2"].DataField = "Column2";
this.gcMultiRow1.Template = template;

// データバウンドと同じ方法で XLS ファイルに接続する
this.gcMultiRow1.DataSource = this._dataSet;
this.gcMultiRow1.DataMember = this._dataSet.Tables[0].TableName;

// データバウンドしない場合、次のコードで XLS ファイルの値を読み出せる
Console.WriteLine(this._dataSet.Tables[0].Rows[0]["Column1"].ToString());

参考
より詳細な使用方法については、Microsoft 社が提供する次の情報を参照してください。
Visual Basic.NET と ADO.NET を使用して Excel ブックのレコードの取得と変更を行う方法

この文書は、以前は次のFAQ IDで公開されていました : 11770