2017-07-01 12 views
0

XLSXデータをExcelDataReader NuGetパッケージを使用してDataGridViewに格納しようとしています。 しかし、私はここでライン上のオブジェクトエラー35フォームでExcelドキュメントを読み取るときにエラーが発生しました。C#

foreach (DataTable dt in result.Tables) 

のインスタンスへのオブジェクト参照設定されていない取得は完全なコードです。ここで

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Data.OleDb; 
using System.IO; 
using Excel; 

namespace MyForm 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     DataSet result; 

     private void butOpen_Click(object sender, EventArgs e) 
     { 
      using (OpenFileDialog ofd = new OpenFileDialog()) 
      { 
       if (ofd.ShowDialog() == DialogResult.OK) 
       { 
        FileStream fs = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read); 
        IExcelDataReader reader = ExcelReaderFactory.CreateBinaryReader(fs); 
        reader.IsFirstRowAsColumnNames = true; 
        result = reader.AsDataSet(); 
        cboSheet.Items.Clear(); 
        foreach (DataTable dt in result.Tables) 
        cboSheet.Items.Add(dt.TableName); 
        reader.Close(); 

       } 
      } 

     } 

     private void cboSheet_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      dataGridView.DataSource = result.Tables[cboSheet.SelectedIndex]; 

     } 
    } 
} 

エラーメッセージが表示されます。プロパティIsFirstRowAsColumnNamesは、パッケージの新しいバージョンで利用できなくなりました

:コメントに応えて Error

+0

'reader.AsDataSet()'がnullを返し、 'result.Tables'プロパティにアクセスしようとしているので、エラーが発生します。これをテストするには.xlsxファイルの例がありますか? –

+0

おそらくあなたのデータセット 'result'は空のコンテンツを取っています。デバッグして、 'result'の内容を見てください。また、 'DataSet result = new DataSet()'としてインスタンス化しようとします。 –

+0

これは、新しい.xlsxファイルの問題であるようです。 IExcelDataREaderオブジェクトには、ファイルの署名に関する問題を示すエラーメッセージが含まれています。最新の試用版(v3.0.0-develop00086)にパッケージを更新し、 'AsDataSet()'拡張メソッドを使うために必要な) 'ExcelDataREader.DataSet'パッケージを追加したところ、xlsxファイルを読み込んでアクセスできましたデータセット内のテーブル –

答えて

0

LINK GitHubのページから:

AsDataSet構成オプション

AsDataSet()関数は、データセットの変換の動作を変更 にオプションの構成オブジェクトを受け入れ:

var result = reader.AsDataSet(new ExcelDataSetConfiguration() { 

    // Gets or sets a value indicating whether to set the DataColumn.DataType 
    // property in a second pass. 
    UseColumnDataType = true, 

    // Gets or sets a callback to obtain configuration options for a DataTable. 
    ConfigureDataTable = (tableReader) => new ExcelDataTableConfiguration() { 

     // Gets or sets a value indicating the prefix of generated column names. 
     EmptyColumnNamePrefix = "Column", 

     // Gets or sets a value indicating whether to use a row from the 
     // data as column names. 
     UseHeaderRow = false, 

     // Gets or sets a callback to determine which row is the header row. 
     // Only called when UseHeaderRow = true. 
     ReadHeaderRow = (rowReader) => { 
      // F.ex skip the first row and use the 2nd row as column headers: 
      rowReader.Read(); 
     } 
    } 
}); 

私は推測していますExcelDataTAbleConfigurationにあるUseHeaderRow = true;の行には、必要な動作が発生します。

EDIT:シート1とシート2両2を持つ2つの列が含まれています。この例では、Excelの2016年 で作成した新しい.xlsx形式のファイルで私の作品実施例に

を追加したファイルが2枚が含まれていますテキストの行。

List<string> tblNames = new List<string>(); 
OpenFileDialog ofd = new OpenFileDialog(); 

if (ofd.ShowDialog() ?? false) 
{ 
    using (FileStream fs = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
    { 
     using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(fs)) 
     { 
      var result = reader.AsDataSet(new ExcelDataSetConfiguration() 
      { 
       UseColumnDataType = true, 

       ConfigureDataTable = (tableReader) => new ExcelDataTableConfiguration() 
       {         
        UseHeaderRow = true 
       } 
      }); 

      foreach (DataTable dt in result.Tables) 
       tblNames.Add(dt.TableName); 
     } 
    } 
} 

これは、WPFアプリケーションであるので、OpenFileDialogの使用量は少し異なります。

+0

さて、31行目で無効なファイル署名エラーが発生しました.IExcelDataReader reader = ExcelReaderFactory.CreateBinaryReader(fs); – Adam

+0

.xlsxファイルの作成に使用したソフトウェア(およびバージョン)はどれですか? –

+0

Microsoft Excel 2016 – Adam

関連する問題