예제 #1
0
        /// <summary>Gets informations of the current object as a specific <see cref="InfoOutput"/> instance.
        /// </summary>
        /// <param name="infoOutput">The <see cref="InfoOutput"/> object which is to be filled with informations concering the current instance.</param>
        /// <param name="categoryName">The name of the category, i.e. all informations will be added to these category.</param>
        void IInfoOutputQueriable.FillInfoOutput(InfoOutput infoOutput, string categoryName)
        {
            InfoOutputPackage infoOutputCollection = infoOutput.AcquirePackage(categoryName);

            infoOutputCollection.Add(new InfoOutputProperty("RowCount", RowCount),
                                     new InfoOutputProperty("ColumnCount", ColumnCount),
                                     new InfoOutputProperty("SubDiagonalCount", SubDiagonalCount),
                                     new InfoOutputProperty("SuperDiagonalCount", SuperDiagonalCount));

            var dataTable = new System.Data.DataTable("Data");

            for (int j = 0; j < ColumnCount; j++)
            {
                dataTable.Columns.Add(j.ToString(), typeof(double));
            }

            for (int k = 0; k < RowCount; k++)
            {
                var row = dataTable.NewRow();
                for (int j = 0; j < ColumnCount; j++)
                {
                    row[j] = this[k, j];
                }
                dataTable.Rows.Add(row);
            }
            infoOutputCollection.Add(dataTable);
        }
예제 #2
0
        /// <summary>Gets informations of the current object as a specific <see cref="InfoOutput" /> instance.
        /// </summary>
        /// <param name="infoOutput">The <see cref="InfoOutput" /> object which is to be filled with informations concering the current instance.</param>
        /// <param name="categoryName">The name of the category, i.e. all informations will be added to these category.</param>
        public void FillInfoOutput(InfoOutput infoOutput, string categoryName = InfoOutput.GeneralCategoryName)
        {
            InfoOutputPackage infoOutputCollection = infoOutput.AcquirePackage(categoryName);

            infoOutputCollection.Add(new InfoOutputProperty("RowCount", RowCount),
                                     new InfoOutputProperty("ColumnCount", ColumnCount),
                                     new InfoOutputProperty("Dimension", Dimension),
                                     new InfoOutputProperty("IsSymmetric", true));

            var dataTable = new System.Data.DataTable("Data");

            for (int j = 0; j < Dimension; j++)
            {
                dataTable.Columns.Add(j.ToString(), typeof(double));
            }

            for (int k = 0; k < Dimension; k++)
            {
                var row = dataTable.NewRow();
                for (int j = 0; j < Dimension; j++)
                {
                    row[j] = this[k, j];
                }
                dataTable.Rows.Add(row);
            }
            infoOutputCollection.Add(dataTable);
        }
예제 #3
0
            /// <summary>Gets informations of the current object as a specific <see cref="T:Dodoni.BasicComponents.Containers.InfoOutput"/> instance.
            /// </summary>
            /// <param name="infoOutput">The <see cref="T:Dodoni.BasicComponents.Containers.InfoOutput"/> object which is to be filled with informations concering the current instance.</param>
            /// <param name="categoryName">The name of the category, i.e. all informations will be added to these category.</param>
            public virtual void FillInfoOutput(InfoOutput infoOutput, string categoryName = "General")
            {
                InfoOutputPackage infoOutputCollection = infoOutput.AcquirePackage(categoryName);

                infoOutputCollection.Add("Tenor", Tenor);
                infoOutputCollection.Add("Start date adjustment", StartDateAdjustment);
                infoOutputCollection.Add("End date adjustment", EndDateAdjustment);
            }
예제 #4
0
        /// <summary>Gets informations of the current object as a specific <see cref="InfoOutput"/> instance.
        /// </summary>
        /// <param name="infoOutput">The <see cref="InfoOutput"/> object which is to be filled with informations concering the current instance.</param>
        /// <param name="categoryName">The name of the category, i.e. all informations will be added to these category name.</param>
        public void FillInfoOutput(InfoOutput infoOutput, string categoryName)
        {
            InfoOutputPackage infoOutputCollection = infoOutput.AcquirePackage(categoryName);

            infoOutputCollection.Add("Rounding rule", RoundingRule.Name.String);
            (BondMarket as IInfoOutputQueriable).FillInfoOutput(infoOutput, categoryName + ".Bond market");
            (SwapMarket as IInfoOutputQueriable).FillInfoOutput(infoOutput, categoryName + ".Swap market");
        }
