From 0f24082bc0c67227480b794598cf7c13932292f0 Mon Sep 17 00:00:00 2001 From: Amos Date: Mon, 12 Aug 2024 11:42:40 +0800 Subject: [PATCH 1/2] Fixed an issue with QueryAsDataTable that only header rows cannot be read correctly --- src/MiniExcel/MiniExcel.cs | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/MiniExcel/MiniExcel.cs b/src/MiniExcel/MiniExcel.cs index c508f657..644637bd 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.IsNullOrEmpty(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); } } - 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); From 5588a4fbf19a3fdd47e11f9ad85710da53046890 Mon Sep 17 00:00:00 2001 From: Amos Date: Mon, 12 Aug 2024 15:13:36 +0800 Subject: [PATCH 2/2] handling null value --- src/MiniExcel/MiniExcel.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/MiniExcel/MiniExcel.cs b/src/MiniExcel/MiniExcel.cs index 644637bd..bcfe6620 100644 --- a/src/MiniExcel/MiniExcel.cs +++ b/src/MiniExcel/MiniExcel.cs @@ -193,12 +193,12 @@ public static DataTable QueryAsDataTable(this Stream stream, bool useHeaderRow = { foreach (var entry in row) { - var columnName = useHeaderRow ? entry.Value.ToString() : entry.Key; - if (!string.IsNullOrEmpty(columnName)) // 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(columnName, typeof(object)) { Caption = columnName }; dt.Columns.Add(column); - columnDict.Add(entry.Key, columnName); + columnDict.Add(entry.Key, columnName);//same column name throw exception??? } } dt.BeginLoadData();