Beispiel #1
0
        /// <summary>
        /// Carga los datos desde la hoja de las hojas de Excel especificadas y las
        /// almacena en la variable estática _rowDataList.
        /// </summary>
        /// <returns>True si la lista tiene elementos.</returns>
        public bool LoadData()
        {
            if (_rowDataList == null)
            {
                var watch = new Stopwatch();

                watch.Start();
                _rowDataList = new ConcurrentBag <T>();
                int index = -1;

                try
                {
                    using (var fs = File.OpenRead(XlsFullPath))
                    {
                        var workBook = new NPOI.XSSF.UserModel.XSSFWorkbook(fs);
                        _formulaEvaluator = workBook.GetCreationHelper().CreateFormulaEvaluator();
                        var  mapperConfig   = MappersConfig.FirstOrDefault();
                        bool hasMoreMappers = MappersConfig.Count > 1;

                        foreach (var sheetConfig in SheetsConfig)
                        {
                            var sheet = workBook.GetSheet(sheetConfig.SheetName);

                            if (hasMoreMappers)
                            {
                                mapperConfig = MappersConfig.FirstOrDefault(m => m.Name == sheetConfig.Map);
                            }

                            for (int rowIndex = sheetConfig.RowNumberStartData - 1;
                                 rowIndex < sheetConfig.RowNumberStopData;
                                 rowIndex++)
                            {
                                index = rowIndex;
                                var row = sheet.GetRow(rowIndex);
                                if (row == null)
                                {
                                    continue;
                                }

                                var obj = FillObject(mapperConfig, row);

                                //Llenar propiedades derivadas de otras
                                CalculateFields(ref obj);

                                _rowDataList.Add(obj);
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    throw new Exception(e.Message, e.InnerException);
                }
                finally
                {
                    watch.Stop();
                    _timeElapsed = watch.ElapsedMilliseconds;
                }
            }

            GC.Collect();
            return(_rowDataList.Count > 0);
        }