예제 #5
0
            /// <summary>Gets informations of the current object as a specific <see cref="InfoOutput"/> instance.
            /// </summary>
            /// <param name="infoOutput">The <see cref="InfoOutput"/> object which is to be filled with informations concering the current instance.</param>
            /// <param name="categoryName">The name of the category, i.e. all informations will be added to these category name.</param>
            void IInfoOutputQueriable.FillInfoOutput(InfoOutput infoOutput, string categoryName)
            {
                InfoOutputPackage infoOutputCollection = infoOutput.AcquirePackage(categoryName);

                infoOutputCollection.Add("Day count convention", DayCountConvention.Name.String);
                infoOutputCollection.Add("Business day convention", BusinessDayConvention.Name.String);
                infoOutputCollection.Add("Coupon frequency", CouponFrequency.Name.String);
            }
        /// <summary>Gets informations of the current object as a specific <see cref="InfoOutput"/> instance.
        /// </summary>
        /// <param name="infoOutput">The <see cref="InfoOutput"/> object which is to be filled with informations concering the current instance.</param>
        /// <param name="categoryName">The name of the category, i.e. all informations will be added to these category name.</param>
        public void FillInfoOutput(InfoOutput infoOutput, string categoryName)
        {
            InfoOutputPackage infoOutputCollection = infoOutput.AcquirePackage(categoryName);

            infoOutputCollection.Add("Day count convention", DayCountConvention.Name.String);
            infoOutputCollection.Add("Business day convention", BusinessDayConvention.Name.String);
            infoOutputCollection.Add("Business days to settle", BusinessDaysToSettle);
            infoOutputCollection.Add("Coupon frequency", CouponFrequency.Name.String);
        }
예제 #7
0
            /// <summary>Gets informations of the current object as a specific <see cref="T:Dodoni.BasicComponents.Containers.InfoOutput"/> instance.
            /// </summary>
            /// <param name="infoOutput">The <see cref="T:Dodoni.BasicComponents.Containers.InfoOutput"/> object which is to be filled with informations concering the current instance.</param>
            /// <param name="categoryName">The name of the category, i.e. all informations will be added to these category.</param>
            public virtual void FillInfoOutput(InfoOutput infoOutput, string categoryName = "General")
            {
                InfoOutputPackage infoOutputCollection = infoOutput.AcquirePackage(categoryName);

                infoOutputCollection.Add("Period start month", PeriodStartMonth);
                infoOutputCollection.Add("Period start year offset", PeriodStartYearOffset);
                infoOutputCollection.Add("Tenor", Tenor);
                infoOutputCollection.Add("Start date adjustment", StartDateAdjustment);
                infoOutputCollection.Add("End date adjustment", EndDateAdjustment);
            }
        /// <summary>Gets informations of the current object as a specific <see cref="T:Dodoni.BasicComponents.Containers.InfoOutput"/> instance.
        /// </summary>
        /// <param name="infoOutput">The <see cref="T:Dodoni.BasicComponents.Containers.InfoOutput"/> object which is to be filled with informations concering the current instance.</param>
        /// <param name="categoryName">The name of the category, i.e. all informations will be added to these category.</param>
        public void FillInfoOutput(InfoOutput infoOutput, string categoryName = "General")
        {
            InfoOutputPackage infoOutputCollection = infoOutput.AcquirePackage(categoryName);

            infoOutputCollection.Add("End date", EndDate);
            infoOutputCollection.Add("Spot date adjustment", SpotDateAdjustment);
            infoOutputCollection.Add("Start date adjustment", StartDateAdjustment);
            infoOutputCollection.Add("End date adjustment", EndDateAdjustment);
            infoOutputCollection.Add("Business days to settle", BusinessDaysToSettle);
        }
