c# - 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 方法的文档。
我无法完全理解我错过的重点......
解决方案
推荐阅读
- ios - UIPanGestureRecognizer not working on iOS 13.0
- discord - Discord.py 没有取消固定自己机器人的消息
- javascript - 带有事件的 Promisfy 函数
- mapping - Show Grid line of 2d Map in image
- python - i did not resize the images
- java - I am trying to search using an edit text from firebase realtime database
- image - Image inside Grid insideListView doesn't let me see the SelectedItem highlight
- amadeus - How to get the access key in latest way?
- python - Python:用平均值替换 NULL
- python - 我在用数据科学的书 python 解决这个问题时遇到了错误?