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); }