首页 > 解决方案 > C# | 如何在 DataGrindView 上显示 Excel 工作表?

问题描述

我正在尝试在 DataGrindView 上显示 Excel 工作表。我在互联网上找到了一个解决方案,但是当我尝试浏览 Excel 文件时出现错误。有人会在这个话题上帮助我吗?

浏览按钮代码如下:

private void btnBrowse_Click(object sender, EventArgs e)
        {
            using (OpenFileDialog openFileDialog = new OpenFileDialog() { Filter = "Excel 97-2003 Workbook|*.xls|Excel Workbook|*.xlsx" })
            {
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    txtFilename.Text = openFileDialog.FileName;
                    using (var stream = File.Open(openFileDialog.FileName, FileMode.Open, FileAccess.Read))
                    {
                        using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream))
                        {
                            DataSet result = reader.AsDataSet(new ExcelDataSetConfiguration()
                            {
                                ConfigureDataTable = (_) => new ExcelDataTableConfiguration() { UseHeaderRow = true }
                            });
                            tableCollection = result.Tables;
                            cboxSheet.Items.Clear();
                            foreach (DataTable table in tableCollection)
                                cboxSheet.Items.Add(table.TableName);//add sheet to combobox
                        }
                    }
                }
            }
        }

编辑:

再一次问好,

这是我第一次在 Stackoverflow 上发布内容,对我的错误深表歉意。

我将更详细地解释项目和错误。

这是我的表格申请格式

这是表单代码。

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;
using System.IO;
using ExcelDataReader;
using System.Data.OleDb;

namespace emailsender
{
    public partial class Form2 : Form
    {

        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }



        private void cboxSheet_SelectedIndexChanged(object sender, EventArgs e)
        {

            dataGridView1.DataMember = cboxSheet.SelectedItem.ToString();
        }

        private void btnBrowse_Click(object sender, EventArgs e)
        {
            using (OpenFileDialog openFileDialog = new OpenFileDialog() { Filter = "Excel 97-2003 Workbook|*.xls|Excel Workbook|*.xlsx" })
            {
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    txtFilename.Text = openFileDialog.FileName;
                    using (var stream = File.Open(openFileDialog.FileName, FileMode.Open, FileAccess.Read))
                    {
                        using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream))
                        {
                            DataSet result = reader.AsDataSet(new ExcelDataSetConfiguration()
                            {
                                ConfigureDataTable = (_) => new ExcelDataTableConfiguration() { UseHeaderRow = true }
                            });
                            //tableCollection = result.Tables;
                            cboxSheet.Items.Clear();
                            foreach (DataTable table in result.Tables)
                                cboxSheet.Items.Add(table.TableName);//add sheet to combobox
                            dataGridView1.DataSource = result;
                            cboxSheet.SelectedIndex = 0;
                        }
                    } 
                }
            }
        }
    }
}

我尝试了@JohnG 的示例,但是当我使用文件资源管理器选择文件并按下打开按钮时,我得到了同样的错误。

System.NotSupportedException: '没有可用于编码 1252 的数据。有关定义自定义编码的信息,请参阅 Encoding.RegisterProvider 方法的文档。

我无法完全理解我错过的重点......

标签: c#exceldatagridview

解决方案



推荐阅读