diff --git a/src/MiniExcel/MiniExcel.cs b/src/MiniExcel/MiniExcel.cs index c508f657..bcfe6620 100644 --- a/src/MiniExcel/MiniExcel.cs +++ b/src/MiniExcel/MiniExcel.cs @@ -184,31 +184,35 @@ public static DataTable QueryAsDataTable(this Stream stream, bool useHeaderRow = var dt = new DataTable(sheetName); var first = true; - var rows = ExcelReaderFactory.GetProvider(stream, ExcelTypeHelper.GetExcelType(stream, excelType), configuration).Query(useHeaderRow, sheetName, startCell); + var rows = ExcelReaderFactory.GetProvider(stream, ExcelTypeHelper.GetExcelType(stream, excelType), configuration).Query(false, sheetName, startCell); - var keys = new List(); + var columnDict = new Dictionary(); foreach (IDictionary row in rows) { if (first) { - foreach (var key in row.Keys) + foreach (var entry in row) { - if (!string.IsNullOrEmpty(key)) // avoid #298 : Column '' does not belong to table + var columnName = useHeaderRow ? entry.Value?.ToString() : entry.Key; + if (!string.IsNullOrWhiteSpace(columnName)) // avoid #298 : Column '' does not belong to table { - var column = new DataColumn(key, typeof(object)) { Caption = key }; + var column = new DataColumn(columnName, typeof(object)) { Caption = columnName }; dt.Columns.Add(column); - keys.Add(key); + columnDict.Add(entry.Key, columnName);//same column name throw exception??? } } - dt.BeginLoadData(); first = false; + if (useHeaderRow) + { + continue; + } } var newRow = dt.NewRow(); - foreach (var key in keys) + foreach (var entry in columnDict) { - newRow[key] = row[key]; //TODO: optimize not using string key + newRow[entry.Value] = row[entry.Key]; //TODO: optimize not using string key } dt.Rows.Add(newRow);