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
'reader.AsDataSet()'がnullを返し、 'result.Tables'プロパティにアクセスしようとしているので、エラーが発生します。これをテストするには.xlsxファイルの例がありますか? –
おそらくあなたのデータセット 'result'は空のコンテンツを取っています。デバッグして、 'result'の内容を見てください。また、 'DataSet result = new DataSet()'としてインスタンス化しようとします。 –
これは、新しい.xlsxファイルの問題であるようです。 IExcelDataREaderオブジェクトには、ファイルの署名に関する問題を示すエラーメッセージが含まれています。最新の試用版(v3.0.0-develop00086)にパッケージを更新し、 'AsDataSet()'拡張メソッドを使うために必要な) 'ExcelDataREader.DataSet'パッケージを追加したところ、xlsxファイルを読み込んでアクセスできましたデータセット内のテーブル –