@@ -184,31 +184,35 @@ public static DataTable QueryAsDataTable(this Stream stream, bool useHeaderRow =
184
184
185
185
var dt = new DataTable ( sheetName ) ;
186
186
var first = true ;
187
- var rows = ExcelReaderFactory . GetProvider ( stream , ExcelTypeHelper . GetExcelType ( stream , excelType ) , configuration ) . Query ( useHeaderRow , sheetName , startCell ) ;
187
+ var rows = ExcelReaderFactory . GetProvider ( stream , ExcelTypeHelper . GetExcelType ( stream , excelType ) , configuration ) . Query ( false , sheetName , startCell ) ;
188
188
189
- var keys = new List < string > ( ) ;
189
+ var columnDict = new Dictionary < string , string > ( ) ;
190
190
foreach ( IDictionary < string , object > row in rows )
191
191
{
192
192
if ( first )
193
193
{
194
- foreach ( var key in row . Keys )
194
+ foreach ( var entry in row )
195
195
{
196
- if ( ! string . IsNullOrEmpty ( key ) ) // avoid #298 : Column '' does not belong to table
196
+ var columnName = useHeaderRow ? entry . Value ? . ToString ( ) : entry . Key ;
197
+ if ( ! string . IsNullOrWhiteSpace ( columnName ) ) // avoid #298 : Column '' does not belong to table
197
198
{
198
- var column = new DataColumn ( key , typeof ( object ) ) { Caption = key } ;
199
+ var column = new DataColumn ( columnName , typeof ( object ) ) { Caption = columnName } ;
199
200
dt . Columns . Add ( column ) ;
200
- keys . Add ( key ) ;
201
+ columnDict . Add ( entry . Key , columnName ) ; //same column name throw exception???
201
202
}
202
203
}
203
-
204
204
dt . BeginLoadData ( ) ;
205
205
first = false ;
206
+ if ( useHeaderRow )
207
+ {
208
+ continue ;
209
+ }
206
210
}
207
211
208
212
var newRow = dt . NewRow ( ) ;
209
- foreach ( var key in keys )
213
+ foreach ( var entry in columnDict )
210
214
{
211
- newRow [ key ] = row [ key ] ; //TODO: optimize not using string key
215
+ newRow [ entry . Value ] = row [ entry . Key ] ; //TODO: optimize not using string key
212
216
}
213
217
214
218
dt . Rows . Add ( newRow ) ;
0 commit comments