Пример #1
0
        public static void TestFormatting()
        {
            var data = DataModelColumnFormatting.GenerateData(1000);

            var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\TestFormatting.xlsx";

            using (var stream = new FileStream(path, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
            {
                var excel = new ExcelSerializer();
                var wb    = TestData.CreateWorkbookProperties();
                excel.Serialize(stream, new IEnumerable[] { data }, wb);
            }
        }
        }                                      // for deserialization

        /// <summary>
        /// Generate an array of reproducible pseudo-random data for testing.
        /// </summary>
        /// <param name="count">Number of items in array</param>
        /// <param name="highPrecision">True for enhanced precision using milliseconds in datetimes</param>
        /// <returns>Array of pseudo-random data</returns>
        public static DataModelColumnFormatting[] GenerateData(int count)
        {
            var    results = new DataModelColumnFormatting[count];
            Random rand    = new Random(1);

            var props = typeof(DataModelColumnFormatting).GetProperties();

            for (int i = 0; i < count; i++)
            {
                // Precompute to make date & time numerical values the same in a given row.
                var dt = new DateTime(rand.Next(1950, 2021), rand.Next(1, 13), rand.Next(1, 29), rand.Next(0, 24), rand.Next(0, 60), rand.Next(0, 60), rand.Next(0, 1000));
                var d  = rand.NextDouble() * 10000;

                results[i] = new DataModelColumnFormatting();
                foreach (var p in props)
                {
                    if (p.Name == "DoseUnits")
                    {
                        p.SetValue(results[i], rand.Next(0, 3) == 0 ? null : DoseUnitValues[rand.Next(0, DoseUnitValues.Length)]);
                        continue;
                    }
                    if (p.Name == "MoneyUnits")
                    {
                        p.SetValue(results[i], rand.Next(0, 3) == 0 ? null : MoneyUnitValues[rand.Next(0, MoneyUnitValues.Length)]);
                        continue;
                    }

                    if (p.PropertyType == typeof(DateTime))
                    {
                        p.SetValue(results[i], dt);
                        continue;
                    }

                    if (p.PropertyType == typeof(double))
                    {
                        p.SetValue(results[i], d);
                        continue;
                    }

                    if (p.PropertyType == typeof(double?))
                    {
                        p.SetValue(results[i], rand.Next(0, 3) == 0 ? (double?)null : d);
                        continue;
                    }
                }
            }

            return(results);
        }