예제 #9
0
            /// <summary>Gets informations of the current object as a specific <see cref="InfoOutput"/> instance.
            /// </summary>
            /// <param name="infoOutput">The <see cref="InfoOutput"/> object which is to be filled with informations concering the current instance.</param>
            /// <param name="categoryName">The name of the category, i.e. all informations will be added to these category name.</param>
            void IInfoOutputQueriable.FillInfoOutput(InfoOutput infoOutput, string categoryName)
            {
                InfoOutputPackage infoOutputCollection = infoOutput.AcquirePackage(categoryName);

                infoOutputCollection.Add("Business days to settle", BusinessDaysToSettle);
                infoOutputCollection.Add("Fixed leg Business day convention", FixedBusinessDayConvention.Name.String);
                infoOutputCollection.Add("Fixed leg Day count convention", FixedDayCountConvention.Name.String);
                infoOutputCollection.Add("Fixed leg Frequency", FixedFrequency.Name.String);
                infoOutputCollection.Add("Floating leg Business day convention", FloatingBusinessDayConvention.Name.String);
                infoOutputCollection.Add("Floating leg Day count convention", FloatingDayCountConvention.Name.String);
                infoOutputCollection.Add("Floating leg Frequency", FloatingFrequency.Name.String);
            }
        /// <summary>Gets informations of the current object as a specific <see cref="InfoOutput"/> instance.
        /// </summary>
        /// <param name="infoOutput">The <see cref="InfoOutput"/> object which is to be filled with informations concering the current instance.</param>
        /// <param name="categoryName">The name of the category, i.e. all informations will be added to these category name.</param>
        public void FillInfoOutput(InfoOutput infoOutput, string categoryName)
        {
            InfoOutputPackage infoOutputCollection = infoOutput.AcquirePackage(categoryName);

            infoOutputCollection.Add("Business days to settle", BusinessDaysToSettle);
            infoOutputCollection.Add("Fixing lag", FixingLag.Name.String);
            infoOutputCollection.Add("Business day convention", BusinessDayConvention.Name.String);
            infoOutputCollection.Add("Day count convention", DayCountConvention.Name.String);
            infoOutputCollection.Add("Future base point value", FutureBasePointValue);
            infoOutputCollection.Add("Libor rate rounding rule", LiborRateRoundingRule.Name.String);
            infoOutputCollection.Add("Caplet tenor convention", CapletTenorConvention.Name.String);
            infoOutputCollection.Add("Libor index name", LiborIndexName);
        }
예제 #11
0
        /// <summary>Gets informations of the current object as a specific <see cref="InfoOutput"/> instance.
        /// </summary>
        /// <param name="infoOutput">The <see cref="InfoOutput"/> object which is to be filled with informations concering the current instance.</param>
        /// <param name="categoryName">The name of the category, i.e. all informations will be added to these category name.</param>
        /// <remarks>This implementation returns a <see cref="System.Data.DataTable"/> objects which contains the <see cref="System.DateTime"/> objects.</remarks>
        void IInfoOutputQueriable.FillInfoOutput(InfoOutput infoOutput, string categoryName)
        {
            var dateTable = new System.Data.DataTable("Dates");

            dateTable.Columns.Add("Value", typeof(DateTime));
            foreach (DateTime date in m_DateScheduleSet)
            {
                dateTable.Rows.Add(date);
            }
            InfoOutputPackage infoOutputCollection = infoOutput.AcquirePackage(categoryName);

            infoOutputCollection.Add(dateTable);

            infoOutputCollection.Add("Holiday calendar", HolidayCalendar.Name.String);
        }
예제 #12
0
        /// <summary>Stores informations of an <see cref="IPolynomial"/> object into a specified <see cref="InfoOutputPackage"/>.
        /// </summary>
        /// <param name="polynomial">The <see cref="IPolynomial"/> object.</param>
        /// <param name="infoOutputPackage">The <see cref="InfoOutputPackage"/> object to store the degree and coefficients of <paramref name="polynomial"/>.</param>
        internal static void FillInfoOutput(IPolynomial polynomial, InfoOutputPackage infoOutputPackage)
        {
            infoOutputPackage.Add("Degree", polynomial.Degree);

            DataTable coefficientDataTable = new DataTable("Coefficients");

            coefficientDataTable.Columns.Add("Order", typeof(int));
            coefficientDataTable.Columns.Add("Coefficient.Real", typeof(double));
            coefficientDataTable.Columns.Add("Coefficient.Imaginary", typeof(double));

            for (int order = 0; order <= polynomial.Degree; order++)
            {
                var coefficient = polynomial.GetCoefficient(order);

                coefficientDataTable.Rows.Add(order, coefficient.Real, coefficient.Imaginary);
            }
            infoOutputPackage.Add(coefficientDataTable);
        }
