存在很多优秀的操作Excel文件的库,本次使用ExcelDataReader 库读取Excel中的内容。感觉这个库很容易上手,操作方便,值得介绍一下。
1. 安装库ExcelDataReader
安装信息如下:
正在尝试收集与目标为“.NETFramework,Version=v4.8”的项目“01_ReadExcelDemo”有关的包“ExcelDataReader.3.6.0”的依赖项信息
收集依赖项信息花费时间1.22 sec
正在尝试解析程序包“ExcelDataReader.3.6.0”的依赖项,DependencyBehavior 为“Lowest”
解析依赖项信息花费时间0 ms
正在解析操作以安装程序包“ExcelDataReader.3.6.0”
已解析操作以安装程序包“ExcelDataReader.3.6.0”
正在将包“ExcelDataReader.3.6.0”添加到文件夹“D:\CodeTest\ReadExcelByExcelDataReader\packages”
已将包“ExcelDataReader.3.6.0”添加到文件夹“D:\CodeTest\ReadExcelByExcelDataReader\packages”
已将包“ExcelDataReader.3.6.0”添加到“packages.config”
已将“ExcelDataReader 3.6.0”成功安装到01_ReadExcelDemo
执行 nuget 操作花费时间23.82 sec
已用时间: 00:00:25.5807833
2. 读取Excel文件内容
将Excel 文件路径出入下参数filePath。
using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read))
{
// Auto-detect format, supports:
// - Binary Excel files (2.0-2003 format; *.xls)
// - OpenXml Excel files (2007 format; *.xlsx, *.xlsb)
using (var reader = ExcelReaderFactory.CreateReader(stream))
{
// Choose one of either 1 or 2:
// 1. Use the reader methods
do
{
Console.WriteLine("=========================");
Console.WriteLine($"表名称: {reader.Name}");
Console.WriteLine("=========================");
while (reader.Read()) // 读取Excel文件所有表中得内容
{
// reader.GetDouble(0);
//reader.GetString(1);
//var d1 = reader.GetValue(0); //返回Object
//var d2 = reader.GetValue(1);
//Console.WriteLine($"{d1} {d2} ");
for (int i = 0; i < reader.FieldCount; i++)
{
Console.Write($"{reader.GetValue(i)}\t");
}
Console.WriteLine();
}
} while (reader.NextResult());
读取该Excel文件所有表的内容。
3. 读取Excel文件表的行列,依据行列遍历
using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read))
{
using (var reader = ExcelReaderFactory.CreateReader(stream))
{
Console.WriteLine("==========================================");
Console.WriteLine($"工作表的数量:{reader.ResultsCount} ");
Console.WriteLine("==========================================");
int nums = reader.ResultsCount;
for (int i = 0; i < nums; i++)
{
Console.WriteLine($"当前工作表名:{reader.Name}");
Console.WriteLine($"当前工作表列数:{reader.FieldCount}");
Console.WriteLine($"当前工作表行数:{reader.RowCount}");
int rows = reader.RowCount;
int cols = reader.FieldCount;
string taName = reader.Name;
for (int index = 0; index < rows; index++)
{
reader.Read();//每一行读取一次
for (int j = 0; j < cols; j++)
{
//var ty = reader.GetFieldType(j);
//Console.WriteLine(ty.Name);
var v = reader.GetValue(j);
Console.Write($"{v} ");
}
Console.WriteLine();
}
reader.NextResult(); //下一张表
Console.WriteLine($"===========Above {taName} Data===============");
}
}
获取总表数,获取每张表的行,列数据,再依据行列遍历。
网友评论