Пример #1
0
        internal IEnumerable <T> MapExcelToEnumerable(string filePath,
                                                      IExcelToEnumerableContext excelToEnumerableContext,
                                                      IExcelToEnumerableOptions <T> options)
        {
            var workbook = new ExcelReader(filePath);
            var list     = MapWorkbookToEnumerable(workbook, excelToEnumerableContext, options);

            return(list);
        }
Пример #2
0
        private IEnumerable <T> MapWorkbookToEnumerable(ExcelReader workbook,
                                                        IExcelToEnumerableContext excelToEnumerableContext,
                                                        IExcelToEnumerableOptions <T> options)
        {
            _options = options;
            var worksheet = _options.WorksheetNumber.HasValue
                ? workbook[_options.WorksheetNumber.Value]
                : workbook[_options.WorksheetName];

            while (!worksheet.CurrentRowNumber.HasValue || worksheet.CurrentRowNumber < _options.HeaderRow)
            {
                worksheet.ReadNext();
            }

            _exceptionList =
                options.ExceptionHandlingBehaviour == ExceptionHandlingBehaviour.ThrowOnFirstException
                    ? null
                    : new List <Exception>();

            var rowMapper = excelToEnumerableContext.GetRowMapper(_options) ??
                            excelToEnumerableContext.SetRowMapper(_options);

            var headerArray   = ReadHeader(options, worksheet);
            var headerHandler = new HeaderHandler(rowMapper.Setters);
            var cellSettersDictionaryForRead = headerHandler.GetPropertySetterDictionary(headerArray, options);

            var list = MainLoop(worksheet, rowMapper, options, cellSettersDictionaryForRead);

            if (_options.UniqueProperties != null)
            {
                list = CheckUniqueFields(rowMapper, list);
            }

            HandleAggregatedExceptions();

            return(list);
        }