不幸的是,現在還沒有辦法從ExcelDataReader
使用它,因爲即使在source code,我們只是得到:
public string GetName(int i) => throw new NotSupportedException();
public int GetOrdinal(string name) => throw new NotSupportedException();
正如你所說的DataSet不是.NET核心1尚不支持,但如果認爲這link它應該是在.NET核心2.也許這樣ExcelDataReader.DataSet for .NET的核心版本將會出現。現在你應該寫你自己的GetOrdinal實現,其中也提到了in this discussion。你可以寫你輕鬆實現(不與2個或多個列具有相同名稱的審理,對您的工作表的第一行,如果你的列名工作)現在這個樣子的:
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());
}
}
}
和使用你的代碼如下:
var author = reader.GetOrdinalCustom("Author");
var mark = reader.GetOrdinalCustom("Mark");