예제 #1
0
        public void Load(List <TableRow> tables, List <ColumnRow> columns, string file)
        {
            var fileName = Path.GetFileNameWithoutExtension(file).Split('.');
            var context  = fileName[0];
            var group    = fileName[1];
            var subGroup = fileName[2];

            using (var package = ExcelPackage.Open(file))
            {
                foreach (var worksheet in package.Workbook.Worksheets)
                {
                    var               sheetName = worksheet.Name;
                    TableDescriptor   descriptor;
                    Action <string[]> addRow;
                    if (worksheet.Name == "Tables")
                    {
                        descriptor = GetTableDescriptor(worksheet, ContentLoadType.Table);
                        addRow     = row => tables.Add(GetTableRow(context, group, subGroup, sheetName, row));
                    }
                    else
                    {
                        descriptor = GetTableDescriptor(worksheet, ContentLoadType.Column);
                        addRow     = row => columns.Add(GetColumnRow(context, group, subGroup, sheetName, row));
                    }

                    foreach (var data in OpenXmlManager.Read(package, descriptor))
                    {
                        addRow(data);
                    }
                }
            }
        }
예제 #2
0
        public void Load(ContentLoaderConfiguration configuration, bool hasSchema = true)
        {
            using (var package = ExcelPackage.Open(configuration.FilePath))
            {
                foreach (var worksheet in package.Workbook.Worksheets)
                {
                    var type = GetType(worksheet.Name);
                    if (type == ContentLoadType.None)
                    {
                        continue;
                    }

                    var descriptor  = GetTableDescriptor(worksheet, hasSchema, type);
                    var searcher    = new Searcher(_tables, descriptor, type, hasSchema);
                    var columnNames = OpenXmlManager.ReadColumnsNames(package, descriptor);

                    IContentMapper <TTableContent> tableContentMapper = null;
                    if (type.HasFlag(ContentLoadType.Table))
                    {
                        tableContentMapper = new ContentMapper <TTableContent>(columnNames);
                    }
                    IContentMapper <TColumnContent> columnContentMapper = null;
                    if (type.HasFlag(ContentLoadType.Column))
                    {
                        columnContentMapper = new ContentMapper <TColumnContent>(columnNames);
                    }

                    var currentRow = descriptor.BeginRow;
                    foreach (var data in OpenXmlManager.Read(package, descriptor))
                    {
                        currentRow++;

                        TTable  table;
                        TColumn column;
                        searcher.Search(data, out table, out column);

                        if (column != null && columnContentMapper != null)
                        {
                            columnContentMapper.Map(column.Content, data);
                            continue;
                        }
                        if (!type.HasFlag(ContentLoadType.Table))
                        {
                            //TODO: Log not found column if type is Column
                            continue;
                        }
                        if (table != null && tableContentMapper != null)
                        {
                            tableContentMapper.Map(table.Content, data);
                            // ReSharper disable once RedundantJumpStatement
                            continue;
                        }
                        //TODO: Log not found table
                    }
                }
            }
        }