예제 #13
0
        /// <summary>Gets informations of the current object as a specific <see cref="InfoOutput"/> instance.
        /// </summary>
        /// <param name="infoOutput">The <see cref="InfoOutput"/> object which is to be filled with informations concering the current instance.</param>
        /// <param name="categoryName">The name of the category, i.e. all informations will be added to these category.</param>
        public void FillInfoOutput(InfoOutput infoOutput, string categoryName = InfoOutput.GeneralCategoryName)
        {
            InfoOutputPackage infoOutputCollection = infoOutput.AcquirePackage(categoryName);

            infoOutputCollection.Add("Frequency", m_Frequency.Name);
            infoOutputCollection.Add("Business day convention", m_BusinessDayConvention.Name);

            if ((m_FirstRegularDate != null) && (m_FirstRegularDate.HasValue == true))
            {
                infoOutputCollection.Add("First regular date", m_FirstRegularDate.Value);
            }
            if ((m_LastRegularDate != null) && (m_LastRegularDate.HasValue == true))
            {
                infoOutputCollection.Add("Last regular date", m_LastRegularDate.Value);
            }
            infoOutputCollection.Add("Seed date business day convention", SeedBusinessDayConvention.Name);
            if (m_ReferenceDate != DateTime.MinValue)
            {
                infoOutputCollection.Add("Reference date", m_ReferenceDate);
            }
            m_TimeSpanDescription.FillInfoOutput(infoOutput, categoryName);
        }
예제 #14
0
        public static object GetOutputPropertyValue(
            [ExcelArgument(Name = "objectName", Description = "The name of the object", AllowReference = true)]
            object xlObjectName,
            [ExcelArgument(Name = "propertyName", Description = "The name of the property", AllowReference = true)]
            object xlPropertyName,
            [ExcelArgument(Name = "propertyGroupName", Description = "[optional] The name of the property group ('general properties' is standard)", AllowReference = true)]
            object xlPropertyGroupName,
            [ExcelArgument(Name = "category", Description = "The category of the output, i.e. 'general' etc.", AllowReference = true)]
            object xlCategoryName)
        {
            try
            {
                if (ExcelDnaUtil.IsInFunctionWizard() == true)
                {
                    return(String.Empty);
                }

                IExcelDataQuery objectNameQuery = ExcelDataQuery.Create(xlObjectName);
                string          objectName;
                ExcelPoolItem   poolItem;
                if ((objectNameQuery.TryGetValue <string>(out objectName, dataAdvice: ExcelDataAdvice.Create(ExcelPool.GetObjectNames())) != ExcelCellValueState.ProperValue) || (ExcelPool.TryGetItem(objectName, out poolItem) == false))
                {
                    throw new ArgumentException("No object with name '" + objectNameQuery.ToString(0, 0).GetRelevantSubstring() + "' available.");
                }
                /* get the output of the pool object: */
                InfoOutput itemOutput = new InfoOutput();
                poolItem.Value.FillInfoOutput(itemOutput);

                InfoOutputPackage itemOutputCollection = null;
                IExcelDataQuery   categoryNameQuery    = ExcelDataQuery.Create(xlCategoryName);
                if (categoryNameQuery.IsEmpty == true)
                {
                    itemOutputCollection = itemOutput.GetGeneralPackage();
                }
                else
                {
                    string categoryName = categoryNameQuery.GetValue <string>(dataAdvice: ExcelDataAdvice.Create(itemOutput.CategoryNames));
                    itemOutputCollection = itemOutput.GetPackage(categoryName);
                }

                string          propertyGroupName      = InfoOutputPackage.GeneralPropertyGroupName.String;
                IExcelDataQuery propertyGroupNameQuery = ExcelDataQuery.Create(xlPropertyGroupName);
                if (propertyGroupNameQuery.IsEmpty == false)
                {
                    propertyGroupName = propertyGroupNameQuery.GetValue <string>(dataAdvice: ExcelDataAdvice.Create(itemOutputCollection.PropertyGroupNames));
                }

                IIdentifierStringDictionary <InfoOutputProperty> properties;
                if (itemOutputCollection.TryGetProperties(propertyGroupName, out properties) == false)
                {
                    throw new ArgumentException("The property group name' " + propertyGroupName + "' is invalid.");
                }

                IExcelDataQuery propertyNameQuery = ExcelDataQuery.Create(xlPropertyName);
                string          propertyName;
                if (propertyNameQuery.TryGetValue <string>(out propertyName, dataAdvice: ExcelDataAdvice.Create(properties)) != ExcelCellValueState.ProperValue)
                {
                    throw new ArgumentException("The property name '" + propertyNameQuery.ToString(0, 0) + "' is invalid.");
                }

                InfoOutputProperty property;
                if (properties.TryGetValue(propertyName, out property) == false)
                {
                    throw new ArgumentException("No property with name '" + propertyName + "' found.");
                }
                return(ExcelDataConverter.GetExcelCellRepresentation(property.Value));
            }
            catch (Exception e)
            {
                return(ExcelDataConverter.GetExcelRangeErrorMessage(e.Message));
            }
        }
