如何使用ExcelDataReader从Excel中只读列?

lrpiutwd  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(231)

我正在使用下面的代码从Excel工作表中读取列名。它工作正常。但是它会将整个工作表数据加载到datatable中。这会花费很多时间。有没有什么方法可以只读取列名而不加载整个工作表?

using (var stream = File.Open(strDoc, FileMode.Open, FileAccess.Read))
   { 

        using (var reader = ExcelReaderFactory.CreateReader(stream))
        {
            dt = reader.AsDataSet(new ExcelDataSetConfiguration()
            {
                ConfigureDataTable = (tablereader) => new ExcelDataTableConfiguration() { UseHeaderRow = true }
            }).Tables["Data"];
        }
    }

    foreach (var col in dt.Columns)
    {
        columnNamesList.Add(col.ToString().Trim());
    }

“Data”是工作表名称。

qij5mzcb

qij5mzcb1#

可以使用FilterRow跳过行。例如:

dt = reader.AsDataSet(new ExcelDataSetConfiguration()
{
     ConfigureDataTable = (tablereader) => new ExcelDataTableConfiguration() { UseHeaderRow = true, FilterRow = rowReader => rowReader.Depth < 1 }
}).Tables["Data"];

此时dt.Rows.Count将为0。
不确定这是否会加快响应速度,但它会阻止将工作表中的行插入到DataTable中。
有用链接:
Using ExcelDataReader to read Excel data starting from a particular cell .
如何跳过行和单元格以创建数据集?

vcudknz3

vcudknz32#

最快的方法是读取第一行,而不需要AsDataSet的开销:

for (int i = 0; i < reader.FieldCount; i++) {
    columnNamesList.Add(reader.GetString(i));
}

相关问题