FlexPivot for WinForms
Excel のデータのインポート
タスク別ヘルプ > Excel のデータのインポート

Excel ファイル(.xls, .xlsx)から FlexPivot アプリケーションにデータをインポートできます。次のコードサンプルは、Excel ファイルを FlexPivotPage にインポートする方法を示しています。

データを Excel ファイルから FlexPivotPage コントロールにインポートするには、次の手順を実行します。この例では、Sales.xlsx というサンプル Excel ファイルをデータのインポートに使用します。

  1. Visual Studio で新しい Windows フォームアプリケーションプロジェクトを作成します。
  2. ツールボックスから、FlexPivotPage コントロールをフォームに追加します。
  3. スマートタグアイコン()を1回クリックして、[FlexPivotPage のタスク]スマートタグパネルを開きます。
  4. [親コンテナでドッキングを解除する]オプションを選択して、親コンテナ(フォーム)から FlexPivotPage コントロールをドッキング解除します。
  5. 再度ツールボックスに移動し、フォームに汎用のボタンコントロールを追加します。
  6. ボタンコントロールを FlexPivotPage コントロールの上に配置します。
  7. プロパティウィンドウで、ボタンコントロールの Text プロパティを「Import Data」に設定します。デザイナは次の図のように表示されます。

  8. コードビューに切り替え、次のコードを追加して Sales.xlsx ファイルとの接続文字列を設定します。
    'サンプルのExcelファイルの接続文字列を取得します。
    Private Function GetConnectionString(Optional firstRowHasNames As Boolean = True, 
    Optional mixedTypesAsText As Boolean = True) As String
        Dim conn As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};
        Extended Properties=""Excel 12.0;HDR={1};IMEX={2};ReadOnly=true"""
        Return String.Format(conn, samplePath, firstRowHasNames, mixedTypesAsText)
    End Function
    
    //サンプルのExcelファイルの接続文字列を取得します。
    private string GetConnectionString(bool firstRowHasNames = true, bool mixedTypesAsText = true)
    {
        string conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};
        Extended Properties=\"Excel 12.0;HDR={1};IMEX={2};ReadOnly=true\"";
        return string.Format(conn, samplePath, firstRowHasNames, mixedTypesAsText);
    
    }
    

    このファイルは、システムの Documents\ComponentOne Samples\Common\Sales.xlsx に保存できます。ファイルを別の場所に保存する場合は、GetConnectionString メソッドで定義されているパスを変更してください。

  9. コードビューに切り替えて、次の Import 文を追加します。
    Imports C1.DataEngine
    Imports System.Data.OleDb
    
    using C1.DataEngine;
    using System.Data.OleDb;
    
  10. 次のコードに示すように、データパスとサンプルパスを初期化します。
    Dim dataPath As String = Path.Combine(System.Windows.Forms.Application.StartupPath, "Data")
    Dim samplePath As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) 
    + "\ComponentOne Samples\Common\Sales.xlsx"
    
    string dataPath = Path.Combine(System.Windows.Forms.Application.StartupPath, "Data");
    string samplePath = Environment.GetFolderPath(Environment.SpecialFolder.Personal)
     + @"\ComponentOne Samples\Common\Sales.xlsx";
    
  11. コードビューで、Excel ファイルからデータを読み取るための Sales という名前のクラスを作成します。
    Public Class Sales
        Public Property salesperson() As String
            Get
                Return m_salesperson
            End Get
            Set(value As String)
                m_salesperson = Value
            End Set
        End Property
        Private m_salesperson As String
        Public Property region() As String
            Get
                Return m_region
            End Get
            Set(value As String)
                m_region = Value
            End Set
        End Property
        Private m_region As String
        Public Property account_number() As Double
            Get
                Return m_account_number
            End Get
            Set(value As Double)
                m_account_number = Value
            End Set
        End Property
        Private m_account_number As Double
        Public Property amount() As Decimal
            Get
                Return m_amount
            End Get
            Set(value As Decimal)
                m_amount = Value
            End Set
        End Property
        Private m_amount As Decimal
        Public Property month() As String
            Get
                Return m_month
            End Get
            Set(value As String)
                m_month = Value
            End Set
        End Property
        Private m_month As String
    
        Public Sub New(reader As IDataReader)
            Dim nv = New NullValue()
            salesperson = If(reader.IsDBNull(0), nv.NullString, reader.GetString(0))
            region = If(reader.IsDBNull(1), nv.NullString, reader.GetString(1))
            account_number = If(reader.IsDBNull(2), nv.NullDouble, reader.GetDouble(2))
            amount = If(reader.IsDBNull(3), nv.NullDecimal, reader.GetDecimal(3))
            month = If(reader.IsDBNull(4), nv.NullString, reader.GetString(4))
        End Sub
    
        Public Shared Iterator Function GetSalesInfo(reader As IDataReader) As IEnumerable(Of Sales)
            While reader.Read()
                Yield New Sales(reader)
            End While
        End Function
    
    End Class
    
    public class Sales
    {
        public string salesperson { get; set; }
        public string region { get; set; }
        public double account_number { get; set; }
        public decimal amount { get; set; }
        public string month { get; set; }
    
        public Sales(IDataReader reader)
        {
            var nv = new NullValue();
            salesperson = reader.IsDBNull(0) ? nv.NullString : reader.GetString(0);
            region = reader.IsDBNull(1) ? nv.NullString : reader.GetString(1);
            account_number = reader.IsDBNull(2) ? nv.NullDouble : reader.GetDouble(2);
            amount = reader.IsDBNull(3) ? nv.NullDecimal : reader.GetDecimal(3);
            month = reader.IsDBNull(4) ? nv.NullString : reader.GetString(4);
        }
    
        public static IEnumerable<Sales> GetSalesInfo(IDataReader reader)
        {
            while (reader.Read())
                yield return new Sales(reader);
        }
    }
    
  12. フォームのコンストラクタで作業領域を初期化します。
    Public Sub New()
        InitializeComponent()
        C1.DataEngine.Workspace.Init(dataPath)
    End Sub
    
    public Form1()
    {
        InitializeComponent();
        C1.DataEngine.Workspace.Init(dataPath);
    }
    
  13. 次のコードを追加して、Excel ファイルからデータを取得します。
    Private Function GetFirstSalesData() As String
        Using conn As New OleDbConnection(GetConnectionString())
            conn.Open()
            ' ワークブックのテーブルのリストを取得します。
            Dim tables = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
            New Object() {Nothing, Nothing, Nothing, "TABLE"})
    
            Dim name As String = tables.Rows(0)("TABLE_NAME").ToString()
    
            Dim command = New OleDbCommand((Convert.ToString("select * from [") & name) + "]", conn)
            Using reader = command.ExecuteReader()
                Dim connector = New ObjectConnector(Of Sales)(Sales.GetSalesInfo(reader))
                connector.GetData(name)
            End Using
            Return name
        End Using
    End Function
    
    private string GetFirstSalesData()
    {
        using (OleDbConnection conn = new OleDbConnection(GetConnectionString()))
        {
            conn.Open();
            // ワークブックのテーブルのリストを取得します。
            var tables = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
            new object[] { null, null, null, "TABLE" });
    
            string name = tables.Rows[0]["TABLE_NAME"].ToString();
    
            var command = new OleDbCommand("select * from [" + name + "]", conn);
            using (var reader = command.ExecuteReader())
            {
                var connector = new ObjectConnector<Sales>(Sales.GetSalesInfo(reader));
                connector.GetData(name);
            }
            return name;
        }
    }
    
  14. プロパティウィンドウから button1_click イベントをサブスクライブします。
  15. 上の手順で作成したイベントハンドラに、次のコードを追加します。
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim tableName As String = GetFirstSalesData()
        C1FlexPivotPage1.FlexPivotPanel.ConnectDataEngine(tableName)
    
        'デフォルトのビューをビルドします。
        Dim engine = C1FlexPivotPage1.FlexPivotPanel.PivotEngine
        engine.BeginUpdate()
        engine.RowFields.Add("salesperson")
        engine.ValueFields.Add("amount")
        engine.EndUpdate()
    End Sub
    
    private void button1_Click(object sender, EventArgs e)
    {
        string tableName = GetFirstSalesData();
        c1FlexPivotPage1.FlexPivotPanel.ConnectDataEngine(tableName);
    
        //デフォルトのビューをビルドします。
        var engine = c1FlexPivotPage1.FlexPivotPanel.PivotEngine;
        engine.BeginUpdate();
        engine.RowFields.Add("salesperson");
        engine.ValueFields.Add("amount");
        engine.EndUpdate();
    }
    

    このコードは、データエンジンをサンプルテーブルに接続して、アプリケーションの実行時に表示されるデフォルトビューを作成します。

  16. [F5] キーを押してアプリケーションを実行し、フォームに表示されるボタンコントロールをクリックして、サンプルファイルからデータをインポートします。