web-dev-qa-db-ja.com

ExcelDataReaderでのC#エラー

最近、私はExcelファイルを読むことができるアプリを作ろうとしていました。しかし、Excelファイルを選択した直後に、次のエラーが表示されます。

'ExcelDataReader.Exceptions.HeaderException'がExcelDataReader.dllで発生しました

追加情報:無効なファイル署名。」

エラーは38行目でキャッチされています

これが私のコードのコピーです

using ExcelDataReader;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

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

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void label1_Click(object sender, EventArgs e)
    {

    }
    DataSet result;
    private void btnOpen_Click(object sender, EventArgs e)
    {
        using(OpenFileDialog ofd = new OpenFileDialog() )
        {
            if (ofd.ShowDialog()==DialogResult.OK)
            {
                System.IO.FileStream fs = System.IO.File.Open(ofd.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
                IExcelDataReader reader = ExcelReaderFactory.CreateBinaryReader(fs);   // ERROR HERE
                var result = reader.AsDataSet(new ExcelDataSetConfiguration()
                {
                    ConfigureDataTable = (_) => new ExcelDataTableConfiguration()
                    {
                        UseHeaderRow = true
                    }
                });
                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];
    }
}
}
5
Jeremy22

このコードは、XLS形式用のExcelReaderFactory.CreateBinaryReaderを呼び出します。

代わりに、具体的にはXLSX形式にExcelReaderFactory.CreateOpenXmlReaderを使用するように変更するか、ExcelReaderFactory.CreateReaderを使用してXLSまたはXLSX形式を透過的に自動検出します。

13
user8728340