예제 #1
0
 private static TableDescriptor GetTableDescriptor(ExcelWorksheet worksheet, ContentLoadType type)
 {
     var countOfKeys = 2;
     if (type.HasFlag(ContentLoadType.Column))
     {
         countOfKeys++;
     }
     var descriptor = TableDescriptor.GetReadDynamic(worksheet.Name, new TableKeyDescriptor((new[] {1, 2, 3}).Take(countOfKeys).ToArray()), 2);
     return descriptor;
 }
예제 #2
0
        private static TableDescriptor GetTableDescriptor(ExcelWorksheet worksheet, ContentLoadType type)
        {
            var countOfKeys = 2;

            if (type.HasFlag(ContentLoadType.Column))
            {
                countOfKeys++;
            }
            var descriptor = TableDescriptor.GetReadDynamic(worksheet.Name, new TableKeyDescriptor((new[] { 1, 2, 3 }).Take(countOfKeys).ToArray()), 2);

            return(descriptor);
        }
예제 #3
0
            /// <summary>
            ///     Initializes a new instance of the <see cref="T:System.Object" /> class.
            /// </summary>
            public Searcher(List <TTable> tables, TableDescriptor descriptor, ContentLoadType type, bool hasSchema = true, Func <TTable, string[], bool> customPredicate = null)
            {
                Contract.Requires(descriptor != null);
                Contract.Requires(type.HasFlag(ContentLoadType.Table));
                Contract.Requires((type.HasFlag(ContentLoadType.Table) && descriptor.Key.Items.Length >= 1));
                Contract.Requires((type.HasFlag(ContentLoadType.Column) && descriptor.Key.Items.Length >= 2));

                _tables = tables;

                var shift = 1;

                _columnKeyIndex = -1;
                if (type.HasFlag(ContentLoadType.Column))
                {
                    _columnKeyIndex = descriptor.Key.Items[descriptor.Key.Items.Length - shift++] - 1;
                }
                var schemaKeyIndex = -1;
                var tableKeyIndex  = descriptor.Key.Items[descriptor.Key.Items.Length - shift++] - 1;

                if (hasSchema && shift < descriptor.Key.Items.Length)
                {
                    schemaKeyIndex = descriptor.Key.Items[descriptor.Key.Items.Length - shift] - 1;
                }

                var additionalIndexes = descriptor.Key.Items.Take(descriptor.Key.Items.Length - shift).Select(i => i - 1).ToArray();

                if (additionalIndexes.Length != 0)
                {
                    if (customPredicate == null)
                    {
                        throw new ArgumentNullException("customPredicate");
                    }
                    if (schemaKeyIndex >= 0)
                    {
                        _tablePredicate = dataRow =>
                        {
                            var schema     = dataRow[schemaKeyIndex];
                            var name       = dataRow[tableKeyIndex];
                            var additional = dataRow.Where((s, i) => additionalIndexes.Contains(i)).ToArray();
                            return(table => table.Schema == schema && table.Name == name && customPredicate(table, additional));
                        };
                    }
                    else
                    {
                        _tablePredicate = dataRow =>
                        {
                            var name       = dataRow[tableKeyIndex];
                            var additional = dataRow.Where((s, i) => additionalIndexes.Contains(i)).ToArray();
                            return(table => table.Name == name && customPredicate(table, additional));
                        };
                    }
                }
                else
                {
                    if (schemaKeyIndex >= 0)
                    {
                        _tablePredicate = dataRow =>
                        {
                            var schema = dataRow[schemaKeyIndex];
                            var name   = dataRow[tableKeyIndex];
                            return(table => table.Schema == schema && table.Name == name);
                        };
                    }
                    else
                    {
                        _tablePredicate = dataRow =>
                        {
                            var name = dataRow[tableKeyIndex];
                            return(table => table.Name == name);
                        };
                    }
                }
            }
예제 #4
0
        public void CreateDefaultTemplate(string filePath, ContentLoadType type, bool hasSchema = true)
        {
            string[] names;
            #region Names
            switch (type)
            {
            case ContentLoadType.Column:
            case ContentLoadType.TableOrColumn:
                names = hasSchema ? new[] { "Schema", "Table", "Column" } : new[] { "Table", "Column" };
                break;

            case ContentLoadType.Table:
                names = hasSchema ? new[] { "Schema", "Table" } : new[] { "Table" };
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            #endregion
            var descriptor = TableDescriptor.GetWrite("template", names);
            var set        = new DataSet();
            var dataTable  = new DataTable(descriptor.SheetName);
            set.Tables.Add(dataTable);
            #region Fill table
            foreach (var columnName in descriptor.ColumnNames)
            {
                dataTable.Columns.Add(columnName, typeof(string));
            }

            var getTableRow = hasSchema
                ? (Func <TTable, object[]>)(table => new object[] { table.Schema, table.Name })
                : (table => new object[] { table.Name });
            var getColumnRow = hasSchema
                ? (Func <TColumn, object[]>)(column => new object[] { column.Parent.Schema, column.Parent.Name, column.Name })
                : (column => new object[] { column.Parent.Name, column.Name });

            foreach (var table in _tables)
            {
                if (type.HasFlag(ContentLoadType.Table))
                {
                    dataTable.Rows.Add(getTableRow(table));
                }

                if (type.HasFlag(ContentLoadType.Column))
                {
                    foreach (var column in table.Columns)
                    {
                        dataTable.Rows.Add(getColumnRow(column));
                    }
                }
            }
            #endregion
            #region Create file
            using (var sourceStream = _extractor.ReadFileFromResToStream("model.xlsx"))
                using (var destinationStream = File.Create(filePath))
                {
                    sourceStream.CopyTo((destinationStream));
                }
            #endregion
            DataSheetManager.Write(filePath, set, descriptor);
        }