예제 #15
0
 /// <summary>Adds the property 'State'.
 /// </summary>
 /// <param name="infoOutputCollection">The <see cref="InfoOutputPackage"/> object.</param>
 /// <param name="state">The state.</param>
 public static void Add(this InfoOutputPackage infoOutputCollection, InfoOutputState state)
 {
     infoOutputCollection.Add("State", state, Resources.State);
 }
예제 #16
0
        public static object GetOutputRange(
            [ExcelArgument(Name = "objectName", Description = "The name of the object", AllowReference = true)]
            object xlObjectName,
            [ExcelArgument(Name = "tableName", Description = "The name of the table", AllowReference = true)]
            object xlTableName,
            [ExcelArgument(Name = "rowIndices", Description = "An [optional] Excel Range vector that contains null-based (excluding header) row indices of the table", AllowReference = true)]
            object xlRowIndices,
            [ExcelArgument(Name = "columnIndicesOrNames", Description = "An [optional] Excel Range vector which contains column names or null-based column indices of the table", AllowReference = true)]
            object xlColumnIndicesOrNames,
            [ExcelArgument(Name = "category", Description = "The category of the output, i.e. 'general' etc.", AllowReference = true)]
            object xlCategoryName)
        {
            try
            {
                if (ExcelDnaUtil.IsInFunctionWizard() == true)
                {
                    return(String.Empty);
                }

                string          objectName;
                ExcelPoolItem   poolItem;
                IExcelDataQuery objectNameQuery = ExcelDataQuery.Create(xlObjectName);

                if ((objectNameQuery.TryGetValue <string>(out objectName, dataAdvice: ExcelDataAdvice.Create(ExcelPool.GetObjectNames())) != ExcelCellValueState.ProperValue) || (ExcelPool.TryGetItem(objectName, out poolItem) == false))
                {
                    throw new ArgumentException("No object with name '" + objectNameQuery.ToString(0, 0).GetRelevantSubstring() + "' available.");
                }

                InfoOutput infoOutput = new InfoOutput();
                poolItem.Value.FillInfoOutput(infoOutput);

                InfoOutputPackage itemOutputCollection = null;
                IExcelDataQuery   categoryNameQuery    = ExcelDataQuery.Create(xlCategoryName);
                if (categoryNameQuery.IsEmpty == true)
                {
                    itemOutputCollection = infoOutput.GetGeneralPackage();
                }
                else
                {
                    string categoryName = categoryNameQuery.GetValue <string>(dataAdvice: ExcelDataAdvice.Create(infoOutput.CategoryNames));
                    itemOutputCollection = infoOutput.GetPackage(categoryName);
                }

                IExcelDataQuery tableNameDataQuery = ExcelDataQuery.Create(xlTableName);

                DataTable tableOutput;
                string    tableName;
                if ((tableNameDataQuery.TryGetValue <string>(out tableName, dataAdvice: ExcelDataAdvice.Create(itemOutputCollection.GetDataTableNames())) != ExcelCellValueState.ProperValue) || (itemOutputCollection.TryGetDataTable(tableName, out tableOutput) == false))
                {
                    throw new ArgumentException("Table with name '" + tableNameDataQuery.ToString(0, 0) + "' is invalid.");
                }

                int rowCount, columnCount;
                IEnumerable <int> rowIndices    = GetRowIndices(ExcelDataQuery.Create(xlRowIndices), tableOutput, out rowCount);
                IEnumerable <int> columnIndices = GetColumnIndices(ExcelDataQuery.Create(xlColumnIndicesOrNames), tableOutput, out columnCount);

                return(ExcelDataConverter.GetExcelRangeOutput(GetSubTable(rowIndices, rowCount, columnIndices, columnCount, tableOutput)));
            }
            catch (Exception e)
            {
                return(ExcelDataConverter.GetExcelRangeErrorMessage(e.Message));
            }
        }
예제 #17
0
 /// <summary>Adds the property 'Execution time'.
 /// </summary>
 /// <param name="infoOutputCollection">The <see cref="InfoOutputPackage"/> object.</param>
 /// <param name="executionTime">The exection time in milliseconds.</param>
 public static void AddExecutionTime(this InfoOutputPackage infoOutputCollection, long executionTime)
 {
     infoOutputCollection.Add("Execution time", executionTime, Resources.ExecutionTime);
 }
