ExcelDataReader插件
参考:https://github.com/ExcelDataReader
安装
右键项目的“引用”,选择“管理NuGet包”,搜索“ExcelDataReader”。
包:ExcelDataReader和ExcelDataReader.DataSet
常用方法
Read()
从当前表中读取一行NextResult()
将光标指向下一行ResultsCount
返回当前工作簿中的表数Name
返回当前表的名称FieldCount
返回当前表中的列数RowCount
返回当前表中的行数。这包括由 AsDataSet () 排除的终端空行HeaderFooter
返回带有有关头和脚的信息的对象,或者如果没有MergeCells
返回当前表中的合并单元格范围阵列RowHeight
返回当前行的点的视觉高度。如果行被隐藏,则可能是 0GetColumnWidth()
返回字符单元中列的宽度。如果列被隐藏,则可能是 0GetFieldType()
返回当前行中的值类型IsDBNull()
检查当前行中的值是否为空GetValue()
从当前行中返回值GetDouble()
将当前行的值返回到各自的类型,如GetInt32()
GetBoolean()
GetDateTime()
GetString()
GetNumberFormatString()
返回包含格式代码的字符串,以获得当前行中值GetNumberFormatIndex()
返回当前行中值的数字格式索引。低于 164 的索引值是指内置数字格式,否则表示自定义数字格式。GetCellStyle()
返回包含当前行中单元格的样式信息的对象
TestCode
private static IList<string> GetTablenames(DataTableCollection tables)
{
var tableList = new List<string>();
foreach (var table in tables)
{
tableList.Add(table.ToString());
}
return tableList;
}
//打开文件对话框
private void Button1Click(object sender, EventArgs e)
{
var result = openFileDialog1.ShowDialog();
if (result == DialogResult.OK)
{
textBox1.Text = openFileDialog1.FileName;
}
}
//读取文件
private void Button2Click(object sender, EventArgs e)
{
var extension = Path.GetExtension(textBox1.Text).ToLower(); //返回指定的路径字符串的扩展名
using (var stream = new FileStream(textBox1.Text, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
var sw = new Stopwatch();
sw.Start();
IExcelDataReader reader = null;
if (extension == ".xls")
{
reader = ExcelReaderFactory.CreateBinaryReader(stream);
}
else if (extension == ".xlsx")
{
reader = ExcelReaderFactory.CreateOpenXmlReader(stream);
}
else if (extension == ".csv")
{
reader = ExcelReaderFactory.CreateCsvReader(stream);
}
if (reader == null)
return;
var openTiming = sw.ElapsedMilliseconds; //获取当前实例测量得出的总运行时间
// reader.IsFirstRowAsColumnNames = firstRowNamesCheckBox.Checked;
using (reader)
{
ds = reader.AsDataSet(new ExcelDataSetConfiguration()
{
UseColumnDataType = false,
ConfigureDataTable = (tableReader) => new ExcelDataTableConfiguration()
{
UseHeaderRow = firstRowNamesCheckBox.Checked
}
});
}
toolStripStatusLabel1.Text = "Elapsed: " + sw.ElapsedMilliseconds.ToString() + " ms (" + openTiming.ToString() + " ms to open)";
var tablenames = GetTablenames(ds.Tables);
sheetCombo.DataSource = tablenames; //choose sheet下拉框绑定数据
if (tablenames.Count > 0)
sheetCombo.SelectedIndex = 0;
// dataGridView1.DataSource = ds;
// dataGridView1.DataMember
//得到ExcelFile文件的表Sheet
//var sheet = ds.Tables[Sheet];
}
}
private void SelectTable()
{
var tablename = sheetCombo.SelectedItem.ToString();
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = ds; // dataset
dataGridView1.DataMember = tablename;
// GetValues(ds, tablename);
}
private void SheetComboSelectedIndexChanged(object sender, EventArgs e)
{
SelectTable();
}
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 }
});
DataTableCollection tableCollection = result.Tables;
cboSheet.Items.Clear();
foreach (DataTable item in tableCollection)
{
cboSheet.Items.Add(item.TableName);
}
}
}
FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
//Choose one of either 1 or 2
//1. Reading from a binary Excel file ('97-2003 format; *.xls)
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
//2. Reading from a OpenXml Excel file (2007 format; *.xlsx)
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
//3.Reading from a CSV file
IExcelDataReader excelReader = ExcelReaderFactory.CreateCsvReader(stream);
//Choose one of either 3, 4, or 5
//4. DataSet - The result of each spreadsheet will be created in the result.Tables
DataSet result = excelReader.AsDataSet();
//5. DataSet - Create column names from first row
excelReader.IsFirstRowAsColumnNames = true;
DataSet result = excelReader.AsDataSet();
//6. Data Reader methods
while (excelReader.Read())
{
//excelReader.GetInt32(0);
}
//7. Free resources (IExcelDataReader is IDisposable)
excelReader.Close();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异