首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExcelDataReader GetOrdinal方法在.Net核中的应用

ExcelDataReader GetOrdinal方法在.Net核中的应用
EN

Stack Overflow用户
提问于 2017-08-10 09:20:54
回答 1查看 890关注 0票数 0

带有ExcelDataReader 1.1的.NetCore不支持GetOrdinal。调用GetOrdinal方法将导致异常:

“方法不受支持”

代码语言:javascript
复制
while (reader.Read())
{
    var id = reader.GetOrdinal("id");
    ...
}    

我相信这样做的目的是使用ExcelDataReader.DataSet包,但是这与.NetCore不兼容。

是否有任何已知的工作来获得列的名称而不是索引?

如下所示,但依赖于按一定顺序排列的列:

代码语言:javascript
复制
while (reader.Read())
{
    var id = reader.GetValue(0);
    ...
}
EN

回答 1

Stack Overflow用户

发布于 2017-08-10 12:58:41

不幸的是,目前还没有办法从ExcelDataReader中使用它,因为即使在源代码中,我们也只能得到:

代码语言:javascript
复制
    public string GetName(int i) => throw new NotSupportedException();
    public int GetOrdinal(string name) => throw new NotSupportedException();

正如您所说的,DataSet还不被.NET核心1所支持,但是如果相信这个链接,它应该在.NET核心2中。也许这样的话,ExcelDataReader.DataSet for .NET Core的版本就会出现。现在,您应该编写自己的GetOrdinal实现,其中也提到了在这次讨论中。您可以编写简单的实现(它不处理名称相同的两个或多个列的情况,如果您的列名位于工作表的第一行),现在可以这样做:

代码语言:javascript
复制
    public static class ExcelExtensionMethods
    {
        static Dictionary<int, string> _columns = new Dictionary<int, string>();

        public static int GetOrdinalCustom(this IExcelDataReader reader, string colName)
        {
            if (reader.Depth == 0 && _columns.Count<reader.FieldCount)
                FillColumns(reader);

            var columnIndex = _columns.Any(xx => xx.Value.Contains(colName.ToLower()))
                ? _columns.FirstOrDefault(xx => xx.Value.Contains(colName.ToLower())).Key
                : -1;

            return columnIndex;
        }

        private static void FillColumns(IExcelDataReader reader)
        {
            for (int i = 0; i < reader.FieldCount; i++)
            {
                _columns.Add(i, reader.GetValue(i).ToString().ToLower());
            }
        }
    }

并在代码中使用,如下所示:

代码语言:javascript
复制
    var author = reader.GetOrdinalCustom("Author");
    var mark = reader.GetOrdinalCustom("Mark");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45609498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档