예제 #18
0
        public static object GetOutputNames(
            [ExcelArgument(Name = "objectName", Description = "The name of the object", AllowReference = true)]
            object xlObjectName,
            [ExcelArgument(Name = "outputType", Description = "Contains the type of the output, i.e. 'tables' or 'properties'", AllowReference = true)]
            object xlOutputType,
            [ExcelArgument(Name = "propertyGroupName", Description = "[optional] If 'inputType = \"properties\" this argument represents the name of the table which represents the properties", AllowReference = true)]
            object xlPropertyTableName,
            [ExcelArgument(Name = "category", Description = "[optional] The category of the output, i.e. 'general' etc.", AllowReference = true)]
            object xlCategoryName)
        {
            try
            {
                if (ExcelDnaUtil.IsInFunctionWizard() == true)
                {
                    return(String.Empty);
                }

                IExcelDataQuery objectNameQuery = ExcelDataQuery.Create(xlObjectName);
                string          objectName;
                ExcelPoolItem   poolItem;
                if ((objectNameQuery.TryGetValue <string>(out objectName, dataAdvice: ExcelDataAdvice.Create(ExcelPool.GetObjectNames())) != ExcelCellValueState.ProperValue) || (ExcelPool.TryGetItem(objectName, out poolItem) == false))
                {
                    throw new ArgumentException("No object with name '" + objectNameQuery.ToString(0, 0).GetRelevantSubstring() + "' available.");
                }
                IExcelDataQuery outputTypeQuery = ExcelDataQuery.Create(xlOutputType);
                eQueryType      outputType;
                if (outputTypeQuery.TryGetValue <eQueryType>(out outputType, EnumStringRepresentationUsage.StringAttribute) != ExcelCellValueState.ProperValue)
                {
                    throw new ArgumentException("Invalid output type '" + outputTypeQuery.ToString(0, 0) + "'.");
                }

                /* get the output of the pool object: */
                InfoOutput itemOutput = new InfoOutput();
                poolItem.Value.FillInfoOutput(itemOutput);

                InfoOutputPackage itemOutputCollection = null;
                IExcelDataQuery   categoryNameQuery    = ExcelDataQuery.Create(xlCategoryName);
                if (categoryNameQuery.IsEmpty == true)
                {
                    itemOutputCollection = itemOutput.GetGeneralPackage();
                }
                else
                {
                    string categoryName = categoryNameQuery.GetValue <string>(0, 0, ExcelDataAdvice.Create(itemOutput.CategoryNames));
                    itemOutputCollection = itemOutput.GetPackage(categoryName);
                }

                IExcelDataQuery propertyTableQuery = ExcelDataQuery.Create(xlPropertyTableName);
                if (outputType == eQueryType.PropertyNames)
                {
                    string propertyTableName = InfoOutputPackage.GeneralPropertyGroupName.String;
                    if (propertyTableQuery.IsEmpty == false)
                    {
                        propertyTableName = propertyTableQuery.GetValue <string>(0, 0, ExcelDataAdvice.Create(itemOutputCollection.PropertyGroupNames));
                    }

                    IIdentifierStringDictionary <InfoOutputProperty> propertyCollection;
                    if (itemOutputCollection.TryGetProperties(propertyTableName, out propertyCollection) == false)
                    {
                        throw new ArgumentException("The property table with name' " + propertyTableName + "' is invalid.");
                    }

                    object[,] outputRange = new object[propertyCollection.Count() + 1, 1];
                    outputRange[0, 0]     = "Property names (output)";
                    int j = 1;
                    foreach (var property in propertyCollection)
                    {
                        outputRange[j, 0] = (string)property.Name;
                        j++;
                    }
                    return(ExcelDataConverter.GetExcelRangeOutput(outputRange));
                }
                else
                {
                    if (propertyTableQuery.IsEmpty == false)
                    {
                        throw new ArgumentException("The property table with name' " + propertyTableQuery.ToString(0, 0) + "' is invalid.");
                    }

                    List <object> outputRange = new List <object>();
                    outputRange.Add("Table names");
                    foreach (var table in itemOutputCollection.GetDataTables(InfoOutputPackage.DataTableType.Single | InfoOutputPackage.DataTableType.Parent))
                    {
                        outputRange.Add(table.Item1.String);
                    }
                    return(ExcelDataConverter.GetExcelRangeOutput(outputRange));
                }
            }
            catch (Exception e)
            {
                return(ExcelDataConverter.GetExcelRangeErrorMessage(e.Message));
            }
        }